星期六, 10月 21, 2006

有趣的 Festival

Festival 是個 Free Software 的語音合成 (Speech Synthesis/Text-to-Speech) 程式。不過可惜 Festival 本身只提供英式和美式英文以及西班牙文等的男聲。不過 Festival 有提供一個 Wrapper 來呼叫 MBROLA 計劃的封閉原始碼程式,以使用 MBROLA 計劃的語音庫 (Festival and MBROLA 網頁中有安裝方式的簡介)。

Festival 的使用方式有幾種:

  1. 執行 festival client 程式,使用 interactive 模式下指令進行操作
  2. 使用 festival 提供的 text2wave 工具程式,直接把文字轉換成 wave 格式的語音檔案
  3. 使用其他語言的 wrapper,例如 perl 的 Festival::Client
其中第三種使用方式,在 perlbox 計劃中,就是使用這種方式驅動 festival 進行語音回應;而第二種方法應該是最簡單的方法了。

以下是幾個我寫的應用實例:

  • 語音報時:voice-clock.sh

    #!/bin/bash

    function usage {
            echo -e "Usage:\n\n\t$(basename $0) date|time\n\n";
    }


    [ "x$1" == "x" ] && {
            usage;
            exit 1;
    }

    TEXT2WAVE="text2wave -scale 3.5 - "
    TIME="$(LC_ALL=C date '+%l:%M %p')"
    DATE="$(LC_ALL=C date '+%A, %B %d, %Y')"
    PLAYER="aplay"

    case $1 in
            [Dd][Aa][Tt][Ee])
                    echo ${DATE} | ${TEXT2WAVE} | ${PLAYER} 2> /dev/null;
                    ;;
            [Tt][Ii][Mm][Ee])
                    echo ${TIME} | ${TEXT2WAVE} | ${PLAYER} 2> /dev/null;
                    ;;
            *)
                    usage;
                    exit 1;
                    ;;
    esac

  • 檢查某關站維護的 BBS 是否重新啟動了:check-bbs.sh

    #!/bin/bash

    while true; do
            ping -c 1 bbs.somebbs.org > /dev/null && {
            voice-clock time;
            for (( i=1; i<=5; i++ )); do
                    echo "Some BBS is back again" | text2wave -scale 3.5 - | aplay;
                    sleep 1;
            done;
            break;
            }
            sleep 60;
    done


其他還有許多可能的應用。目前中文的語音合成程式就我所知,似乎還沒看到有 Free Software 的實作可用。

沒有留言: