<!doctype linuxdoctr system>
<article>
<title>The Linux Text-To-Speech mini-HOWTO</title>
<author>Author: Rhandeev Singh <url url="mailto:rhandeev@comp.nus.edu.sg" name = "rhandeev@comp.nus.edu.sg"></author>
<date>Version 0.02, Last update: 99/05/14</date>
<trans>Hideki Shirafuji, <url url="mailto:shirafuji@mail.com" name="shirafuji@mail.com">
<tdate>Version 0.02 : 2000/08/03

<!--
This document describes how to set up text-to-speech facilities on a
RedHat 6.0 system using Festival and MBROLA.
</abstract>
-->
<abstract>
この文書では RedHat 6.0 のシステムで Festival と MBROLA を使ってテ
キスト読み上げ装置を設定する方法を解説しています。
原文は <url url="http://leb.net/pub/blinux/doc/blinux/my-tts-linux.txt">にあります。
</abstract>

<toc>
<!--
1.  Introduction
-->
<sect>イントロダクション

<!--
This is a description of what I did to get my sound-enabled Linux
system to read various documents to me without resorting to commercial
software.  I've tried various free Text-To-Speech (TTS) systems, and
so far, Festival with MBROLA gives the best TTS quality I've heard.
-->
<p>
この文書は、
音声出力ができる Linux システムで、商用ソフトウェアに頼らずにいろいろ
なドキュメントを読み上げられるようにするため、私がしたことを書いたものです。
いろいろなフリーのテキスト読み上げ（TTS）システムを試してみましたが、
これまで聴いた中では MBROLA と Festival の組み合わせが一番良かったです。


<!--
I've also tweaked some of the scheme files a bit so I can define
different speeds/pitches and added support so lynx can read aloud a
variety of formats (html, text, postscript).
-->
<p>
また、
スピードやピッチ（声の高さ）の設定を変更できるようにいくつのかスキーム
ファイル
&lsqb;
訳注: festival の動作を制御する専用のスクリプトファイル（拡張子 scm）
&rsqb;
をちょっと変えたり、lynx がさまざまなフォーマット
（html, text, postscript）を読み上げられるように機能を追加しました。

<!--
2.  Obtaining the software
-->
<sect>ソフトウェアの入手

<!--
As of this writing, you can obtain the required software from the
Blind Linux Archive or any mirror, e.g.
-->
<p>
これを書いている時点では、Blind Linux Archive もしくはミラーサイト
から必要なソフトが入手できます。たとえば

<verb>
	ftp://leb.net/blinux/festival/cstr.mirror/Linux-1.3.1/redhat/RPMS/i386/glibc2
	ftp://leb.net/blinux/mbrola/blinux/RPMS/
</verb>

<!--
or from rpmfind.net:
-->
<p>
それとも rpmfind.net では：

<verb>
	http://rpmfind.net/linux/RPM/Utilities_Speech.html
	http://rpmfind.net/linux/RPM/Utilities_Sound.html
</verb>

<!--
See the Blind Linux Home Page for more information:
-->
<p>
もっと情報が必要なら Blind Linux ホームページ を見てください：

<verb>
	http://leb.net/blinux/index.html
</verb>

<!--
You will need the following RPMs for Red Hat 6.0 on i386:
-->
<p>
i386 用の Red Hat 6.0 では、以下の RPM が必要でしょう：

<verb>
	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
</verb>

<!--
You will also need mbrola, plus at least one voice database of your
choice (british english is the most straightforward to set up):
-->
<p>
また mbrola と、音声データベースを少なくともひとつ選
ぶ必要があります。（ブリティッシュ・イングリッシュが一番設定が簡単で
す）：

<verb>
	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)
</verb>

<!--
If you need tarballs, visit the Festival project at
-->
<p>
ターボールが必要な場合は Festival project を見てください：

<verb>
	http://www.cstr.ed.ac.uk/projects/festival.html
</verb>

<!--
and the MBROLA project at
-->
<p>
それと MBROLA project へ行ってください：

<verb>
	http://tcts.fpms.ac.be/synthesis/mbrola.html
</verb>

<!--
3.  Installation
-->
<sect>インストール

