The Linux Text-To-Speech mini-HOWTO Author: Rhandeev Singh rhandeev@comp.nus.edu.sg Version 0.02, Last update: 99/05/14 Hideki Shirafuji, shirafuji@mail.com Version 0.02 : 2000/08/03 この文書では RedHat 6.0 のシステムで Festival と MBROLA を使ってテキス ト読み上げ装置を設定する方法を解説しています。原文は にあります。 ______________________________________________________________________ 目次 1. イントロダクション 2. ソフトウェアの入手 3. インストール 4. 設定とテスト 4.1 基本設定 4.2 音声スタイルのサポート 4.3 スクリプトの中で音声の質を変える 4.4 音声出力装置の選択 4.5 ガーベージ コレクション メッセージの音を消す 4.6 質問と貢献 5. 付録 5.1 A.1. /usr/lib/festival/lib/siteinit.scm 用のテンプレート 5.2 A.2. /etc/festival.conf 用のテンプレート 5.3 A.3. スタイルのサポートを追加したスクリプト ______________________________________________________________________ 1. イントロダクション この文書は、音声出力ができる Linux システムで、商用ソフトウェアに頼ら ずにいろいろなドキュメントを読み上げられるようにするため、私がしたこと を書いたものです。いろいろなフリーのテキスト読み上げ(TTS)システムを 試してみましたが、これまで聴いた中では MBROLA と Festival の組み合わせ が一番良かったです。 また、スピードやピッチ(声の高さ)の設定を変更できるようにいくつのかス キームファイル [ 訳注: festival の動作を制御する専用のスクリプトファイ ル(拡張子 scm) ] をちょっと変えたり、lynx がさまざまなフォーマット (html, text, postscript)を読み上げられるように機能を追加しました。 2. ソフトウェアの入手 これを書いている時点では、Blind Linux Archive もしくはミラーサイトから 必要なソフトが入手できます。たとえば ftp://leb.net/blinux/festival/cstr.mirror/Linux-1.3.1/redhat/RPMS/i386/glibc2 ftp://leb.net/blinux/mbrola/blinux/RPMS/ それとも rpmfind.net では: http://rpmfind.net/linux/RPM/Utilities_Speech.html http://rpmfind.net/linux/RPM/Utilities_Sound.html もっと情報が必要なら Blind Linux ホームページ を見てください: http://leb.net/blinux/index.html i386 用の Red Hat 6.0 では、以下の RPM が必要でしょう: festival-1.3.1-2.i386.rpm festlex_POSLEX-1.3.1-1.noarch.rpm festvox_en1-1.3.1-1.noarch.rpm speech_tools-libs-1.1.1-2.i386.rpm festlex_OALD-1.3.1-1.noarch.rpm # for british english festlex_CMU-1.3.1-1.noarch.rpm # for american english また mbrola と、音声データベースを少なくともひとつ選ぶ必要があります。 (ブリティッシュ・イングリッシュが一番設定が簡単です): mbrola-3.01g1-1.i386.rpm mbrola-en1-2.0-1.i386.rpm # british english mbrola-us1-980512-1.i386.rpm # american (male) mbrola-us2-980812-1.i386.rpm # american (female) ターボールが必要な場合は Festival project を見てください: http://www.cstr.ed.ac.uk/projects/festival.html それと MBROLA project へ行ってください: http://tcts.fpms.ac.be/synthesis/mbrola.html 3. インストール ここでは、あなたの Linux のサウンド・ハードウェアはすでに設定してある ものとします。設定していない場合は、the Linux Sound-HOWTO を見てくださ い。特に、 /dev/dsp が正確に動作している必要があります。 RedHat RPMs のインストールはとても簡単です: bash$ rpm -Uhv fest* mbrola* 次にブリティッシュ・イングリッシュ用のシンボリックリンクをはります: cd /usr/lib/festival/lib/voices/english/rab_mbrola ln -s /usr/lib/mbrola/en1/en1 ln -s /usr/lib/mbrola/en1/en1mrpa [訳注: RedHat 6.1 用の RPM では cd /usr/share/festival/lib/voices/english/en1_mbrola/ mkdir en1 cd en1 ln -s /usr/lib/mbrola/en1/en1 ] それか、上記の "en1" をそれぞれのデータベース名に置き換えて、MBROLA に ほかの diphone データベースをインストールすることもできます;けれど も、私はどれもやってみたことがありません、それに、まず Festival がそれ らの言語を話せるように設定する必要があるでしょう。この文書を書いている 時点で、同じくフランス語 、ドイツ語、スペイン語、そのほかの言語の MBROLA diphone データベースも利用可能でした。Blind Linux ホームページ を見てください。 4. 設定とテスト 4.1. 基本設定 /usr/lib/festival/lib/voices.scm に1行追加します: [ 訳注: RedHat 6.1 用の RPM では /usr/lib/festival/ を /usr/share/festival/ と読み替える ] (defvar default-voice-priority-list '(rab_mbrola ; <= この行を追加 rab_diphone ; (もちろん ked_diphone ; セミコロンはいりません) さてできました。これで Festival は最初に MBROLA を使おうとします。 このように festival を走らせると、設定をテストできます: bash$ festival festival> (SayText "Type any text here. Sounds cool?") festival> (quit) いろいろなファイル形式、たとえば HTML をもっと「読みやすく」するため に、ファイルを前処理するように Festival を設定できます。どのように設定 するかは /usr/doc/festdoc-1.2.0/festival/festival.info にある festival のドキュメントを見てください。 "Text modes" のセクションに書いてありま す。 自分では、代わりにテキストを前処理する、古き良き sed スクリプトを書く ことしました。 ファイルを指定して festival をテキスト読み上げモードで走らせることがで きます: festival --tts またはストリームを処理することもできます: lynx -dump | tee /tmp/x | festival --tts & sleep 1; less /tmp/x もしこれで満足できて、役にたっているなら、ここでやめてかまいません。 が、ちょっと工夫した使い方があるので興味があれば先へどうぞ :) 4.2. 音声スタイルのサポート このセクションでは、ピッチや話す速さの調節をどうやって決め、選択するか 述べます。 音声「スタイル」を扱うのに必要な構文生成を定義するために、付録 A.1 の テキストを /usr/lib/festival/lib/siteinit.scm という名前の新規ファイル に保存してください。システム全般のスタイルを定義するために、付録 A.2 を /etc/festival.conf に保存してください。 次に、以下の1行を /usr/lib/festival/lib/init.scm の終わりの方に挿入し ます: ;;; Default voice (have to do something cute ;;; so autoloads still work) (eval (list voice_default)) (Style style_default) ; <= この行を追加 (provide 'init) このように $HOME/.festivalrc に追加すると、デフォルト以外にユーザー定 義の「スタイル」も指定できます: ;; ユーザー定義スタイル (NewStyle 'my_slow 100 24 1.0) ; ゆっくりしたバリトンの声 (NewStyle 'my_fast 140 50 0.8) ; 速いテナーの声 (set! style_default 'my_slow) ; デフォルトのスタイル 最初の数字はピッチ(Hz)を意味します。2番目の数字はピッチの標準偏差 (それとも分散?)で、3番目の数字はスケール要素で、小さい数字ほど速く なります。 4.3. スクリプトの中で音声の質を変える festival をスクリプトからバッチモードで使っている場合、現在の「スタイ ル」をスクリプトの中でこんなふうに変えることができます: (Style 'male_faster) たとえば付録 A.3 のスクリプトを見てください。このスクリプトは festival のテキスト読み上げのコマンドライン・インターフェイスに、スタイルを選択 するサポートを追加します。もしこれを変更してほかの機能を追加したら、ぜ ひ私に教えてください! 4.4. 音声出力装置の選択 人によっては、MP3 をサウンド・ハードウェアで聴きながら同時に festival が使えるように NCD のネットワーク音響システム(NAS)を使うことを選ぶで しょう。 そのためには、以下の行を /etc/festival.conf に挿入してください: ;;; =================== ;;; Audio Output Method ;;; =================== (Parameter.set 'Audio_Method 'Audio_Command) (Parameter.set 'Audio_Required_Rate 16000) (Parameter.set 'Audio_Required_Format 'snd) (Parameter.set 'Audio_Command "/usr/X11R6/bin/auplay -volume 100 $FILE") 4.5. ガーベージ コレクション メッセージの音を消す 対話的な設定を使い、ウェッブ・ページを lynx に読み上げさせているような 場合(lynx.cfg の中で指定できます)は、ガーベージ コレクション メッセ ージの音を消すと便利です。 ガーベージ コレクション メッセージの音を消すには、/etc/festival.conf か $USER/.festivalrc のどちらかに以下の行を追加します: (gc-status nil) 4.6. 質問と貢献 もし festival を動かすときに問題がおきたり、この mini-HOWTO に何か貢献 できることがあれば、この文書の著者に接触してもかまいません: Rhandeev Singh http://www.comp.nus.edu.sg/~rhandeev Linux User Group http://linux.comp.nus.edu.sg National University of Singapore 5. 付録 5.1. A.1. /usr/lib/festival/lib/siteinit.scm 用のテンプレート (警告:Scheme code が続きます;理解する必要はありません) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Site Initialisation file ;;; This is loaded near the end of init.scm, ;;; just before user initialisation file ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ========================== ;;; Style Management Functions ;;; ========================== (defvar Styles '((default 140 22 1.0)) "Available voice styles") (defvar style_default 'default "Default voice style") (defvar current_style 'none "Current voice style") (define (Style selected_style) "(Style DEFINED_STYLE) Sets the pitch, pitch variance, and speed of the current voice. Type 'Styles' for a list of defined styles." (let ((style (assoc selected_style Styles))) (if (not style) (set! style (assoc 'default Styles))) (let ((model_mean (cadr (assoc 'model_f0_mean int_lr_params))) (model_std (cadr (assoc 'model_f0_std int_lr_params))) (new_mean (cadr style)) (new_std (cadr (cdr style))) (new_stretch (cadr (cdr (cdr style))))) (set! int_lr_params (list (list 'target_f0_mean new_mean) (list 'target_f0_std new_std) (list 'model_f0_mean model_mean) (list 'model_f0_std model_std))) (Parameter.set 'Duration_Stretch new_stretch) (set! current_style (car style)) (list (car style) new_mean new_std new_stretch) ) ) ) (define (NewStyle style_name mean std stretch) "(NewStyle STYLE_NAME MEAN STD STRETCH) Defines a new style; MEAN and STD refer to pitch mean and variance, while STRETCH refers to inverse speed, 1.0 being the standard." (set! Styles (cons (list style_name mean std stretch) Styles))) (if (probe_file "/etc/festival.conf") (load "/etc/festival.conf")) 5.2. A.2. /etc/festival.conf 用のテンプレート ;;; ================= ;;; Style Definitions ;;; ================= (NewStyle 'male_frozen 80 10 1.5 ) (NewStyle 'male_slow 100 22 1.1 ) (NewStyle 'male_tenor 140 60 1.0 ) (NewStyle 'male_baritone 100 40 1.0 ) (NewStyle 'male_bass 70 25 1.0 ) (NewStyle 'male_relaxed 100 24 0.95) (NewStyle 'male_newscaster 140 32 0.85) (NewStyle 'male_hurried 117 22 0.80) (NewStyle 'male_stressed 150 30 0.70) (NewStyle 'male_fast 110 22 0.70) (NewStyle 'male_faster 110 22 0.60) (NewStyle 'male_panic 170 20 0.60) (NewStyle 'male_fastest 110 22 0.55) (NewStyle 'the_flash 110 22 0.45) 5.3. A.3. スタイルのサポートを追加したスクリプト これは festival のテキスト読み上げのインターフェイスに声質の「スタイ ル」のサポートを追加するスクリプトです。ほかの機能を追加するためのテン プレートとしても使えます。何か追加したらぜひ教えてください。 スクリプト名を saytext として、ごく簡単に使い方を説明しておきましょ う。 saytext -h # (なぞめいた)ヘルプメッセージがでます saytext [-s <スタイル>] [<ファイル名>] # ファイルもしくは標準入力を読み上げます <スタイル>は、存在するものなら何でもかまいません。<ファイル名 >が指定 されない場合は、標準入力が使われます。 例 saytext -s male_baritone myfile.txt そしてこれがスクリプトのコードです: #!/usr/lib/festival/src/main/festival --script ;;; Here is a Festival script that adds voice "style" ;;; support to the text-to-speech command-line interface. ;;; ;;; Type "saytext -h" for help, including a list of available styles. ;;; ;;; User-defined "styles" can be declared in ~/.festivalrc like this: ;;; ;;; (NewStyle ) ;;; E.g: (NewStyle 'mystyle 100 23 0.9) ; Defines a baritone ;;; ;;; You can also set default styles: ;;; ;;; (set! style_default 'my_style) ;;; ;;; Styles may be selected within a script via: ;;; ;;; (Style ) ;;; E.g.: (Style 'my_style) ;;; ============== ;;; INITIALIZATION ;;; ============== ;;; Because this is a --script type file I have to explicitly ;;; load the initfiles: init.scm and user's .festivalrc (load (string-append libdir "init.scm")) (if (probe_file (format nil "%s/.festivalrc" (getenv "HOME"))) (load (format nil "%s/.festivalrc" (getenv "HOME")))) ;;; Clear rotten rendered speech from tmp (system "/bin/rm -f /tmp/est_*") ;;; Process command-line arguments (defvar TTS_Filename "-" "This variable stores the name of the file to be read, \"\" for stdin") (while argv (let ((option (car argv))) (set! argv (cdr argv)) (cond ((eq? option '-s) (if (length argv) (let ((style (car argv))) (if (not (assoc style Styles)) (format t "No style '%s, " style)) (Style style) ; (format t "Using style %s\n" current_style) (set! argv (cdr argv)) ) (error "Syntax error in option: -s