竹の 12/23 2003 --------------- テキストファイル読み上げツール yomi を公開します (UNIX 用)。現在 の version は 0.12.1 です。 1. はじめに ----------- yomi は、ごく単純な方法で、テキストファイルを読み上げるためのソフ トです。特徴は次の通りです。 1) 音声出力の方法は、規則音声合成とかの立派な方法ではなく、単にテ キストファイルをひらがなの文書に直して、それに対応するひらがな の音声データを単純につないで音声デバイスなどに出すだけ、という 非常に粗末なものです。よって、イントネーションもでたらめ、一音 一音の音のデータもバラバラで決して聞きやすいものではありません。 音声データの品質も粗悪です。 2) 現在のバージョンは、日本語化された perl を使用しています。よっ て perl を知っていれば修正は可能です。 3) 漢字のひらがなへの変換には kakasi を使用していますが、kakasi はこのような目的に合わない部分があり、少し無理があります。 4) 記号の読み、アルファベットの読みには弱く、また単に一つ一つの記 号を読んでいくだけなので、記号列の読み、アルファベット列の読み は時間がかかります。そして、使用すれば分かりますが、他にも弱い 箇所はまだたくさんあります。 5) 50 音や数字、アルファベットの音に対応した音声データをつなげる、 という方法なので、そのようなデータを録音し直せば、任意の声で読 ませることが可能です。なお、現在対応しているのは、μ-Law 8kHz の AU ファイル (.au)、linear PCM の WAV ファイル (.wav), linear PCM の AIFF ファイル (.aiff) のみです。 6) 日本語のコードは EUC のみに対応しています。 7) 読みの速度の変更が可能です。 なお、version 0.12 よりドキュメントファイルを readme-yomi (このフ ァイル)、readme-contrib (標準ではインストールされない付属ツールに 関する説明)、readme-technical (技術情報) に分離しました。それらの ファイルも必要ならば参照して下さい。 2. install ---------- 2.1. FreeBSD の場合の簡単な説明 ------------------------------- FreeBSD を使用していて、日本語化された perl5, kakasi がパッケージ からインストールされている場合で、yomi も /usr/local の下へインス トールしてもいい場合は、インストールは簡単です (ports や package 化は行っていません)。 それ以外の場合は、Makefile を修正する必要があります。「2.2. 動作 環境」以下へ進んでください。 FreeBSD の場合のインストール方法を述べます。 0) ダウンロード 下記サイトから持って来てください。 yomi Home page http://takeno.iee.niit.ac.jp/~shige/unix/yomi/yomi.html 1) 展開 & コンパイル % gunzip -c yomi-0.12.1.tar.gz | tar xf - % cd yomi-0.12.1 % make 2) インストール % su で root になって # make install で終りです。 なお、標準では、AU ファイル用、WAV ファイル用、AIFF ファイル用の もの全てをインストールしますが、AU ファイル用のもののみインストー ルする場合は % make au # make install-au WAV ファイルのもののみインストールする場合は % make wav # make install-wav AIFF ファイルのもののみインストールする場合は % make aiff # make install-aiff とするといいでしょう。 2.2. 動作環境 ------------- 必要なものは以下の通りです。 1) gcc または OS 付属の cc 2) 日本語化された perl (version 5; まだ perl 5.6.X や 5.8.X には 対応していません) 3) kakasi version 2.2.5 以降 (わかち書きパッチは不要) 4) 音声を再生できる環境 (以下のうちいずれか一つあればよい) ・μ-Law 8kHz の音声ファイル (.au) を直接再生できる音声デバイス (/dev/audio) ・μ-Law 8kHz の音声ファイル (.au) を標準入力から読み込んで再生 できるソフト ・linear PCM の WAV 形式の音声ファイルを標準入力から読み込んで 再生できるソフト ・linear PCM の AIFF 形式の音声ファイルを標準入力から読み込んで 再生できるソフト 標準入力から読み込むのは無理な再生ソフトでもごまかすことはできま す (後述)。 また、version 0.10 で追加された音声切り出しツールで、グラフ表示を 見ながら作業する場合 (詳しくは readme-contrib 参照) は、さらに gnuplot (ver 3.7 以降)、sox (version 12.17 以降を推奨) が必要にな ります。 こちらでは、以下のマシンと OS の環境での動作を確認しています。 [a] NEC PC9821 + FreeBSD(98)2.2.8R (3.5.1R,4.4R) [b] Sun SS5 (および Ultra 1) + Solaris 2.6 [c] HP9000/715 + HP-UX 9.05 [d] NEC EWS4800/320EX + EWS-UX/V 4.2 条件の 1) は、 [a]: gcc (2.7.2.1, 2.8.1) [b]: Sun WorkShop SPARC Compiler 4.0 および gcc (2.8.1) [c]: HP C Compiler (A0.9.61) および gcc (2.8.1) [d]: /usr/abiccs/bin/cc および gcc (2.7.2.3) で確認済です。条件 2) は、こちらでは [a],[b],[c] では次のバージョ ンのもので動作しました (下は [a] の場合の表示)。 % perl -v This is perl, version 5.005_02 built for i386-freebsd Copyright 1987-1998, Larry Wall Japanization patch 4 by Yasushi Saito, 1996 Modified by Hirofumi Watanabe, 1996-1998 jperl5.005_02-981225 EUC version .... なお、[d] のみ jperl5.005_03-990822 で確認しました。 条件の 4) は、多くの UNIX で満たしていると思いますが、詳しいこと はわかりません。μ-Law に対応しているデバイスがない場合は、どこか から適当に AU ファイル、あるいは WAV ファイルを再生するソフトを持 って来てください。最近の Linux は、μ-Law に対応するデバイスを持 たないことも多いようです。 また、直接当該マシンで音声を鳴らさない (スクリプトだけ作成する) という目的の場合には、4) は特には必要ありません。 こちらで試したのは、 [a]: /dev/audio, NAS (Network Audio System) の auplay [b]: /dev/audio, /bin/audioplay, NAS の auplay [c]: /dev/audioIU, /usr/audio/bin/splayer [d]: /dev/audio/au80u8m です。yomi で音声が鳴らせるかどうかのテストは、適当な音声ファイル file.au を使って (例えば、yomi に含まれているものでいい)、 % cat file.au > /dev/audio % cat file.au | auplay % cat file.wav | wavplay % cat file.aiff | aiffplay のようにすればいいでしょう。再生プログラム名は適当に対応するもの に変えてください (上の wavplay, aiffplay は実在する具体的なプログ ラム名を意味するものではありません)。 以下に各 OS に対する注意を少しあげます。ただし、あくまでこちらの 環境で調べたものなので、バージョン、機種によって異なる点があると 思われます。 [a] FreeBSD FreeBSD では WAV の再生は ports/audio に含まれる waveplay が使え るようです。例えば % cat file.wav | waveplay -s - の様に使えます。 なお、/dev/audio に直接流す場合は音声ファイルのヘッダがあるとそれ が雑音の原因になりますので、それをつけずに再生するようにすると良 いでしょう (「2.3. Makefile の修正」参照)。 また、マシンによっては音声の再生時に最後の部分が切れるという問題 もあるようなので、必要ならばこれも設定を行ってください (「2.3. Makefile の修正」参照)。 [b] Solaris Solaris では /dev/audio に直接流せると思いますが、/dev/audio に流 すときは cat を通す必要があるようです (「2.3. Makefile の修正」参 照) し、その場合音声ファイルのヘッダは削除するようにした方が良い でしょう (「2.3. Makefile の修正」参照)。または /bin/audioplay を 使って % cat file.au | /bin/audioplay -p speaker -v 50 - のようにしてもいいでしょう。 [c] HP-UX HP-UX ではデバイス名は /dev/audioIU : μ-Law 8kHz スピーカ出力 /dev/audioEU : μ-Law 8kHz イヤフォンジャック出力 /dev/audioBU : μ-Law 8kHz 両方への出力 のようになっています。/dev/audioIA などは A-Law エンコーディング ですので yomi には使えません。デバイスに流す場合は音声ヘッダを削 除するよう設定してください (「2.3. Makefile の修正」参照)。 Aserver を使っている場合にはサンプルプログラムとして付属する /usr/audio/bin/splayer を使うこともできるようですが (Makefile.hp-ux 参照)、バージョンが古いためか (HP-UX 9.05) こちら ではあまり安定しては再生できませんでした。 [d] NEC EWS-UX (EWS4800) EWS4800 では /dev/audio/au80u8m 以外にもサンプリングレートの良さ そうな音声デバイスが用意されていて、441KHz の AIFF ファイルならば /dev/audio/au441p16m から流せるようですがよくはわかりません。 音声再生ツールとして付属する mplay というコマンドは、EWS4800 形式 という独自ヘッダを持つ音声ファイルを要求し、うまく再生できません でした。他にうまく再生する方法をご存知でしたら教えてください。 なお、yomi の使用前に、例えば audiotool で何か音声ファイルを再生 し、ボリュームを調整しておいてください。また音声ヘッダは、デバイ スに流す場合は、あまり変わらないようですが一応取り除いておいた方 が良いでしょう (「2.3. Makefile の修正」参照)。 使用する再生ソフトが標準入力からの読み込みをサポートしていない場 合は、次のようなラッパースクリプトで代用するか、「2.3. Makefile の修正」の AUPLAY にこれと同等のものを書けばいいでしょう (「2.3. Makefile の修正」参照)。 ----- ここから ----- #!/bin/csh -f /bin/cat > /tmp/yomi$$.au /usr/local/bin/auplay /tmp/yomi$$.au /bin/rm /tmp/yomi$$.au ----- ここまで ----- 2.3. Makefile の修正 -------------------- yomi-0.10.1 より、各 OS 用の Makefile を用意しました。現在は FreeBSD, Solaris, HP-UX, NEC EWS-UX 用のものと、他の一般的な UNIX 用 (Makefile.generic) のものを用意してあります。それぞれ対応する Makefile を copy して、必要な箇所を修正して使用してください。例え ば HP-UX では % cp Makefile.hp-ux Makefile として、Makefile を修正してください。他のファイルの修正は取り敢え ずは不要です。なお、デフォルトの Makefile は FreeBSD 用です。 Makefile の修正点は以下の通りです。 ・PREFIX = インストール先のトップディレクトリ ・BINDIR = 実行ファイルのインストール先 ・LIBDIR, DATADIR, DOCDIR = 音声ファイルなどの各種ファイルのイン ストール先 ・KAKASI = kakasi のパス ・JPERL = perl のパス ・AUPLAY = AU 音声ファイルの再生ソフトのコマンド部分 ・WAVPLAY = WAV 音声ファイルの再生ソフトのコマンド部分 ・AIFFPLAY = AIFF 音声ファイルの再生ソフトのコマンド部分 これらの説明はこの節の最後に書きます。version 0.10 から大きく 変わっていますので注意してください。 ・INSTALL = install プログラムを指定します。Solaris では例えば /usr/ucb/install を指定できます (/usr/sbin/install は不可)。 また、HP-UX ではデフォルトで install を持っていませんので、同 等のことを行うシェルスクリプト cpandmod.csh を使うようにして あります。 ・INSTUSER = インストールユーザ ・INSTGROUP = インストールグループ root でインストールするなら、この 2 つはいずれも bin でいいと 思いますが (OS によって違うかも)、自分のホームディレクトリの 下に一般ユーザ権限などでインストールするときは自分のユーザ名 とグループ名に変えてください。 ・INSTDAT = データのインストール時のコマンドライン ・INSTBIN = 実行バイナリのインストール時のコマンドライン ・CC,CFLAGS,LINK = コンパイラやコンパイルオプション等の指定 HP cc を使う場合は CFLAGS に -Aa を入れて ANSI C モードにして ください。なお、NEC EWS では /usr/abiccs/bin/cc を使う場合の オプションも書いてありますが、実際には gcc でしか試していない のでうまく動作するかどうかわかりません。 ・AUCONNOP,WAVCONNOP,AIFFCONNOP = 各再生コマンドに音声データを渡 す際に音声ファイルヘッダ部分を取り除く場合には "-r" を指定し ます。デバイスに直接流す場合には "-r" を指定すると良いでしょ う。 なお、これらは auconn, wavconn, aiffconn に対するオプションな のでそれらの yomi 内でのデフォルトの動作を設定するのにも使え ます (「4.1.3. auconn, wavconn, aiffconn のコマンドラインオプ ション」参照)。 ・LASTNULLNUM = 音声データの最後に空のダミーデータをつける個数の 指定を行います。FreeBSD などで音声の最後が切れる問題の対処用 です (version 0.10.5 以降)。1 でまだ切れる場合は 3 や 5 など としてみてください。 また、version 0.12 より特に yomi の実行には必要ない付属ツールはデ フォルトではインストールされなくなりましたが、それらをインストー ルする場合は以下の設定もチェックしてください。 ・CONTRDIR = 付属ツールのインストール先 ・SOX,GNUPLOT,SLCUTOPTIONS = version 0.10 から付属する auslcut 等 の頭出し編集ツールのためのオプションです。波形を見ながら編集 を行うためには sox, gnuplot (3.7 以降) が必要になりますが、 SOX, GNUPLOT にそれらのパスを書いてください。それらがインスト ールされておらず、波形の表示が不要な場合は SUCUTOPTIONS の -DUSEPLOTSOUND を削除しても結構です (しなくても大丈夫です)。 AUPLAY, WAVPLAY, AIFFPLAY の書き方ですが、これらは version 0.10 からは大きく変わりました。以前はこれらには単にコマンド名のみを与 えていて、他にデバイス名を与える変数も定義していて (AUDEV)、直接 デバイスを使うか再生プログラムを使うかは別なオプションで分けてい ましたが、ver. 0.10 からはこれに統一し簡略化しました。 例えば再生プログラムを使う場合は AUPLAY = "| /usr/local/bin/auplay" WAVPLAY = "| /usr/local/bin/wavplay" AIFFPLAY = "| /usr/local/bin/aiffplay" のように、'|' から始めてコマンド名を書いてください。そして全体を 必ず " (ダブルクォート) で囲んでください。' (シングルクォート) は 不可です。オプションが必要ならば AUPLAY = "| /bin/audioplay -p speaker -v 50 -" のようすることも可能です。また、デバイスに直接流すならば AUPLAY = "> /dev/audio" のように '>' から書き始めてください。Solaris でデバイスに流す場合 は AUPLAY = "| cat > /dev/audio" と cat をはさむ必要があるかも知れません。 なお、再生ソフトが標準入力からのデータをサポートしていない場合は WAVPLAY = '> /tmp/yomi$$.wav ; wavplay /tmp/yomi$$.wav ; rm /tmp/yomi$$.wav' のように書くことも可能です。ただし '$$' のような文字を書く場合は " (ダブルクォート) ではなくて ' (シングルクォート) で囲む方がいい かも知れません。 sox を使って別のフォーマットに変換してからプログラムに渡すことも できます。例えば AIFF を sox で WAV に変換して "waveplay -s -" に 渡す場合は AIFFPLAY = "| sox -t aiff - -u -t wav - 2> /dev/null | waveplay -s -" のようになります。 2.4. コンパイルとインストール ----------------------------- AU ファイル用、WAV ファイル用、AIFF ファイル用のものすべてをイン ストールする場合は % make でコンパイル、そして (/usr/local 等へインストールする場合は root になってから) % make install とすれば OK です。 AU ファイル用のもののみインストールする場合は % make au % make install-au WAV ファイル用のもののみインストールする場合は % make wav % make install-wav AIFF ファイル用のもののみインストールする場合は % make aiff % make install-aiff とするといいでしょう。 インストールされる読み上げソフトの標準のコマンド名は yomi ですが make install で AU ファイル用、WAV ファイル用、AIFF ファイル用の ものすべてをインストールした場合は yomi-au : AU ファイル用 yomi-wav : WAV ファイル用 yomi-aiff: AIFF ファイル用 yomi : AU ファイル用 (yomi-au と同じ (シンボリックリンク)) となります。オプション、その他の機能はいずれも同一ですので、 yomi-au, yomi-wav, yomi-aiff に関しては、以下の記述の yomi をそれ ぞれに読み変えてください。 make install-au, make install-wav, make install-aiff のいずれかを した場合は、それぞれ yomi-au, yomi-wav, yomi-aiff がインストール され、yomi がそれにシンボリックリンクされます。 また、readme-contrib に記述されている付属ツールをインストールする 場合は %make install-contrib-au (AU 用のもののみ) %make install-contrib-wav (WAV 用のもののみ) %make install-contrib-aiff (AIFF 用のもののみ) %make install-contrib (上記全部) のいずれかで、コンパイルのみ行なう場合は %make contrib-au (AU 用のもののみ) %make contrib-wav (WAV 用のもののみ) %make contrib-aiff (AIFF 用のもののみ) %make contrib (上記全部) とします。 2.5. 設定 --------- インストール先 ($(BINDIR)) の yomi-au, yomi-wav, yomi-aiff (いず れも perl スクリプト) に書かれているデフォルトの設定で必要な変更 があれば行ってください。 音声ファイルを個人的に別なディレクトリに作成して追加する場合は、 $(LIBDIR)/auconnrc を ~/.auconnrc へ (AU ファイルを使う場合) $(LIBDIR)/wavconnrc を ~/.wavconnrc へ (WAV ファイルを使う場合) $(LIBDIR)/aiffconnrc を ~/.aiffconnrc へ (AIFF ファイルを使う場合) のようにコピーして、その設定ファイルを編集すればいいでしょう。詳 しくは、「4.1.2. auconn,wavconn,aiffconn の設定ファイル」を参照し てください。 後は $(BINDIR) にパスが通っているかどうか確認すれば動作すると思い ます。 また、version 0.12 より yomi のオプションのデフォルトの定義をユー ザ毎に設定できるようになりました。設定ファイル名は ~/.yomirc で、 ここに yomi の先頭に書かれている変数定義を行なってデフォルトの値 を変更できます。ただし、そのファイルは perl の require 命令で読み 込まれますので、必ず最後に 1; という行を書いておいてください。設定できる変数については「3.2. オ プションの詳細」を参照してください。 2.6. 「れいしう」音声データ --------------------------- 付属する音声データはかなり品質の悪いものですが、「こえうぇぶ」 http://reisiu.iamas.ac.jp/ で公開されているフリーの音声データを yomi で使えるように編集加工 したデータを http://takeno.iee.niit.ac.jp/~shige/unix/yomi/yomi.html で公開しています。それのインストールの説明をします。現在公開して いる音声ファイルは以下の 6 種類です。 reisiu-au-180.tar.gz (AU; 8bit μ-Law 8kHz; 0.18 秒) reisiu-au-250.tar.gz (AU; 8bit μ-Law 8kHz; 0.25 秒) reisiu-wav-180.tar.gz (WAV; 16bit linear 44.1kHz; 0.18 秒) reisiu-wav-250.tar.gz (WAV; 16bit linear 44.1kHz; 0.25 秒) reisiu-aiff-180.tar.gz (AIFF; 16bit linear 44.1kHz; 0.18 秒) reisiu-aiff-250.tar.gz (AIFF; 16bit linear 44.1kHz; 0.25 秒) 時間は各単音素の長さを意味します。例えば WAV 0.25 秒のものを使う 場合は [a] 適当なディレクトリにインストール # cd /usr/local/share/yomi/data # gunzip -c ~/reisiu-wav-250.tar.gz | tar xvf - [b] ~/.wavconnrc にそのディレクトリを設定 % cat ~/.wavconnrc path /usr/local/share/yomi/data/reisiu-wav-250 ext :.wav:.WAV nullfile null とすれば、WAV 用の yomi (yomi-wav) はれいしうさんの声で喋りだすで しょう。yomi-wav では全ユーザで常に「こえうぇぶ」のデータを使う場 合は [b] の代わりに [c] yomi-wav の $AUCONNOP を以下のように書き直す $AUCONNOP="-p/usr/local/share/yomi/data/reisiu-wav-250" としてもいいでしょう。 なお「こえうぇぶ」には色んな音程のファイルがあるのですが、今回は 一つの音程のもののみを編集しましたので、付属音声よりも機械的に聞 こえてしまいます (^^; が、音質はこちらの方がずっと綺麗です。 3. 使用法 --------- 以下はデフォルトの設定の元での動作に関する話です。~/.yomirc など で設定を変更してある場合は以下の説明とは動作が異なる場合がありま す。詳しくは「3.2. オプションの詳細」を参照してください。 3.1. 基本的な利用法 ------------------ [a] 使うには、単に % yomi [テキストファイル] として実行すれば、その [テキストファイル] を読み上げてくれます。 [b] 複数のファイルを読ませる場合は % yomi [テキストファイル 1] [テキストファイル 2] ... のように複数指定するだけです。 [c] 画面には、通常現在読んでいる行が表示されますが、 % yomi -q [テキストファイル] とすると画面への表示は消えます。また、 % yomi -r [テキストファイル] とすると、現在読んでいる行の出力を、元々の行ではなく、kakasi に変 換させた後の結果の行の方を出力するようになります (注: yomi version 0.8 まではこちらがデフォルトの動作でした)。 [d] yomi は、通常 1 行ずつ読みますが、メールなどのように、ある行 数で折り返された文章の場合、行単位ではなく、文単位 (句点区切り) で読ませたい、ということもあると思います。その場合は % yomi -t [テキストファイル] とします。 [e] yomi は、改行毎に多少の間が入りますが、通常テキストファイルの 終りまで連続して読んで行きます。しかし、1 行ずつ休止しながら読ま せたい場合もあります。 % yomi -s [テキストファイル」 とすると、1 行終了毎にキー入力待ちになり、return で次の行に進みま す。なお、このとき 'q' を押してから return するとそこで処理を中断 します。また、'r' の後 return を押すと、再び現在の行の処理を行い ます。 [f] yomi は、実際には直接音声をつなげたり、音声デバイスに音のデー タを出力しているわけではなく、そのようなことを実行するコマンドラ インを生成して、それを system() を使って外部コマンドに実行させて いるだけです。よって、そのコマンドライン行をファイルに吐き出させ れば、シェルスクリプトとして利用できます。それには % yomi -d [テキストファイル] > [ファイル] とします。[ファイル] に実行すべきコマンドラインが入っていますので % csh -f [ファイル] とすれば実際に読み上げを行います。 [g] mail など、漢字コードが EUC でないファイルの場合は nkf などを 使って EUC に変換してから yomi に食わせてください。例えば % nkf -e [テキストファイル] | yomi - とすればいいでしょう。yomi はファイル名として '-' が指定されると 標準入力から読み込みます。 [h] 読みの速度を変更するには % yomi -Ls[長さ(ミリ秒)]+ [テキストファイル] のようにします。各音声を [長さ] で指定した音声の長さにします。た だし、短めに指定した場合、アルファベットや数字などの複音からなる 音素もこれにより短くなる可能性がありますから、やや聞きにくくなり ますが、その場合 % yomi -Ls[長さ]+ -n -a [テキストファイル] として、アルファベットや数字も強制的にひらがな単音素を用いるよう にする方がいいかもしれません。 [i] 読みの速度の変更としては、速回しや遅回しの方法もあります。こ の場合は音程も変化しますが、やや雑音が入る可能性もあります。 % yomi -S[倍速] [テキストファイル] のように速度を指定します。-S1.2 なら 1.2 倍速ですから、音が短くな って少し音程が上がります。-S0.8 なら音が長くなって音程が下がりま す。音程を変えたいだけなら -Ls[長さ]+ と組み合わせて % yomi -S1.2 -Ls250+ [テキストファイル] のようにするといいでしょう。 3.2. オプションの詳細 --------------------- yomi のオプションについて説明します。 何も引数をつけずに yomi を実行すると、yomi のオプション一覧が出力 されます。 % yomi yomi version 0.12.1 Usage: yomi [options] [file1] ([file2] ...) -nd: 音声出力を実行 (default) -d: 音声出力はせず、実行コマンドを script の形で出力 -nt: 文の区切りは改行毎 (default) -t: 文の区切りは句点毎 .... ファイルは複数指定できます。ファイル名として '-' を指定した場合は それを標準入力と解釈します。 オプションは 4 種類に分類されます。 [a] ある機能のオンとオフ この種類のオプションは、"-d" と "-nd" のように、オプションに 'n' をつけることで反対の機能になります。以下にそれらをあげます。カッ コ内に default と書かれている方が、標準、すなわち何も指定しない場 合の機能です。 -d: 音声出力はせず、実行コマンドをスクリプトの形で出力 -nd: 音声出力を実行 (default) -t: 文の区切りは句点毎 -nt: 文の区切りは改行毎 (default) -s: 改行毎にポーズ (キー入力待ち) を入れる -ns: ポーズ (キー入力待ち) なし (default) -q: 画面表示はなし -nq: 画面に現在の行を表示する (default) -r: 画面表示は kakasi で変換した行を使用 (ver. 0.8 以前互換) -nr: 画面表示はファイルの元々の現在行を使用 (default) -i: (数字) もカッコ、数字、カッコとして読む -ni: (数字) の形のものは数字ではなく数の列して読む (default) -n: 数字もひらがなに直してベタ読みする -nn: 数字用の音素を使用 (default) -a: アルファベットもひらがなに直してベタ読みする -na: アルファベット用の音素を使用 (default) -i (-ni) オプションには説明が必要です。 yomi は、例えば "3235" という単語は "さんぜんにひゃくさんじゅう ご" と読みますが、"(3235)" という単語は "さんにいさんご" と読むよ うな仕様になっています。これは、電話番号、郵便番号、学籍番号など の読みのための機能です。yomi -i とすると、"(3235)" を "かっこさん ぜんにひゃくさんじゅうごかっことじる" と読むようになります。 なお、数字と記号の入った単語は最初から記号列とみるので、例えば "0123-45-6789" は、"ぜろいちにいさんはいふんよん..." のように読み ます。 また、version 0.6.2 から、アルファベット、数字を、専用音素を使用 する/しない、を選択できるオプション -n (-nn), -a (-na) を用意しま した。しない、とすると、すべてひらがなに直してから読みますので、 さらに聞きにくくなりますが (^^; それらの専用音素がない場合には有 効です。 yomi は、-s なし (あるいは -ns) で実行すると、指定されたファイル の最後まで連続して実行しますので、その場合の中断は Ctrl-c などで 行って下さい。ただし、環境にもよりますが、デバイスへの出力との関 係で中断があまりうまくいかない場合があります。その場合、何回か Ctrl-c を繰り返すと止まるようですが、途中で中断する可能性がある場 合はできるだけ -s オプションを使うのがいいと思います。-s を使うと 「3.1. 基本的な利用法」[e] で説明したように q return で行毎に中断 できます。 [b] 出力先の指定 yomi の出力先の指定は version 0.10 から大きく変更になりました。従 来の -ap [strings] : 音声ファイル再生プログラムを指定 -ad [strings] : 音声ファイルを流すデバイスを指定 -u [mode]: 出力形式を選択 は一本化され、 -ap [strings] : 音声ファイル再生プログラム部分を指定 だけになりました。そして -ap は、以前はプログラム名 (とそのオプシ ョン) だけを書いていましたが、ver. 0.10 からは、リダイレクション 記号 ('>')、パイプ ('|') から書くようにしました。これにより自由度 が増し、扱いも楽になったのではないかと思います。 例えば以下のようにします。 -ap '| /bin/audioplay -p speaker -v 50 -' -ap '> /dev/audio' -ap '> file.au' 囲む記号は ' (シングルクォート) でも " (ダブルクォート) でも結構 です。 標準入力をサポートしていない再生ソフトに対しては -ap '> yomi$$.au ; auplay yomi$$.au ; rm yomi$$.au' などとすることも可能です。ただし '$$' のような文字を書く場合は " (ダブルクォート) ではなくて ' (シングルクォート) で囲む方がいいで しょう。 Solaris でデバイスに流す場合は -ap '| cat > /dev/audio' のように、一度 cat をはさむ必要があるかも知れません。 [c] 連係プログラム等への指示など 出力デバイス名や、kakasi などの外部プログラムへの指示のためのオプ ションです。 -ao [strings] : auconn に渡すオプションを指定 -ko [strings] : kakasi に渡すオプションを指定 -nsh / -sh : shless 用にコメントを付加する/しない : (-d 指定時のみ有効) -L(s|b)[num](+|-): 音素の長さを揃える (auconn に渡す) -S [num] : 倍速 (速回し) 指定 (auconn に渡す) -en [num] : 文字列の最後に付加する空文字数の指定 auconn は yomi (yomi-au) 用のプログラムですので、上の部分、および 以下の説明は yomi-wav, yomi-aiff ではそれぞれ wavconn, aiffconn と読み変えてください。 これらのデフォルトの値は、yomi の最初の方に書かれています。必要な らばインストール時に書き換えることも可能ですが、version 0.12 より ユーザ毎の設定ファイル ~/.yomirc でもデフォルトの設定を変更できる ようにもなっています。しかし環境、使用法によっては途中で切替える 必要があるかもしれません。その場合はこのオプションを利用します。 これらは、例えば -ko "-JH -kH -KH -Ea -s" のようにクォートやダブルクォートを使って、スペースの入った文字列 を指定することも可能です。 なお、auconn に渡すオプションについては「4.1.3. auconn, wavconn, aiffconn のコマンドラインオプション」の説明を参照してください。 -sh は、-d オプション指定時に、通常の実行時に表示される行をコメン ト行 ("#shless:" を先頭につけて) として出力するオプションです。こ れは shless 用のオプションです (version 0.7 より)。-nsh はその機 能を OFF にします。詳しいことは、「4.2. スクリプトの less (shless)」の項目を参照してください。 auconn は yomi version 0.7 よりつなげる音声ファイルの長さを指定で きるようになりました。-L(s|b)[n](+|-) がそのオプションでそれらは そのまま auconn に渡されます。これについても、詳しくは「4.1 音声 データ連結ツール (auconn, wavconn, aiffconn)」で述べますが -Ls2000 : 2000 ミリ秒 (s=ミリ秒単位) -Lb2000+ : 2000 ブロック (b=ブロック単位), 2000 ブロックに足りな いファイルは無音を音の最後に付加 (+=無音後尾付加) -Lb2000- : 2000 ブロック (b=ブロック単位), 2000 ブロックに足りな いファイルは無音を音の先頭に付加 (-=無音先頭付加) のようになります。ブロックは aufinfo で表示される totalblocks と 同じで、データブロックの数を意味します。ただし、-L(s|b)[num]- は 特別な用途のためのオプションで普通は使用しません (多分役に立ちま せん)。 -S [num] は auconn に version 0.11 で追加されたオプションで、音声 出力の速回し (倍速再生) を行います。例えば -S1.2 : 音の長さが 1/1.2 倍 (速回し) でその分音程が高くなる -S0.8 : 音の長さが 1/0.8 倍 (遅回し) でその分音程が低くなる のようになります。音程のみ変えたい場合は -L オプションと組み合わ せると良いでしょう。詳しくは「4.1 音声データ連結ツール (auconn, wavconn, aiffconn)」を参照してください。 -en [num] は version 0.10.5 で追加されたオプションで、音声の最後 が切れてしまう場合 (FreeBSD などで起こるようです) に正の整数を指 定してその分の無音のダミーデータを後ろに付加して出力させます。 [d] ヘルプ、バージョン表示 -v: バージョンの表示 -h: オプションの一覧表示 yomi version 0.12 より、これらのオプションのデフォルトの設定を、 ユーザ毎の設定ファイル ~/.yomirc で変更できるようになりました。良 く使うオプションを書いておけば便利です。設定する変数と上記オプシ ョンとの対応、デフォルトの設定などを以下に記します。 オプション 変数名 デフォルトの設定 -d/-nd $DEBUG1 $DEBUG=0; -t/-nt $KUTENKUGIRI $KUTENKUGIRI=0; -s/-ns $PAUSE $PAUSE=0; -q/-nq $QUIET $QUIET=0; -r/-nr $PUTAFTERFILTER $PUTAFTERFILTER=0; -i/-ni $NUMFORCE $NUMFORCE=0; -n/-nn $NUMBETAYOMI $NUMBETAYOMI=0; -a/-na $ALPHABETAYOMI $ALPHABETAYOMI=0; -ap $AUPLAY (install 時に Makefile で指定) -ao $AUCONNOP (install 時に Makefile で指定) -ko $KAKASIOP $KAKASIOP='-JH -kH -KH -Ea -s -f -u -oeuc'; -sh/-nsh $SHLESS $SHLESS=0; -L $AULENGTH $AULENGTH=""; (空文字列) -S $AUSPEED $AUSPEED=""; (空文字列) -en $LASTNULLNUM (install 時に Makefile で指定) -v なし -h なし n がついているかついていないかで機能を OFF/ON にするオプションの 場合は、0 と設定すると OFF, 1 と設定すると ON になります。例えば -s をデフォルトとしたい場合は $PAUSE=1; とします。 ~/.yomirc は、perl のコードとして読み込まれますので、以下のことに 注意して下さい。 ・変数の設定の行末の ';' は必須 ・空行や '#' から行末までは無視される ・~/.yomirc の最後に必ず 1; という行を書くこと これらの設定の優先順位は コマンドラインオプション > ~/.yomirc の設定 > デフォルト となっています。なお、~/.yomirc の設定に従って、単に yomi として 起動した場合の表示の "(default)" もつけかわるようになっています。 3.3. オプションの複雑な使用例 ----------------------------- 以下に 2 つ、オプションを複雑に組み合わせた使用例 (裏技 ?) を紹介 します。ほかにも面白い使用例があれば、是非教えてください。 [a] yomi で、文章を音声化したファイルを作る 以前 (version 0.9.X 以前) は、-u0, -ad を組み合わせた例を紹介して いましたが、version 0.10 よりそれらのオプションが -ap に統合され たのでさしたる裏技でもなくなりました。例えば % echo "新潟県" | yomi -ap "> niigata.au" -q - % echo "新潟県" | yomi-wav -ap "> niigata.wav" -q - % echo "新潟県" | yomi-aiff -ap "> niigata.aiff" -q - とすると、「にいがたけん」という音声ファイル niigata.au, niigata.wav, niigata.aiff ができます。ただし、これは 2 行以上の文 章には使えません (最後の行だけがファイル化されます)。 [b] 読ませたい文書に必要な音声ファイルがあるかどうか確認 auconn には、必要な音声ファイルのパスを出力するオプション (-l) が チェック用についています (「4.1.3. auconn, wavconn, aiffconn のコ マンドラインオプション」参照)。yomi は、-ao で auconn にオプショ ンを渡すことができますので、それを使えばそのチェックを yomi 上で できます。ただし、この場合は、出力先を再生ソフトから切り替える必 要があるので -ap で "| cat" や "> file" などを指定します。 例えば % echo "新潟県" | yomi -ao-l -ap "| cat" - % echo "新潟県" | yomi-wav -ao-l -ap "| cat" - % echo "新潟県" | yomi-aiff -ao-l -ap "| cat" - のようにすると、「新潟県」を音読するのに必要な音声ファイルの一覧 がパス付で表示されます。長い文章の場合は、更にその出力に sort と uniq などを噛ませるといいでしょう。これは yomi がうまく動作しない 場合のデバッグ作業などで使えると思います。 もちろん、これは yomi -d の出力を手で編集して、その auconn などに -l オプションをつけることでも可能で、その方が速いかも知れません。 なお、必要なファイルが存在しない場合、version 0.6.4 より、その部 分を無音で置き換えることができるようになりました (以前のバージョ ン、あるいは default では、その行の実行はしない)。詳しくは「4.1. 音声データ連結ツール (auconn, wavconn, aiffconn)」の該当部分を参 照してください。 4. 各コマンドの詳細 ------------------- yomi に付属する連係コマンド (音声データ連結ツール、スクリプトの less、音声データ情報表示ツール) について説明します。 なお、yomi version 0.12 以降では、ここで紹介するもの以外の yomi に付属する他のツールは標準ではインストールされなくなりました。そ れにともない、ここに書いていたそれらのツールの説明も readme-contrib に分離しましたので、それらのツールについてはそちら を参照してください。 4.1. 音声データ連結ツール (auconn, wavconn, aiffconn) ----------------------------------------------------- 4.1.1. auconn, wavconn, aiffconn の概要 --------------------------------------- yomi が使用する音声データ連結ツール (auconn, wavconn, aiffconn) について説明します。 yomi では、1 音ずつデバイスに音を流してはおらず、行単位で音のデー タをつなげてからデバイスに流しています。そうでないと、マシンの能 力や実行時の負荷などによって、出力が間延びしたりつまったりするか らです。その音声データの連結プログラムが auconn, wavconn, aiffconn です (aiffconn は version 0.8 より)。 auconn は AU ファイルを、wavconn は WAV ファイルを、aiffconn は AIFF ファイルを連結します。wavconn, aiffconn に関する仕様は auconn とほぼ同様ですので、以下では主に auconn に関してのみ書きま す。 なお、version 0.12.1 からはこの 3 つのプログラムは統合されていて 実体は auconn 一つになっています。wavconn, aiffconn は auconn へ のリンクです (コマンド名によって動作が変わります)。 auconn は % auconn a b c > d.au とすると、デフォルト音声データ検索パスから a.au, b.au, c.au とい うファイルを探し、それをつなげたデータファイルを作り、標準出力に 流します。よって、それが結果として d.au となって出力されます。 なお、version 0.10.2 からはデフォルトではカレントディレクトリは優 先的には検索されませんので、カレントディレクトリのファイルを指定 する場合は % auconn ./a ./b ./c > d.au のようにしてください。 yomi では、実際は % auconn a i u e o > /dev/audio % auconn a i u e o | /bin/audioplay のようなコマンドラインを生成しています。 また、auconn は、データ形式 (AU, WAV, AIFF) やデータファイルフォ ーマット (チャンネル数、サンプルビット数、サンプリング周波数など) の異なるデータ同士を連結することはできません。 使用するデータを自分で用意する場合は、これらのフォーマットを揃え たものをご使用ください。データフォーマットが揃っているかどうかの 確認には、付属のツール aufinfo が使えます。詳しくは「4.3. 音声デ ータ情報表示ツール (aufinfo)」の説明を参照してください。 現在 yomi とともに配布しているデータは、元々 AU データファイルの みで、WAV, AIFF のデータはそれを sox と yomi 付属ツール aiffdiet (readme-contrib 参照) を使って 8bit 8kHz linear PCM の WAV, AIFF にしたもので、WAV、AIFF としては音質はよくはありません。また、AU データも音程や音量などが揃っておらず声質もいいわけではないので、 音質はよくありません。音質を改善したい場合、「こえうぇぶ」のデー タを使用する、という手があります。詳しくは、「2.6. 「れいしう」音 声データ」を参照してください。 auconn は、設定ファイル、またはコマンドラインオプションを使って、 音声データの検索パスのリストや、検索拡張子リスト、非存在音声代用 ファイルなどを指定できます。それを次に説明します。 4.1.2. auconn, wavconn, aiffconn の設定ファイル ----------------------------------------------- [a] 設定ファイル名 auconn, wavconn, aiffconn の標準の設定ファイル名はそれぞれ ~/.auconnrc, ~/.wavconnrc, ~/.aiffconnrc で、これは auconn.h, wavconn.h, aiffconn.h の中で下のように定義されていますので、そこ を書き換えれば変更できます。 #define DEFAULTConffname "~/.auconnrc" (auconn.h) #define DEFAULTConffname "~/.wavconnrc" (wavconn.h) #define DEFAULTConffname "~/.aiffconnrc" (aiffconn.h) これらは標準ではインストールされず、サンプルの設定ファイルが $(LIBDIR) にインストールされるのみです (「2.5. 設定」参照)。な お、設定ファイルは auconn のコマンドラインから指定することもでき ます。 % auconn -f[設定ファイル] ... % wavconn -f[設定ファイル] ... % aiffconn -f[設定ファイル] ... [b] 書式 設定ファイルの書き方は、基本的に [タグ] [リスト] の形で書かれます。[タグ] と [リスト] の間はスペースかタブを一つ以 上書いてください。'#' で始まる行はコメントと見なされます。空行は 無視されます。 [タグ] には "path", "ext", "nullfile" のいずれかを指示し、 path [検索パスリスト] ext [拡張子リスト] nullfile [非存在音声代用ファイル] のように書きます。path, ext, nullfile はそれぞれ path: 音声データの存在するディレクトリのリストの指定 ext: 音声データのデフォルトの拡張子の指定 nullfile: 音声ファイルが存在しない場合の代用音声ファイル を意味しています。代用音声ファイルは例えば null のような無音ファ イルでもいいですし、なんらかの警告音ファイルでもいいでしょう。 リストの部分は、':' で区切って複数指定することができますし、複数 の path 行を書くこともできます。また、自分のホームディレクトリを '~' と書くことも可能です (環境変数 HOME を見てそれに展開されます)。 例えば ~/.auconnrc に path :.:~/data/yomi/tmp path /usr/local/share/yomi/data/au path /usr/local/share/yomi/data/misc ext :.au:.AU nullfile null のように書くと、検索パスリストとして "" . ~/data/yomi/tmp /usr/local/share/yomi/au ... のように指定されたことになり、これらのパスを、指定されたファイル 名の先頭につけて順番にファイルを検索します。最初の "" は、パスを 何も追加せず、指定されたファイル名のまま検索することを意味します。 これは例えば、パスを含んだ形式で音声ファイル名が指定された場合に 有用です。 また、ext の部分は上の設定の場合、"" ".au" ".AU" が指定されたこと を意味しますので、例えば % auconn a とすると auconn は a, a.au, a.AU という順番で検索パスからファイル を検索します。これを設定することで、拡張子を書く手間が省けます。 もちろん、指定ファイルにパスや拡張子をつけて % auconn ~/data/a.au ~/data/b.au とすることもできます。そして、このために検索パスリストと拡張子リ ストには、空文字列を含むようにしておくといいでしょう。 なお、yomi では、-d の出力の可読性を上げるため、.au もパスもつけ ずに % auconn a i u e o > /dev/audio のように auconn を実行します。よって、必ず適切なパスと、適切な拡 張子が指定されている必要があります。 ただし、例えば上のような検索パスリストと拡張子リストの設定の場合、 カレントディレクトリに、例えば "mo" などのファイルやディレクトリ があると、それがマッチしてしまい、それを音声ファイルと見なしエラ ーとなってしまいますので注意してください (カレントディレクトリは version 0.10.2 からはデフォルトの検索パスから外してあります)。 正しくファイルを検索しているかどうかは % auconn -l a i u e o のようにすれば確認できます。 なお、nullfile として "-" を指定すると、代用機能は使用しないこと を意味し、よって一つでも存在しない音声ファイルの指定があれば、そ の実行は行われなくなります。 検索パスリスト、拡張子リスト、代用ファイルは、 % auconn -p"~/data/yomi/tmp:." -e".au::.AU" -nnull といった具合にコマンドラインオプションから指定することもできます。 さらに、環境変数で指定することもできます。変数名はそれぞれ以下の 通りです。 環境変数 AUDATAPATH : AU ファイル検索パスリスト (auconn) 環境変数 AUDATAEXT : AU ファイル拡張子リスト (auconn) 環境変数 AUNULLFILE : 非存在音声代用 AU ファイル (auconn) 環境変数 WAVDATAPATH : WAV ファイル検索パスリスト (wavconn) 環境変数 WAVDATAEXT : WAV ファイル拡張子リスト (wavconn) 環境変数 WAVNULLFILE : 非存在音声代用 WAV ファイル (wavconn) 環境変数 AIFFDATAPATH : AIFF ファイル検索パスリスト (aiffconn) 環境変数 AIFFDATAEXT : AIFF ファイル拡張子リスト (aiffconn) 環境変数 AIFFNULLFILE : 非存在音声代用 AIFF ファイル (aiffconn) 優先順位は コマンドラインオプション > 環境変数 > 設定ファイル > デフォルト です。デフォルトは、検索パスリストは Makefile で設定するようにな っていて、拡張子リストは auconn.h, wavconn.h, aiffconn.h に書いて ありますが、 auconn: #define DEF_Extlist ".au:.AU:" wavconn: #define DEF_Extlist ".wav:.WAV:" aiffconn: #define DEF_Extlist ".aif:.aiff:.AIF:.AIFF:" となっています。 デフォルトのパスリストに、インストールしたデフォルトの音声データ のパスを埋め込み、各ユーザの ~/.auconnrc には、各自で録音したパス リストを書く、というのが標準の設定方法でしょう。 なお、version 0.10 より、付属させていた AU ファイルのディレクトリ 構成を data/50on, data/alph, data/num, data/null から、WAV, AIFF ファイルのディレクトリ構成に合わせて data/au にまとめました。version 0.10 より前の版の yomi で ~/.auconnrc 等 でディレクトリを指定していた場合はそれに合わせて修正をしてくださ い。 4.1.3. auconn, wavconn, aiffconn のコマンドラインオプション ----------------------------------------------------------- -p[検索パスリスト] : 音声データ検索パスリストの指定 -e[拡張子リスト] : 音声ファイル拡張子のリストの指定 -f[設定ファイル名] : 設定ファイルの指定 -n[代用ファイル] : 非存在音声代用ファイルの指定 -L(b|s)[長さ](+|-) : 音素ファイル長の指定 -S[倍速] : 倍速 (速回し) 指定 -r : 音声ヘッダ部分を出力しない -l : 音声ファイルのリストのみ表示 -q : quiet モード -h : ヘルプメッセージ 最初の 4 つは「4.1.2. auconn, wavconn, aiffconn の設定ファイル」 でも説明しました。 -L は、各音素ファイルの長さを揃える指定です (yomi version 0.7 以 降)。指定がなければ単にファイルをつなげるだけです。b はデータブロ ック単位での指定、s はミリ秒単位での指定を意味します。最後に + (や -) をつけた場合は、指定より短いファイルに無音を最後に (- の場 合は先頭に) 付加して強制的にその長さに揃えます。よって例えば -Ls200 : 一音最長 0.2 秒 -Lb4000+ : 一音 4000 ブロック、足りなければ無音を後ろに付加 -Ls500- : 一音 0.5 秒、足りなければ無音を先頭に付加 となります。ブロックは、aufinfo の表示の totalblocks と同じで、デ ータブロック単位の指定です。ただし、- を最後につける方は特殊な用 途用で、普通は使用しません (多分役に立ちません)。 なお、yomi では、アルファベットや数字の読みで複音を採用しています が、長さの指定を短くしすぎるとその複音が途中で切れる可能性があり ますので、そのような場合は yomi の -a や -n オプションを併用して ください。詳しくは「3.2. オプションの詳細」[a] をご覧ください。 -S は、音声再生の倍速指定です (yomi version 0.11 以降)。例えば -S1.2 : 音の長さが 1/1.2 倍 (速回し) でその分音程が高くなる -S0.8 : 音の長さが 1/0.8 倍 (遅回し) でその分音程が低くなる のようになりますので、音程の変更や再生速度の変更に使えます。内部 では音声データのサンプリング周波数を単に線形補間しているだけなの で (sox の rate オプションと同等) 雑音が多少入る可能性があります し、あまり小さい値を指定すると非常に大きなデータが作られる可能性 があります (下限は 0.005 まで)。なお、これにより上がる音程につい ては、readme-technical を参照してください。 -r は、音声データのヘッダ部分は出力せず、データ部分のみを連結して 出力します。音声デバイスに直接渡す場合はこのオプションを使うと便 利です (yomi version 0.10.4 以降)。 -l は、音声データの連結は行わずに、指定した音声ファイルの、実際に 見つかったパスを表示します。設定ファイルのデバッグに使えます。 -q は、auconn のエラー表示を抑制します。特に、代用ファイルを使用 する場合、-q を使用しないと代用ファイルが使われるときにいちいちエ ラー表示が行われることになります。 なお、version 0.12.1 から、-L と -S オプションは音声ファイル名指 定の途中にもつけられるようになりました。この場合、そのオプション はそれ以降の音声ファイルに適用されます。例えば % auconn -S0.7 -Ls500+ a i -Ls700+ u -S1.2 e o > /dev/audio とすると、 ・a.au, i.au は -S0.7 -Ls500+ で ・u.au は -S0.7 -Ls700+ で ・e.au, o.au は -S1.2 -Ls700+ で 出力されます。これにより、1 音 1 音の長さやスピード (音程) を自由 に変えてつなげることが可能になります。 なお、この機能は auconn にのみあるだけで、その wrapper script で ある yomi 本体は現在のところこの機能を使用しません。使用したいな らば、yomi -d の出力を手で修正する、ということになるでしょう。 4.2. スクリプトの less (shless) ------------------------------- これは、yomi で読ませるときは前に読んだところに戻れない、というこ とを解消するために作ったミニツールです。 % shless [script file] とすると、csh のスクリプトファイルを一行表示してそれを実行し、キ ー入力待ちの状態になります。[script file] として "-" を指定すると 標準入力から読みます。 オプションは version 0.10.2 から多少変わりました。なお、丸カッコ は省略可であることを、'|' は選択的にいずれか一つを指定することを 意味します。 % shless (-v|+v) (-c|+c) (-x|+x) (-l|+l) [script file] いずれも '-' が ON, '+' が OFF のスイッチ指定で -v/+v: 実行する行を表示/非表示 (default: 表示) -c/+c: "#shless:" で始まるコメント行を表示/非表示 (default: 非表示) -x/+x: 行の実行をする/しない (default: する) -l/+l: 行番号を表示/非表示 (default: 表示) です。これらはいずれも実行中に切替えることが可能です。 実行中のキーの意味は次の通りです (以下のキーを打った後、[return] を打ちます)。 [space] : 次の行 (または単に [return]) r : 今の行をもう一度 ([num])n : ([num] 行) 次の行 ([num])b : ([num] 行) 前の行 ([num])g : 最初 (から [num] 番目) の行 ([num])G : 最後 (から [num] 番目) の行 h : キー一覧表示 v,c,x,l : ON/OFF のトグルスイッチ (実行時オプションに同じ) q : 終了 [script file] の '#' で始まる行はコメント行とみなして実行をとばし ます。実際には各行を system() で実行しているだけです。 yomi と組み合わせるときは % yomi -d [テキストファイル] | shless - のようにします。 また、実行する行の上の行に "#shless:" で始まる行があると、それを その実行行に対するコメント行として認識し、-c オプション時には実行 行の代わりにそのコメント行の内容の方を画面表示するようになります。 例えば、 #shless:これはテストです。 auconn ko re ha te su to de su > /dev/audio のようなファイルを shless に +v -c オプションつきで実行させると [1] これはテストです。 と表示しながら音声出力を行うようになります。yomi -d のときに、通 常の実行画面出力を "#shless:" つきで出力させるオプション -sh を使 って % yomi -sh -d [テキストファイル] | shless +v -c - とすれば、通常の yomi と同様の画面が表示されたままで shless が使 えることになります。これは yomi の -s オプションよりは、少しだけ 便利です。 テキストファイルの元々の行の表示は、yomi version 0.9 からサポート されたもので、これにより shless でも元々の行を表示できるようにな りました。yomi の -r オプションを使用して 0.8 以前のものと互換表 示の機能を使うと、shless 用の出力も古い形式の出力、すなわち、一度 kakasi を通して変換された行が出力されるようになります。 また、ver.0.10.2 でバグの修正を行ったついでにコマンドラインオプシ ョン、実行時キー、ヘルプ表示などの仕様をかなり整理変更しました。 ご注意ください。 4.3. 音声データ情報表示ツール (aufinfo) --------------------------------------- 付属する編集ツール ausubstr (readme-contrib 参照) は、データのブ ロックサイズ長を指定して切り出しを行いますが、そのためにはまず全 体の長さを知る必要があります。aufinfo は、そのような音声データフ ァイルの各種情報を知るためのツールです。なお、丸カッコは省略可で あることを意味します。 % aufinfo (-m[mode]) (-b) (-t) (-s) [file] ([file]...) -m[mode]: 表示形式の切替え [mode] =0: 1 ファイル 1 行ずつの出力 (default) =1: 詳細出力 -b : 1 ブロックのサイズも表示 (default: 表示しない) -t : 全データサイズ (=全ブロック数×ブロックサイズ) も表示 (default: 表示しない) -s : データ開始位置も表示 (default: 表示しない) 例えば % aufinfo au/a.au wav/a.wav aiff/a.aiff TYPE smplrate encode ch bit totalblocks filesize filename AU 8000 mu-Law 1 8 1053 1093 au/a.au WAV 8000 linear 1 8 1053 1097 wav/a.wav AIFF 8000 linear 1 8 1053 1108 aiff/a.aiff のように、通常は [TYPE] = 形式 (AU, WAV, AIFF) [smplrate] = サンプリング周波数 [encode] = エンコード形式 (linear, mu-Law, A-Law, ...) [ch] = チャンネル数 (1:monoral, 2:stereo) [bit] = 量子化ビット数 (8bit, 16bit,...) [totalblocks] = 全データブロック数 [filesize] = ファイルサイズ [filename] = ファイル名 の項目を出力します。-b,-t,-s はそれぞれ [bs] = データ 1 ブロックのサイズ (byte) = (チャンネル数)×(量子化ビット数)/8 [totaldatasize] = 全データサイズ = (全データブロック数)×(1 ブロックサイズ) [datastart] = ファイル内でのデータ部分の開始位置 の項目の表示を追加します。ただし、-m1 ではこれらは常に表示されま す。-m1 での表示は次のような形式です。 % aufinfo -m1 au/a.au wav/a.wav aiff/a.aiff au/a.au : AU, 1093 Byte formatID: 0001H (mu-Law) channel : 1 samplingrate : 8000 byte/sec : 8000 blocksize : 1 bit/sample : 8 totalblocks : 1053 dataoffset : 40 datasize : 1053 wav/a.wav : WAV, 1097 Byte formatID: 0001H (linear) channel : 1 samplingrate : 8000 byte/sec : 8000 blocksize : 1 bit/sample : 8 totalblocks : 1053 dataoffset : 44 datasize : 1053 chunks : [1] "fmt " (size: 16, start: 12) [2] "data" (size: 1053, start: 36) aiff/a.aiff : AIFF, 1108 Byte format: (linear) channel : 1 samplingrate : 8000.000000 byte/sec : 8000.000000 blocksize : 1 bit/sample : 8 totalblocks : 1053 dataoffset : 54 datasize : 1053 chunks : [1] "COMM" (size: 18, start: 12) [2] "SSND" (size: 1061, start: 38) WAV ファイル, AIFF ファイルに対しては、-m1 の表示はすべてのチャン クの情報 (チャンク名、チャンクサイズ) も、ファイル内に置かれてい る順に表示します。 5. その他 --------- (11/03 2003: yomi Ver.0.12) yomi のオプションもたくさんあって使いにくくなって来ましたので、 ~/.yomirc で yomi のデフォルトオプションをユーザ毎に変更できるよ うにしました。 また、ドキュメントも少し分離してみました。昔は 1 ファイルの方がい いかなと思っていたのですが、さすがにかなり長くなっているので少し 分けてみたのですが、分けるのもそれなりに面倒なので、まあこの程度 かなと考えています。 久しぶりの改良で、下に書いたような懸案はすっかり忘れてしまってい ます (^^; 次回の bug fix 以外の更新は、多分 perl 5.8.X への対応で しょう。perl 5.8.X では国際化が進んで、jperl がほぼ不要になってい るらしいです。使い方を勉強してみたら更新したいと思います。 (03/19 2002: yomi Ver.0.11) 「こえうぇぶ」音声ファイルの加工はとりあえず終了し、既に公開して います。また、音程を変えるために auconn 等に速回しの機能も追加し ました。本来は、単音素毎に音程を変えられると面白いのでしょうが (しかも倍率指定でなくて音程名指定で) それは現在の yomi の方向とは 外れるので、別なツールとして作ってみてもいいかなと考えています。 とりあえずは一段落、といったところでしばらくは大きな変更は考えて はいません。オンラインマニュアルもそろそろ、とは思うのですがなか なか体が動きません (^^; (11/02 2001: yomi Ver.0.10.2) 音の大きさのばらつきを揃えるツール aunormal,wavnormal,aiffnormal を用意しました。なお、同様のフリーソフトで wavnorm なるものもある ようですが、使える音声フォーマットが固定されているようです (WAV, 16bit linear, 2channel)。また、sox の音量調節は現在の音を何倍する か、という指定だと思いましたが、もしかしたらこのツールのような絶 対音量の指定もできたかも知れません。 とりあえずこれで「こえうぇぶ」音声ファイルの使用も、後少しのとこ ろまできました。 また、shless もバグの修正のついでに多少手を入れました。仕様が多少 変わりましたがむしろ分かりやすくなったのではないかと思います。 (08/16 2001: yomi Ver.0.10.1) 「こえうぇぶ」ファイルの頭出しは、一種類の音程に関しては現在ほぼ 終了しました。ただ、いくつか問題があります。 ・音の大きさがばらついているものがある ・yomi 用には足りない音声ファイルがいくつかある 音の大きさのばらつきは、現在の付属ファイルにもあるのですが、「こ えうぇぶ」の方はもう少しばらつきの多い部分があります。これを、再 生時に調整するのではなく、編集時に調整するようにしたいのですが、 そのためのツールを作って調整したファイルを作成することを現在検討 しています。 足りないファイルに関しては、そのような文章は適当に代用することな どを考えていますが、それも今後柔軟に対応できるように、yomi のやや 基本的な構造を変えようかと思っています。 よって、「こえうぇぶ」のファイルによる yomi については、もう少し お待ちください。 (03/03 2001: yomi Ver.0.10) 2000 年度の 4 年生船橋崇将君の卒業研究により、CUI でも使える頭出 しツール auslcut, wavslcut, aiffslcut ができました。これらは彼と の合作です。これで「こえうぇぶ」ファイルの頭出しが進みそうです。 内部で auconn, ausubstr, aufinfo や sox, gnuplot などを system() や popen() で実行しているだけなので、むしろ perl の方が向いている とも思ったのですが今回は C で書きました。 また、このツールのために auhz を少し拡張し、wavhz, aiffhz も作り ました。 yomi のオプション -ap, -ao, -ad, -u も、整理して -ap に一本化しま した。そのためインストール時の Makefile の修正点がやや変更されて いますので注意してください。 (11/19 2000: yomi Ver.0.9) yomi の標準の画面出力は、今までは kakasi に一度通した行でしたが、 それを元々のファイルの行にするようにしました。kakasi を通したもの を処理するのではなく、一行ずつ kakasi に通しながら処理するように しています。 また、auhz という正弦波の単純音を作る小さなツールも付属しました。 音声ファイルの頭出しに利用しようと思って作ったものなのですが、残 念ながらあまり役に立ちませんでした。 現在、頭出しツール (できれば CUI のもの) の検討を行っていますが、 まともなものができるのはまだ少し先になりそうです。 よって、「こえうぇぶ」のファイルの頭出しは暇なときに xwave で手動 で行っていますが、なかなかはかどりませんので、「こえうぇぶ」ファ イルの利用については気長にお待ちください。もちろん、どなたかやっ て頂けると非常にありがたいです。 また、私のところでは、一部の環境で NAS (Network Audio System) を 立ち上げていて、音声ファイルの再生に NAS に含まれる auplay を利用 しているのですが、auplay には、40000byte の音声データ (ヘッダを除 くデータ部分が 40000byte) を食わせると、終了せずにハングアップし てしまうバグがあることがわかりました (NAS 1.2p5)。ソースを見たの ですがなんかよくわかりませんので、現在のところこれといった対処法 はなく、適当に auplay を殺すしかありません。このバグは % auconn -Lb8000+ a i u e o | auplay などとすると確認できます (version 0.7 以降の yomi)。 (注: この問題は NAS 1.4.1a で fix されています (12/10 2000)) (11/04 2000: yomi Ver.0.8) どれ位需要があるか分かりませんが、AIFF のサポートを始めました。き っかけは、「こえうぇぶ」の AIFF ファイルのうち、2 つのファイルが sox で変換できなかった (INST chunk があるのに MARK chunk がない) ので aiffdiet を作成した、ということでした。AIFF は WAV と似た形 式 (WAV ファイルは RIFF 形式というそうです) なので、対応はやさし く、WAV 用のコードを AIFF 用のコードに少し直して作りました (よっ て wavdiet は逆です)。 AIFF のデータは、WAV データ (AU データを sox で WAV に直しただけ のもの) を sox で変換し、aiffdiet にかけただけのもので、8bit 8kHz linear PCM であることは変わっていませんので音質は相変わらずです。 「こえうぇぶ」の音声ファイルを使うためには、後はいよいよ頭出しだ け、となってきました。 なお、sox は version 12.16 以前のものは AIFF の出力ルーチンにバグ がありますので AIFF への変換をする場合は version 12.17 以降のもの をお使いください。 (10/22 2000: yomi Ver.0.7) shless をより使いやすいものに改良してみました。数行戻る、数行進む といった指定ができるようになっています。また、画面出力も通常の yomi の画面出力と同等のものが出るようにしましたので、yomi -s より 少しいいものになったと思います。一番下や一番下にジャンプだけして 実行はしない、といったこともうまくやればできるようになっています が、必ずしも今のやり方が使いやすいかはわかりません。 また、auconn, wavconn での結合音声の出力時に音素の長さを指定する ことを思いつき、それをサポートしてみました。これで、元々の音素の 長さを揃えておく必要は、一応はなくなり、先頭の空白だけ除去してお けば良いことになり、さらに、yomi での読み速度が設定できるようにな りました。 しかし、逆にアルファベットや数字などの読みで採用している複音は、 短い長さ指定の際には途中で切れてしまいます。これはとりあえず解決 策はないので、-a や -n の強制ひらがなモードで対応するしかありませ ん。 (10/15 2000: yomi Ver.0.6.4) 「こえうぇぶ」ファイルの編集 (頭出し) をやって気がつきましたが、 か行やさ行の音のように、はっきりした音でない音から始まる音素の場 合、aucut は原理的にほとんど機能しないだろうと思います。 となるとむしろ ausubstr を使う方向でそちらの周辺ツールを作ってい くべきかと考えています。とりあえず、下に予告した音声ファイル情報 表示ツール aufinfo は作りました。 ausubstr は長さを揃えるのには適していて、スクリプトを使えば一括で 処理できますので、後は頭出しなのですが、そこを CUI のツールで作る にはどうしたものかと現在考えています。 (10/11 2000: yomi Ver.0.6.3) 「こえうぇぶ」ファイルの編集用に、wavsubstr を作りました。なお、 そのためには、元の WAV ファイルのデータサイズなどの情報を知ること が必要になりますがそのためのツールもそのうちに用意する予定です。 また、下に書いた、AIFF から AU への sox での変換時のノイズのうち 一部は、ダイナミックレンジの問題らしいことが分かりました。少しボ リュームを落して変換したら解消されました。yomi の WWW page http://takeno.iee.niit.ac.jp/~shige/unix/yomi/yomi.html には、サンプルファイルも置いてありますので、合わせてご覧ください。 (10/07 2000: yomi Ver.0.6.2) 下に書いた、AIFF から AU の変換時の音質の劣化は、sox のバージョン を 12.12 から 12.16 に上げたら解消されそうであることがわかりまし た。いくつかのファイルには新たにノイズが発生するようですが、これ で、小さい AU ファイルの形式で、「こえうぇぶ」の音素を使用する見 通しが立ちました。 (10/01 2000: yomi Ver.0.6) 下に書いてある「こえうぇぶ」などのファイルなどを利用するために、 WAV ファイルのサポートを開始しました (yomi-wav, wavconn)。現在用 意しているのは、まだ品質の悪い AU ファイルを WAV ファイルに変換し ただけのものです。「こえうぇぶ」のファイルも、前後の空白の処理な どの編集をして yomi-wav で使用できるようにしたいと思います。 (09/28 2000: yomi Ver.0.5.1) フリーで公開されている音素として、 「こえうぇぶ」 http://reisiu.iamas.ac.jp/ のものがあります。ここには AIFF (16-bit linear 48kHz) の 50 音等 の色んな音階の音素が置いてあります。これを利用させてもらおうと思 ったのですが、sox で AU (8bit μ-Law 8kHz) に変換したら音質の劣化 がひどくて、このままではやや使いづらいことが分かりました。 よって、これを使うには、例えば WAV などの AU 以外の音声データのサ ポートが必要になりそうです。auconn に対応する wavconn のようなも のを作ればいいのでしょうが、WAV は AU に対してかなりフォーマット が複雑ですし、WAV にするにしてもサンプリングレートをあまり下げれ ないので音声ファイル自身がかなりでかいものになりそうですので、ち ょっと躊躇しています。 もし、他に yomi 用に音素を作成された方、あるいは修正等された方が おられましたら、是非こちらへご連絡ください。そしてできれば公開さ せて頂ければ、と思います。 また、現在、yomi Home page http://takeno.iee.niit.ac.jp/~shige/unix/yomi/yomi.html で、yomi の音声サンプルを紹介していますが、それを聞けば分かります が、「は」や「へ」を「わ」や「え」に変換することは現在の yomi は やっていません。完全に対処することは難しそうですが、テスト的にこ れもそのうち試してみたいと考えています。 (09/03 2000: yomi Ver.0.5) まだまだ、やらなければいけないことは山程あります。しかしいずれも いつになったらできるのかわかりません。卒研の学生に手伝ってもらっ たり、卒研で考えてもらったりしながら少しずつ前に進んで行こうと思 っています。とりあえずやらないといけないのは、 1) オンラインマニュアル (roff の勉強をしないといけない ?) 2) 各コマンドのバグ取り (まだかなりあると思う) 3) 音声ファイル作成ツールの改良 (全然使えない) 4) 音声データの改良 (ひどすぎる (^^;) などがあります。 実は、規則音声合成にはあまり興味や関心を持っていません。それを yomi に組み合わせられればいいのでしょうが、それよりも、このような 低機能なツールで何ができるか、どんなところに役立つか、という可能 性の方に興味があります。 例えば、音声データを一音一音用意しているという形態は、速度や規則 音声合成へ発展させるには不利かも知れませんが、ユーザが容易に音声 データを作り直せる、という有利な面もあるでしょう。perl で書いてい るのも同様の意味があります。C で書き直すことは今のところあまり考 えていません (実は一番最初の yomi は AWK 版でした)。 よって、現在は yomi 自身の積極的な改良より、その周辺ツールや、こ れらを使った別なツールに関心を寄せていて、それらをまた学生の卒研 のテーマとして使うことなどを考えています。 私自身、このような低機能のツールを作った動機は、学生のテストの成 績の読み合わせ作業に使いたかったからです。パソコンの UNIX をわざ わざ shutdown して MS-DOS で VC2 を使う、ということをやるのが面倒 だったので作ったのですが、現在は、yomi を出席のデータ入力の時や、 パソコン内のデータの紙への転写の際に利用し、作業の量の軽減に役立 てています。 UNIX という、テキスト処理やツールの組み合わせを得意とする環境では、 まだまだ色々な可能性があると思っています。また、CUI での音声デー タの作成ツールがあれば、視覚障害者にも使えるツールになる可能性も あるのではないかと期待しています。 6. バグリポート、ライセンス --------------------------- このツール群は無保証です。しかし色々な不具合は、対応できるものは 行う予定ですので、不具合の報告、意見などは歓迎します。報告等は下 記メールアドレスへお願い致します。また、バグリポート等、各種情報 は、順次下記 yomi の Home page に掲載する予定です。 e-mail: shige@iee.niit.ac.jp Home page: http://takeno.iee.niit.ac.jp/~shige/unix/yomi/yomi.html また、このソフトはフリーソフトとして公開します。再配布、改良は可 能ですが、その際、このライセンス部分は改変せずに付属させてくださ い。改良は変更箇所を別途明記してください。ソースコードも、dist/ 以下にあるもの以外の私が作成したものに関しては、それを自由に使用 して頂いて構いません。付属する音声ファイルも、私が作成したものに 関しては自由に使用して頂いて構いません。 yom の配布の dist/ 以下に含まれる g711.c, ToFromIEEE.c の 2 つの ファイルについてですが、g711.c は、Sun Microsystems, Inc. の、改 変、再配布が可能なソースコード、ToFromIEEE.c は Ken Turkowski の 使用、再配布が可能なソースコードです。これらのファイルに関しては ライセンスは、それらのファイルの最初のコメント部分に記載されてい る事項に従います。 私のソースコードに関しては GPL に準じたライセンスとしたいと思いま すが、まだそこまで厳密には考えていません。 7. 謝辞 ------- このツールの改良に関して、研究室の 1999 年度の 4 年生佐藤健美君に 色々調査、考察をして頂きました。どうもありがとうございました。 彼には、yomi 用の kakasi パッチを作成してもらったのですが、実はま だ現在の yomi はそれに対応していません。どうもすみません。次期バ ージョンでの対応を考えています。 「こえうぇぶ」 http://reisiu.iamas.ac.jp/ を作成しておられるれいしうさんには、yomi への音素の使用を快く了承 して頂いたばかりでなく、yomi には不足となる音素ファイルの作成のご 協力まで申し出て頂きました。本当にどうもありがとうございました。 長野大介さんには、Linux で yomi を使用する場合の問題点、バグリポ ート、修正点、技術情報など、大変多くのことを教えて頂きました。本 当にどうもありがとうございました。長野さん自身、yomi とは別のコン セプトのテキストファイルの読み上げソフトを作成しておられます。こ ちらもお楽しみください。 簡易日本語文書読み上げツール「suzume」 http://member.nifty.ne.jp/Breeze/softwares/unix/suzume.html 「PC てぱてぱ日記」 http://member.nifty.ne.jp/Breeze/linux/diary/index.html 0.7 から 0.10 までの改良に関しては、研究室の 2000 年度の 4 年生 船橋崇将君に主にお世話になりました。彼との意見交換の中での色々な アイデアが改良に使われていますし、また、0.10 で取り入れられた CUI 環境での編集が可能な頭出しツール auslcut, wavslcut, aiffslcut は 彼の卒業研究によるもので、彼との合作です。本当にどうもありがとう ございました。 8. 変更履歴 ----------- Version 0.5 以降の変更に関しては、ChangeLog ファイルをご覧くださ い。 07/17 1998 Ver.0.1 02/16 1999 Ver.0.2 03/09 1999 Ver.0.3 05/02 2000 Ver.0.4 09/03 2000 Ver.0.5 yomi 07/17 1998 1) AWK 版の低機能版が取り敢えず完成。 02/16 1999 2) 外部音声出力プログラムに対応。 3) auconn の作成。 03/09 1999 4) auconst の作成。 5) perl 版の作成。 6) auconn の改良。 7) audio server (NAS) の自動判別。 05/02 2000 8) auconn の改良。 9) 公開版の作成開始。 09/03 2000 10) 公開版。ドキュメントをつける。 11) コマンドラインオプションをつける。 12) pause のサポート。 13) 複数のファイルのサポート。 14) aucut の作成。 15) 句点区切りのサポート。 16) shless の作成。 17) ausubstr の作成。 9. 目次 ------- 1. はじめに 2. install 2.1. FreeBSD の場合の簡単な説明 2.2. 動作環境 2.3. Makefile の修正 2.4. コンパイルとインストール 2.5. 設定 2.6. 「れいしう」音声データ 3. 使用法 3.1. 基本的な利用法 3.2. オプションの詳細 3.3. オプションの複雑な使用例 4. 各コマンドの詳細 4.1. 音声データ連結ツール (auconn, wavconn, aiffconn) 4.1.1. auconn, wavconn, aiffconn の概要 4.1.2. auconn, wavconn, aiffconn の設定ファイル 4.1.3. auconn, wavconn, aiffconn のコマンドラインオプション 4.2. スクリプトの less (shless) 4.3. 音声データ情報表示ツール (aufinfo) 5. その他 6. バグリポート、ライセンス 7. 謝辞 8. 変更履歴 9. 目次 +=================================================+ 竹野茂治 〒945-1195 新潟工科大学 情報電子工学科 shige@iee.niit.ac.jp TEL(&FAX): 0257-22-8161 +=================================================+