<!--
Here, I ASSUME YOUR LINUX SOUND HARDWARE IS ALREADY SET UP.  See the
Linux Sound-HOWTO if it isn't.  In particular, you'll need /dev/dsp to
be functioning properly.
-->
<p>
ここでは、あなたの Linux のサウンド・ハードウェアはすでに設定してある
ものとします。
設定していない場合は、the Linux Sound-HOWTO を見てください。特に、
/dev/dsp が正確に動作している必要があります。

<!--
Installing the RedHat RPMs is pretty straightforward:
-->
<p>
RedHat RPMs のインストールはとても簡単です：

<verb>
	bash$ rpm -Uhv fest* mbrola*
</verb>

<!--
Next, create some symbolic links for british english:
-->
<p>
次にブリティッシュ・イングリッシュ用のシンボリックリンクをはります：

<verb>
	cd /usr/lib/festival/lib/voices/english/rab_mbrola
	ln -s /usr/lib/mbrola/en1/en1
	ln -s /usr/lib/mbrola/en1/en1mrpa
</verb>

<verb>
&lsqb;訳注: RedHat 6.1 用の RPM では
	cd /usr/share/festival/lib/voices/english/en1_mbrola/
	mkdir en1
	cd en1
	ln -s /usr/lib/mbrola/en1/en1
&rsqb;
</verb>


<!--
Alternatively, you could install other diphone databases for MBROLA by
replacing "en1" above with the respective database name; however, I
have never tried any of them, and besides, you'd need to get Festival
to speak those languages first.  As of this writing, MBROLA diphone
databases were also available for French, German, Spanish, and a
variety of other languages.  See the Blind Linux Home Page.
-->
<p>
それか、上記の "en1" をそれぞれのデータベース名に置き換え
て、MBROLA にほかの diphone データベースをインストールするこ
ともできます；けれども、私はどれもやってみたことがありません、
それに、まず Festival がそれらの言語を話せるように設定する
必要があるでしょう。この文書を書いている時点で、同じくフランス
語 、ドイツ語、スペイン語、そのほかの言語の MBROLA diphone
データベースも利用可能でした。Blind Linux ホームページを見てくだ
さい。

<!--
4.  Configuration and Testing
-->
<sect>設定とテスト

<!--
4.1.  Basic Configuration
-->
<sect1>基本設定

<!--
Insert a line in /usr/lib/festival/lib/voices.scm:
-->
<p>
/usr/lib/festival/lib/voices.scm に１行追加します：

&lsqb;
訳注: RedHat 6.1 用の RPM では
/usr/lib/festival/ を /usr/share/festival/ と読み替える
&rsqb;

<!--
	(defvar default-voice-priority-list
	  '(rab_mbrola                     ; <= INSERT THIS LINE
	    rab_diphone			   ; (without the semicolons,
	    ked_diphone			   ;  of course)
-->

<verb>
	(defvar default-voice-priority-list
	  '(rab_mbrola                     ; <= この行を追加
	    rab_diphone			   ; （もちろん
	    ked_diphone			   ;  セミコロンはいりません）
</verb>

<!--
And you're done.  This tells Festival to try to use MBROLA first.
-->
<p>
さてできました。これで Festival は最初に MBROLA を使おうとします。

<!--
You can test your setup by running festival like this:
-->
<p>
このように festival を走らせると、設定をテストできます：

<verb>
	bash$ festival
	festival> (SayText "Type any text here.  Sounds cool?")
	festival> (quit)
</verb>

<!--
Festival can be configured to pre-process various file formats to make
them more "readable", e.g. HTML. See the festival documentation in
/usr/doc/festdoc-1.2.0/festival/festival.info for information on how
to set this up.  It's under the section "Text modes".
-->
<p>
いろいろなファイル形式、たとえば HTML をもっと「読みやす
く」するために、ファイルを前処理するように Festival を設定できます。
どのように設定するかは 
/usr/doc/festdoc-1.2.0/festival/festival.info にある festival のドキュ
メントを見てください。
 "Text modes" のセクションに書いてあります。

<!--
As for me, I chose to write a good old sed script to do my text
pre-processing instead.
-->
<p>
自分では、代わりにテキストを前処理する、古き良き sed スクリプトを書く
ことしました。


<!--
You can run festival in text-to-speech mode on a file:
-->
<p>
ファイルを指定して festival をテキスト読み上げモードで走らせることができ
ます：

<verb>
	festival --tts <filename>
</verb>

<!--
or on a stream:
-->
<p>
またはストリームを処理することもできます：

<verb>
	lynx -dump <URL> | tee /tmp/x | festival --tts & sleep 1; less /tmp/x
</verb>

<!--
If you're satisfied and it works, you can stop here.  But read on for
some tweaks if you're curious :)
-->
<p>
もしこれで満足できて、役にたっているなら、ここでやめてかまいません。
が、ちょっと工夫した使い方があるので興味があれば先へどうぞ :)

<!--
4.2.  Voice Style Support
-->
<sect1>音声スタイルのサポート

<!--
This section shows you how to define and select pitch and speed presets.
-->
<p>
このセクションでは、ピッチや話す速さの調節をどうやって決め、
選択するか述べます。

<!--
Dump appendix A.1 into the new file /usr/lib/festival/lib/siteinit.scm
to define the necessary scheme procedures for handling voice "styles".
Put Appendix A.2 into /etc/festival.conf to define some system-wide
styles.
-->
<p>
音声「スタイル」を扱うのに必要な構文生成を定義するために、
付録 A.1 のテキストを /usr/lib/festival/lib/siteinit.scm という名前の
新規ファイルに保存してください。システム全般のスタイルを定義するために、
付録 A.2 を /etc/festival.conf に保存してください。

<!--
Next, insert a line near the end of /usr/lib/festival/lib/init.scm:
-->
<p>
次に、以下の１行を /usr/lib/festival/lib/init.scm の終わりの方に挿
入します：

<!--
	;;; Default voice (have to do something cute
	;;; so autoloads still work)
	(eval (list voice_default))
	(Style style_default)		; <= INSERT THIS LINE
	(provide 'init)
-->

<verb>
	;;; Default voice (have to do something cute
	;;; so autoloads still work)
	(eval (list voice_default))
	(Style style_default)		; <= この行を追加
	(provide 'init)
</verb>

<!--
You can put user-defined "styles", including a default, into
$HOME/.festivalrc like this:
-->
<p>
このように $HOME/.festivalrc に追加すると、デフォルト以外にユーザー
定義の「スタイル」も指定できます：


<!--
	;; User-defined styles
	(NewStyle 'my_slow	100 24 1.0) ; A slow baritone voice
	(NewStyle 'my_fast	140 50 0.8) ; A fast tenor voice

	(set! style_default 'my_slow)	    ; My default style
-->
<verb>
	;; ユーザー定義スタイル
	(NewStyle 'my_slow	100 24 1.0) ; ゆっくりしたバリトンの声
	(NewStyle 'my_fast	140 50 0.8) ; 速いテナーの声

	(set! style_default 'my_slow)	    ; デフォルトのスタイル
</verb>

<!--
The first number is the mean pitch (Hz), the second is the pitch std
deviation (or is it variance?) and the third is the scaling factor,
smaller=faster.
-->
<p>
最初の数字はピッチ（Hz）を意味します。
２番目の数字はピッチの標準偏差（それとも分散？）で、
３番目の数字はスケール要素で、小さい数字ほど速くなります。

<!--
4.3.  Changing Styles Inside A Script
-->
<sect1>スクリプトの中で音声の質を変える

<!--
If you're running festival on a script in batch mode, you can change
the current "style" within the script like this:
-->
<p>
festival をスクリプトからバッチモードで使っている場合、現在の「スタイル」
をスクリプトの中でこんなふうに変えることができます：

<verb>
	(Style 'male_faster)
</verb>

<!--
As an example, see the script in Appendix A.3. that adds style
selection support to festival's command-line TTS interface.  If you
modify it to add other functionality, do let me know!
-->
<p>
たとえば付録 A.3 のスクリプトを見てください。
このスクリプトは festival のテキスト読み上げのコマンドライン・インター
フェイスに、スタイルを選択するサポートを追加します。
もしこれを変更してほかの機能を追加したら、ぜひ私に教えてください！

<!--
4.4.  Selecting The Output Method
-->
<sect1>音声出力装置の選択

<!--
Some people prefer to use NCD's Network Audio System (NAS) so that
they can play MP3's through their sound hardware and use festival at
the same time.
-->
<p>
人によっては、MP3 をサウンド・ハードウェアで聴きながら同時に festival が
使えるように NCD のネットワーク音響システム（NAS）を使うことを選ぶでしょ
う。

<!--
To do this, insert the following into /etc/festival.conf:
-->
<p>
そのためには、以下の行を /etc/festival.conf に挿入してください：

<verb>
	;;; ===================
	;;; 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")
</verb>

<!--
4.5.  Turning Off Garbage Collection Messages
-->
<sect1>ガーベージ　コレクション　メッセージの音を消す

<!--
It is useful to turn off garbage-collection messages if you're using
an interactive setup, like making lynx read web pages to you (you can
do this in lynx.cfg).
-->
<p>
対話的な設定を使い、ウェッブ・ページを lynx に読み上げさせて
いるような場合（lynx.cfg の中で指定できます）は、ガーベージ　コレクショ
ン　メッセージの音を消すと便利です。


<!--
To disable garbage collection messages, insert this in either
/etc/festival.conf or $USER/.festivalrc:
-->
<p>
ガーベージ　コレクション　メッセージの音を消すには、/etc/festival.conf
か $USER/.festivalrc のどちらかに以下の行を追加します：

<verb>
	(gc-status nil)
</verb>

<!--
4.6.  Queries And Contributions
-->
<sect1>質問と貢献

<!--
If you're facing trouble getting festival to work, or have anything to
contribute to this mini-HOWTO, you can contact the author of this
mini-HOWTO:
-->
<p>
もし festival を動かすときに問題がおきたり、この mini-HOWTO に何か貢
献できることがあれば、この文書の著者に接触してもかまいません：


<verb>
 Rhandeev Singh                   http://www.comp.nus.edu.sg/~rhandeev
 Linux User Group                 http://linux.comp.nus.edu.sg
 National University of Singapore
</verb>


<!--
======================================================================
			      APPENDICES
======================================================================
-->
<sect>付録

<!--
A.1.  Template for /usr/lib/festival/lib/siteinit.scm
-->
<sect1>A.1.  /usr/lib/festival/lib/siteinit.scm 用のテンプレート

<!--
(WARNING: Scheme code follows; you don't have to understand this)
-->
<p>
（警告：Scheme code が続きます；理解する必要はありません）
<verb>

	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	;;;  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"))
</verb>


<!--
A.1.  Template for /etc/festival.conf
-->
<sect1>A.2.  /etc/festival.conf 用のテンプレート
<p>
<verb>
	;;; =================
	;;; 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)
</verb>



<!--
A.3.  Script with Style Support
-->
<sect1>A.3.  スタイルのサポートを追加したスクリプト

<!--
Here's a script that adds voice "style" support to the festival
text-to-speech interface.  You can use it as a template to add further
functionality.  Do let me know if you do!
-->
<p>
これは festival のテキスト読み上げのインターフェイスに声質の
「スタイル」のサポートを追加するスクリプトです。ほかの機能を追加
するためのテンプレートとしても使えます。何か追加したらぜひ教え
てください。

<!--
Here's very briefly how to use it, assuming it's named "saytext":
-->
<p>
スクリプト名を saytext として、ごく簡単に使い方を説明しておきましょう。

<!--
	saytext -h		# gives a (cryptic) help message

	saytext [-s <style>] [<filename>]  # recites a file or stdin
-->
<verb>
	saytext -h		# （なぞめいた）ヘルプメッセージがでます

	saytext [-s <スタイル>] [<ファイル名>]  # ファイルもしくは標準入力を読み上げます
</verb>

<!--
<style> can be any existing style, and if <filename> is unspecified,
standard input is used.
-->
<p>
&lt;スタイル&gt;は、存在するものなら何でもかまいません。&lt;ファイル名
&gt;が指定されない場合は、標準入力が使われます。


<!--
	e.g.	saytext -s male_baritone myfile.txt
-->

<verb>
	例	saytext -s male_baritone myfile.txt
</verb>

<!--
And here's the code for the script:
-->
<p>
そしてこれがスクリプトのコードです：

<verb>
    	#!/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 <name> <mean_pitch> <pitch_SD> <speed>)
	;;;  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 <name>)
	;;;  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 <style>" nil)))
	
		  ((eq? option '-h)
		   (format t "Usage: saytext [-s <style> | -h]\n")
		   (format t "Available styles are:\n")
		   (format t " %l\n" Styles)
		   (quit))
	
		  (t
		   (set! TTS_Filename (string-append "" option))))))
	
	
	(tts TTS_Filename nil)
</verb>

<!--
=================
END OF mini-HOWTO
=================
-->
</article>
