竹の 03/04 2001 --------------- テキストファイル読み上げツール yomi を公開します (UNIX 用)。現在 の version は 0.10 です。 1. introduction --------------- 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) 読みの速度の変更が可能です。 2. install ---------- 2.1. FreeBSD の場合の簡単な説明 ------------------------------- FreeBSD を使用していて、日本語化された perl5, kakasi がパッケージ からインストールされている場合で、yomi も /usr/local の下へインス トールしてもいい場合は、インストールは簡単です。 それ以外の場合は、Makefile を修正する必要があります。「2.2. 動作 環境」以下へ進んでください。 FreeBSD の場合のインストール方法を述べます。 0) ダウンロード 下記サイトから持って来てください。 yomi Home page http://takeno.iee.niit.ac.jp/~shige/unix/yomi/yomi.html 1) 展開 & コンパイル % gunzip -c yomi-0.10.tar.gz | tar xf - % cd yomi-0.10 % 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) 3) kakasi version 2.2.5 以上 (わかち書きパッチは不要) 4) 音声を再生できる環境 (以下のうちいずれか一つあればよい) ・μ-Law 8kHz の音声ファイル (.au) を直接再生できる音声デバイス (/dev/audio) ・μ-Law 8kHz の音声ファイル (.au) を標準入力から読み込んで再生 できるソフト ・linear PCM の WAV 形式の音声ファイルを標準入力から読み込んで 再生できるソフト ・linear PCM の AIFF 形式の音声ファイルを標準入力から読み込んで 再生できるソフト 標準入力から読み込むのは無理な再生ソフトでもごまかすことはできま す (後述)。 また、version 0.10 で追加された音声切り出しツールで、グラフ表示を 見ながら作業する場合は、さらに gnuplot (ver 3.6 以上)、sox (version 12.17 以上を推奨) が必要になります。パスが通っていれば特 にそれに関する Makefile の修正は必要ではありません。 こちらでは、以下のマシンと OS の環境での動作を確認しています。 [a] NEC PC9821 + FreeBSD(98)2.2.8R-Rev03 [b] Sun SS5 (および Ultra 1) + Solaris 2.6 [c] HP9000/715 + HP-UX 9.05 条件の 1) は、 [b]: Sun WorkShop SPARC Compiler 4.0 および gcc (2.8.1) [c]: HP C Compiler (A0.9.61) および gcc (2.8.1) で確認済です。条件 [2] は、こちらでは [a],[b],[c] いずれも次のバ ージョンのもので動作しました。 % 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 .... 条件の 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 です。yomi で音声が鳴らせるかどうかのテストは、適当な音声ファイル file.au を使って (例えば、yomi に含まれているものでいい)、 % cat file.au > /dev/audio % cat file.au | auplay % cat file.wav | wavplay % cat file.aiff | aiffplay のようにすればいいでしょう。再生プログラム名は適当に対応するもの に変えてください。 なお、HP-UX ではデバイス名は /dev/audioIU : μ-Law 8kHz スピーカ出力 /dev/audioEU : μ-Law 8kHz イヤフォンジャック出力 /dev/audioBU : μ-Law 8kHz 両方への出力 のようになっています。/dev/audioIA などは A-Law エンコーディング ですので yomi には使えません。 再生ソフトが標準入力からの読み込みをサポートしていない場合は、次 のようなラッパースクリプトで代用するか、「2.3. Makefile の修正」 の AUPLAY にこれと同等のものを書けばいいでしょう。 ----- ここから ----- #!/bin/csh -f /bin/cat > /tmp/yomi$$.au /usr/local/bin/auplay /tmp/yomi$$.au /bin/rm /tmp/yomi$$.au ----- ここまで ----- 2.3. Makefile の修正 -------------------- yomi のパッケージを展開してそのディレクトリに移動して 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 を用意しました。 これを指定します。Makefile のコメント部分を参考にしてください。 ・INSTUSER = インストールユーザ ・INSTGROUP = インストールグループ root でインストールするなら、この 2 つはいずれも bin でいいと 思いますが (OS によって違うかも)、自分のホームディレクトリの 下に一般ユーザ権限などでインストールするときは自分のユーザ名 とグループ名に変えてください。 ・INSTDAT = データのインストール時のコマンドライン ・INSTBIN = 実行バイナリのインストール時のコマンドライン cpandmod.csh を使うときは、この 2 つを変更してください。 ・CC,CFLAGS,LINK = コンパイラやコンパイルオプション等の指定 HP cc を使う場合は CFLAGS に -Aa を入れて ANSI C モードにして ください。 ・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" とする必要があるかも知れません。 なお、再生ソフトが標準入力からのデータをサポートしていない場合は WAVPLAY = "> /tmp/yomi.wav ; wavplay /tmp/yomi.wav ; rm /tmp/yomi.wav" のように書くことも可能です。 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 がそれにシンボリックリンクされます。 2.5. 設定 --------- 特に設定は不要なはず。$(BINDIR) にパスが通っているかどうか確認し てください。音声ファイルを別なパスに作って追加する場合は、 $(LIBDIR)/auconnrc を ~/.auconnrc へ (AU ファイルを使う場合) $(LIBDIR)/wavconnrc を ~/.wavconnrc へ (WAV ファイルを使う場合) $(LIBDIR)/aiffconnrc を ~/.aiffconnrc へ (AIFF ファイルを使う場合) のようにコピーしてそれを編集すればいいでしょう。詳しくは、 「4.1.1. auconn,wavconn,aiffconn の設定ファイル」を参照してくださ い。 3. 使用法 --------- 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 [テキストファイル] として、アルファベットや数字も強制的にひらがな音素を用いるように した方がいいかもしれません。 3.2. オプションの詳細 --------------------- yomi のオプションについて説明します。 何も引数をつけずに yomi を実行すると、yomi のオプション一覧が出力 されます。 % yomi yomi version 0.10 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 RET で行毎に中断できます。 [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 に渡すオプションを指定 -sh : shless 用にコメントを付加 (-d 指定時のみ有効) -L(s|b)[n](+|-): 音素の長さを揃える (auconn に渡す) auconn は yomi (yomi-au) 用のプログラムですので、上の部分、および 以下の説明では yomi-wav, yomi-aiff ではそれぞれ wavconn, aiffconn と読み変えてください。 これらのデフォルトの値は、yomi の最初の方に書かれています。インス トール時に書き換えておく方が便利ですが、環境、使用法によっては途 中で切替える必要があるかもしれません。そして、例えば -ko "-JH -kH -KH -Ea -s" のように、クォートやダブルクォートを使ってスペースの入った文字列 を指定することも可能です。 なお、auconn に渡すオプションについては、「4.1 音声データ連結ツー ル (auconn, wavconn, aiffconn)」の説明を参照してください。 -sh は、-d オプション指定時に、通常の実行時に表示される行をコメン ト行 ("#shless:" を先頭につけて) として出力するオプションです。こ れは shless 用のオプションです (version 0.7 より)。詳しいことは、 「4.3. スクリプトの 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]- は 特別な用途のためのオプションで普通は使用しません (多分役に立ちま せん)。 [d] ヘルプ、バージョン表示 -v: バージョンの表示 -h: オプションの一覧表示 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.2. 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 の出力を、手で編集しても可能で、その方 が速いこともあるかも知れません。 なお、必要なファイルが存在しない場合、version 0.6.4 より、その部 分を無音で置き換えることができるようになりました (今まで、あるい は default では、その行の実行はしない)。詳しくは「4.1. 音声データ 連結ツール (auconn, wavconn, aiffconn)」の該当部分を参照してくだ さい。 4. 各コマンドの詳細 ------------------- yomi に付属する、連係コマンドについて説明します。 4.1. 音声データ連結ツール (auconn, wavconn, aiffconn) ----------------------------------------------------- yomi では、1 音ずつデバイスに音を流してはおらず、行単位で音のデー タをつなげてからデバイスに流しています。そうでないと、マシンの能 力や実行時の負荷などによって、出力が間延びしたりつまったりするか らです。その音声データの連結プログラムが auconn, wavconn, aiffconn です (aiffconn は version 0.8 より)。 auconn は AU ファイルを、wavconn は WAV ファイルを、aiffconn は AIFF ファイルを連結します。wavconn, aiffconn に関する仕様は auconn とほぼ同様ですので、以下では主に auconn に関してのみ書きま す。 auconn は % auconn a b c > d.au とすると、デフォルト音声データ検索パスから a.au, b.au, c.au とい うファイルを探し、それをつなげたデータファイルを作り、標準出力に 流します。よって、それが結果として d.au となって出力されます。 yomi では、実際は % auconn a i u e o > /dev/audio % auconn a i u e o | /bin/audioplay のようなコマンドラインを生成しています。 なお、WAV ファイル、AIFF ファイルに関しては (yomi-wav, yomi-aiff) それをそのままデバイスに流すことはせず、必ず再生ソフトに渡してい ます。 また、auconn は、データ形式 (AU, WAV, AIFF) やデータファイルフォ ーマット (チャンネル数、サンプルビット数、サンプリング周波数など) の異なるデータ同志を連結することはできません。 使用するデータを自分で用意する場合は、これらのフォーマットを揃え たものをご使用ください。データフォーマットが揃っているかどうかの 確認には、付属のツール aufinfo が使えます。詳しくは「4.4. 音声デ ータ情報表示ツール (aufinfo)」の項目をご覧ください。 現在 yomi とともに配布しているデータは、元々 AU データファイルの みで、WAV, AIFF のデータはそれを sox (と aiffdiet) を使って 8bit 8kHz linear PCM の WAV, AIFF にしたもので、WAV、AIFF としては音質 はよくはありません。また、AU データも音程や音量などが揃っておらず 声質もいいわけではないので、音質はよくありません。 auconn は、設定ファイル、またはコマンドラインオプションを使って、 音声データの検索パスのリストや、検索拡張子リスト、非存在音声代用 ファイルなどを指定できます。それを次に説明します。 4.1.1. 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" などのファイルやディレクトリ があると、それがマッチしてしまい、それを音声ファイルと見なします のでなってしまいますので注意してください。正しくファイルを検索し ているかどうかは % 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 にまとめました。~/.auconnrc 等でディレクトリを指定している場合は それに合わせて修正をしてください。 4.1.2. auconn, wavconn, aiffconn のコマンドラインオプション ----------------------------------------------------------- -p[検索パスリスト] : 音声データ検索パスリストの指定 -e[拡張子リスト] : 音声ファイル拡張子のリストの指定 -f[設定ファイル名] : 設定ファイルの指定 -n[代用ファイル] : 非存在音声代用ファイルの指定 -L(b|s)[長さ](+|-) : 音素ファイル長の指定 -l : 音声ファイルのリストのみ表示 -q : quiet モード -h : ヘルプメッセージ 最初の 4 つは 4.1.1. でも説明しました。 -L は、各音素ファイルの長さを揃える指定です (yomi version 0.7 以 降)。指定がなければ単にファイルをつなげるだけです。b はデータブロ ック単位での指定、s はミリ秒単位での指定を意味します。最後に + を つけた場合は、指定より短いファイルに無音を付加して強制的にその長 さに揃えます。よって例えば -Ls200 : 一音最長 0.2 秒 -Lb4000+ : 一音 4000 ブロック、足りなければ無音を後ろに付加 -Ls500- : 一音 0.5 秒、足りなければ無音を先頭に付加 となります。ブロックは、aufinfo の表示の totalblocks と同じで、デ ータブロック単位の指定です。ただし、- を最後につける方は、特殊な 用途用で、普通は使用しません (役に立ちません)。 なお、yomi では、アルファベットや数字の読みで複音を採用しています が、長さの指定を短くしすぎるとその複音が途中で切れる可能性があり ますので、そのような場合は yomi の -a や -n オプションを併用して ください。詳しくは「3.2. オプションの詳細」[a] をご覧ください。 -l は、音声データの連結は行わずに、指定した音声ファイルの、実際に 見つかったパスを表示します。設定ファイルのデバグに使えます。 -q は、auconn のエラー表示を抑制します。特に、代用ファイルを使用 する場合、-q を使用しないと代用ファイルが使われるときにいちいちエ ラー表示が行われることになります。 4.2. 音声データ編集ツール ------------------------- 音声データを自分で作るためのツールを少し用意しました。いくつかあ りますが、以下の通りです。 定数データ作成 : auconst, auhz, wavhz, aiffhz 自動音声切り出し : aucut 手動音声切り出し : ausubstr, wavsubstr, aiffsubstr 不要部分削除 : wavdiet, aiffdiet 対話型音声切り出し : auslcut, wavslcut, aiffslcut なお、aucut は自動音声切り出し、となっていますが、あまり有効に使 えるレベルではありません。 コマンド名が au, wav, aiff から始まるものはそれぞれ AU, WAV, AIFF データファイル用のツールですので、インストール時に make install-au, make install-wav, make install-aiff とした場合には、 それらに対応するツールしかインストールされません。 また、現在 yomi の配布に含まれている音声データは、UNIX でマイク録 音したデータを、UNIX 上の GUI の音声編集エディタを使用して、前後 の不要な空白部分を取り除いたもので、aucut や ausubstr を使っては いません。WAV ファイルは sox でその AU ファイルを変換しただけのも の (サンプリング周波数 8000Hz のまま)、AIFF ファイルはその WAV フ ァイルを sox で変換し、aiffdiet で不要な部分を取り除いただけのも のです。 UNIX で動作する GUI の音声編集エディタには、Solaris では、 OpenWindows の audiotool, /usr/demo/SOUND の soundtool, HP-UX で は /usr/audio にある audio_editor などがあります (私はほとんどこ れを使いました)。フリーのものとしては、xwave や、NAS に含まれる auedit などがありますが、xwave はマシンによって動作が不安定なよう です。 そして、version 0.10 から付属する auslcut, wavslcut, aiffslcut は CUI レベルで音声編集を行うことができる、対話型音声切り出しツール で、2000 年度の 4 年生船橋崇将君の卒業研究によるもので、彼との合 作です。そして sox, gnuplot がインストールされていれば、編集状況 (音声波形) を画面で見ることもできます。 4.2.1. auconst, auhz, wavhz, aiffhz ----------------------------------- auconst は、ある長さのデータを繰り返すだけの音声データ (.au) を生 成するツールで、auhz は、指定した周波数の単純音を生成するツールで す。実際は、auconst を無音データの作成にしか使用していません。 [a] auconst % auconst (-n [num]) (-s [data]) (-i [data]) (-h) > file 出力は標準出力に出されますのでリダイレクトしてください。 -n [num]: データブロックの個数 (default: 10) -s [data]: データブロック (16 進数) (default: なし) -i [data]: データブロック (10 進整数 (0~255)) (default: 0) -h: ヘルプメッセージ (この程度) -s [data] や -i [data] で指定したデータを -n [num] で指定した回数 だけ繰り返したデータを作成します。-s の方はデータを 16 進数の文字 列として読み込みますし、-i の方は 10 進数として読み込みます。 それらのデータを、8bit μ-law エンコーディングされた 0~255 までの 値のデータと見なして、つなげるだけです。-s の方は、08080a0a0808 のように、多少長い文字列も指定できますので、工夫すればある種の音 を出すこともできます (が、面倒です)。 なお、私が使用している無音は % auconst -s 7e -n 2000 > null.au として作ったものです。 WAV データや、AIFF データの無音は、これを sox で変換すればできま すが、sox の version 12.16 以前のものは AIFF への変換ルーチンにバ グがあり、正常な AIFF データが作成されません。よって AIFF への変 換には version 12.17 以降の sox をお使いください。 [b] auhz, wavhz, aiffhz % auhz [音程] [音長] [音量] > file % wavhz [音程] [音長] [音量] [smpl] [ch] [bit] > file % aiffhz [音程] [音長] [音量] [smpl] [ch] [bit] > file 出力は標準出力に出されますのでリダイレクトしてください。 [音程]: 周波数 (Hz) [音長]: 音の長さ (ミリ秒) [音量]: 音の大きさ (0.0 ~ 1.0) [smpl]: サンプリング周波数 (44100(Hz) など) [ch] : チャンネル数 (1(=モノラル), 2(=ステレオ)) [bit] : 量子化ビット長 (8, 16) を指定します。波形は、正弦波を使用しています。サンプリング周波数 の半分より高い音程を指定しても意味がありませんので適切な数値を選 んでください。 また、version 0.10 より、無音データもこれで作成できるようにしまし た。[音程] == 0 または [音量] == 0.0 とすると無音データが作られま す。任意のサンプリング周波数、チャンネル数、量子化ビット数の無音 データや単純音データは、wavslcut, aiffslcut で必要になります。 なお、auhz 生成するのはサンプリング周波数 8000Hz, モノラル、量子 化ビット 8 の AU ファイルのみです。 ただし、環境 (サウンドデバイスの性能) によっては、高いサンプリン グ周波数を指定すると、単なる単純音以外にノイズが入って聞こえる場 合があります。Sun のワークステーションのように 8000Hz の周波数し かサポートしていないマシンではそのような事が起こるようです。 4.2.2. aucut ------------ GUI ではないツールで、一度に複数の音が録音されたデータから単音の データを切り出すことを目標に、取り敢えず作ってみたツールです。 % aucut [options] [出力ファイル指定] [aufile] [aufile] : 複数の単音を録音したデータファイル (.au) [options] : -r[R] : 信号とノイズの比のしきい値 (default=0.1) -t[T] : 最短音声データ長 [秒] (default=0.01) -s[S] : 最短雑音部分長 [秒] (default=0.01) -p[path] : 出力ファイルを格納するパス (default=カレントディレクトリ) -v : 冗長出力 [出力ファイル指定] は、複数のデータファイル名を指定します。書式は (a) ',' 区切り (例: a,o,ko) (b) '-' 区切り (例: a-ko ==> a,i,u,e,o,ka,ki,ku,ke,ko) のどちらかの書き方ができます。スペースは入れないようにします。(b) には、順序があるわけですが、それは autable.h を見てください。5.3. 音声データ表に書いてある順もほぼ同じだと思います。 [R],{T},[S] の値ですが、動作は次のようになっています。 [1] (信号の強さの最大値)×[R] 以下の強さのデータ部分は雑音部分と みなします。よって [R] を 小さくする ==> 雑音を拾いやすくなり、各音声は長めになり、総音 声数は増える 大きくする ==> 小さい音声が雑音と見なされて捨てられてしまい、 各音声は短めになり、総音声数は減る となります。 [2] [T] より短い音声部分は雑音とみなします。よって [T] を 小さくする ==> ピーク型のノイズを拾いやすくなる 大きくする ==> 短い音声をノイズとみて捨ててしまう となります。 [3] 音声データ中の雑音部分で、[S] より短い部分は、データ中で一時 的にデータが弱くなっている部分と判断し、音声データが継続して いるとみなします。よって、[S] を 小さくする ==> 一時的に弱い部分も音の切れ目と判断されて音声が 途中で切れてしまう 大きくする ==> 音と音との間も音声がつながっているとみなされて 音が切り離せなくなる となります。 これらを調整しながら使用しないといけないのですが、それは録音環境 により千差万別、また、試行錯誤の連続が必要になりますし、それを行 っても実際にはあまり綺麗には切れません。まだ GUI ツールで目でみな がら、部分的に再生しながら切るのには全くかないません。 また、か行やさ行の音のように、はっきりした音でない音から始まる音 素には残念ながらこのツールはほとんど機能しません。むしろ、auslcut (wavslcut,aiffcut) を使ってください。 4.2.3. ausubstr, wavsubstr, aiffsubstr -------------------------------------- aucut では、例えばアルファベットや数字などの複音からなるデータを 切り出すことは難しいです。ausubstr, wavsubstr, aiffsubstr は、AWK の substr 関数のように先頭と長さを指定して、録音データから音を切 り出すツールです。ausubstr, wavsubstr, aiffsubstr はそれぞれ AU ファイル用、WAV ファイル用、AIFF ファイル用のものです (aiffsubstr は version 0.8 より)。 % ausubstr (-v) (-q) (-o [outfile]) [start] ([length]) [infile] % wavsubstr (-v) (-q) (-o [outfile]) [start] ([length]) [infile] % aiffsubstr (-v) (-q) (-o [outfile]) [start] ([length]) [infile] -v : 冗長モード -q : quiet モード (default) -o [outfile] : 出力ファイルの指定 (省略時: 標準出力) [start] : 開始位置 [length]: 出力最大長 (省略時: 最後まで) [infile]: 入力ファイル 出力ファイルは、'-' を指定すると標準出力になります。ただし、入力 に関しては標準入力はまだサポートしていません。 start と length の単位は一つのサンプリングデータブロック単位です。 例えば AU ファイルの場合は、その 1 単位が 1/8000 秒となります。 WAV ファイル, AIFF ファイルの場合は、サンプリング周波数は色々あり ますので、データによって秒数は異なりますが、基本的に 1 単位は 1/(サンプリング周波数) 秒を表します。なお、先頭位置は 1 ではなく 0 としています。 WAV ファイル, AIFF ファイルの長さ (総ブロック数) などの情報を知る には、このツールの -v の表示でも少しはわかりますが、付属のツール aufinfo が使えます。詳しくは「4.4. 音声データ情報表示ツール (aufinfo)」の項目をご覧ください。 最悪の場合、GUI の音声編集エディタがなくても、この ausubstr と sox と gnuplot があれば、ある程度の編集は可能ですが、それは非常に 大変な作業です (実はそれらを組み合わせたものが auslcut, wavslcut, aiffslcut です)。 4.2.4. wavdiet, aiffdiet ------------------------ AU ファイルは、データファイルの情報を格納するヘッダ部分と、実際の 音声データ部分だけからなっていますが、WAV ファイル、AIFF ファイル はその他の色んな情報を追加できるように、データ部分、フォーマット 情報部分などが chunk という共通の形式で格納されていて、さらに他の chunk が含まれていることもあります。そのデータ部分とフォーマット 部分だけのファイルにするのが wavdiet と aiffdiet です (yomi version 0.8 より)。 % wavdiet (-v) (-q) (-o [outfile]) [infile] % aiffdiet (-v) (-q) (-o [outfile]) [infile] -v : 冗長モード -q : quiet モード (default) -o [outfile] : 出力ファイルの指定 (default: 標準出力) [infile]: 入力ファイル 出力ファイルは、'-' を指定すると標準出力になります。ただし、入力 に関しては標準入力はまだサポートしていません。 WAV ファイルでは fmt chunk (format chunk) と data chunk のみ、 AIFF ファイルでは COMM (common chunk) と SSND (sound data) chunk のみからなるデータファイルを出力します。 AIFF ファイルに関しては、INST (instrument) chunk や MARK (mark) chunk も取り除くことになるので、厳密には元の音声データと異なる音 声出力になる可能性があります。しかし、例えば INST chunk はあるの に MARK chunk がない AIFF ファイルは sox などでは不正なファイルと 見なされ、扱うことができません。そのようなものから音声データを作 るときに使うことができます。 また、sox (12.17) は、音声ファイルを AIFF へ変換すると COMT (comment) chunk を自動的につけますが、これもとることができます。 なお、wavconn, aiffconn はこのツール同様、不要な chunk のないデー タを作成します。 4.2.5. auslcut, wavslcut, aiffslcut ----------------------------------- CUI 環境でも作業ができる音声編集ツールです。yomi のためには音声デ ータの先頭部分に含まれる雑音や無音部分を取り除く必要があり、それ を切り出すためのツールです。よって汎用の音声編集ツールではありま せん。 なお、このツールは 2000 年度の 4 年生船橋崇将君の卒業研究による もので、彼との合作です。 4.2.5.1. 準備 ------------- これを使って作業するには、まず以下の準備が必要です。 [a] 録音したデータのサンプリング周波数、チャンネル数、量子化ビッ ト数を揃える 同じ環境で録音したならば、多分、揃っているはずですが、揃っていな ければ sox などで変換して揃えてください。揃っているかどうかは aufinfo で確認できます。 [b] 一音一ファイルになっていなければ適当に切り分ける この編集ツールは、一音ずつの音声データファイルの先頭部分の切り出 ししか行いませんので、そうでないデータを使うなら切り分けておく必 要があります。なお、使ってみると分かると思いますが、このツールは その切り分け作業の補助にも使えます。 [c] 同じサンプリング周波数、チャンネル数、量子化ビット数の無音デ ータと単純音データを用意する それぞれ 1 秒位でいいでしょう。これらは auhz, wavhz, aiffhz で作 ることができます。例えばサンプリング周波数 44100Hz, チャンネル数 1, 量子化ビット数 16 の WAV データであれば % wavhz 440 1000 0.05 44100 1 16 > poo.wav % wavhz 0 1000 0.05 44100 1 16 > empty.wav でできます。ここでは音量を 0.05 に設定していますが、これ位小さい もので結構だと思います。元のファイルのサンプリング周波数やチャン ネル数、量子化ビット数などは aufinfo で調べることができます。 なお、AU ファイル用のものは既にインストールされているはずです。 ただし、「4.2.1. auconst, auhz, wavhz, aiffhz」[b] でも述べました が環境 (サウンドデバイスの性能) によっては単純音にノイズが入って しまう場合があります。そのような場合は、 % cp empty.wav poo.wav とでもして、単純音の代わりに無音を使用してください。 [d] 編集状況をグラフで確認したい場合は、sox, gnuplot にパスが通っ ていることを確認する gnuplot は version 3.7 以上が必要で、sox は、AIFF を編集するなら 12.17 以上が必要です (AU, WAV なら多分もっと低いバージョンでも大 丈夫)。グラフでの確認が不要であれば gnuplot, sox は必要ではありま せん。 これで準備は OK です。 4.2.5.2. 使い方 --------------- 先頭の無音部分をカットしたいファイルが file.au、作成するファイル が newf.au だとします。 まず % auslcut -gvk file.au > newf.au とすると、file.au の波形グラフが立ち上がり、画面には Plotting...completed. Hit return key. と表示されます。グラフの横軸は時間 (ミリ秒) を表しています。 ここで return を打つと、そのグラフには 1. 波形グラフの先頭の位置 2. 1/3 の位置 3. 2/3 の位置 4. 最後の位置 にそれぞれ縦線が入り、その 1,2,3,4 のそれぞれの位置からの音声が、 次のように再生されます。 [単純音] [1 から最後まで] [単純音] [2 から最後まで] ... 正確には、音声の長さを揃えて出力していますので、最後までの音には なっていない場合もありますし、長さが短すぎる部分には無音を付加し ています。 この 1,2,3 のどれがいいかを選ぶ、という 3 択を行います。4. の位置 は参考にならすだけで、選択肢には含まれていません。画面には Hit KEY+return) KEY: 1,2,... ==> choose 1,2,... q ==> quit nothing ==> again p ==> previous level b ==> backward f ==> forward のようにキー入力に関する説明が表示されます。 そして、例えばここで先頭位置の 1 を選ぶ (1 を打って return) と今 度は、先頭から 1/3 までの部分 (つまり先程の 1 から 2 までの間) が さらに 3 等分されて表示されます。つまり今度の選択肢は 1. 先頭位置 2. 1/9 の位置 3. 2/9 の位置 4. 3/9 (==1/3) の位置 となるわけです。これを繰り返していって適切な位置を細かく突き詰め ていく、ということを行うわけです。 選択の幅が小さくなりすぎた場合、あるいは q return と打った場合は 終了し、その結果のファイルを newf.au として残します。キー入力は [数] return : その番号を選択した q return : 終了 return のみ : 今の音の再生を繰り返す p return : 一つ上のレベルに戻る b return : 一つ分前方にシフトする f return : 一つ分後方にシフトする のようになっています。 選択の方針は、 ・求める音節が正しく聞こえること ・なるべく後ろの方であること とすればいいでしょう。一つ前の選択が失敗だったと感じたら p, b, f などを使えばいいでしょう。 4.2.5.3. オプション ------------------- 単に auslcut と実行すると auslcut のオプションが出力されます。 % auslcut Usage: auslcut ([options]) [datafile] [datafile]: 編集する録音した音声ファイル [options]: -h: このメッセージ -g/-ng: graph plot をする/しない (default: しない) -v/-nv: verbose 出力をする/しない (default: しない) .... [a] ある機能の ON/OFF yomi のオプションと同様に n をつけると反対の意味になります。 -g: 波形グラフの出力をする -ng: 波形グラフの出力をしない (default) -k: キーの説明表示をする -nk: キーの説明表示をしない (default) -e: 無音部分を聞く -ne: 音声部分を聞く (default) -v: 冗長出力をする -nv: 冗長出力をしない (default) -b: 単位はブロック数 -nb: 単位はミリ秒 (default) -e/-ne の説明をします。通常は選択肢から最後までの音声を出力します (-ne) が、-e を指定すると、 [単純音] [先頭から 1 まで] [単純音] [先頭から 2 まで] ... のように、音声の先頭から選択肢までを出力するようになります。つま り無音部分を聞くことになるわけです。この場合は音が含まれないもの を選んでいくことになります。よって選択の方針は、 ・音節部分が含まれていないこと ・なるべく後ろの方であること となります。 また、-b は -g のときのグラフの横軸や、-v のときに最後に出力され る切りだし情報の単位がブロック数になります。 なお、1 文字のオプションは、-gvk のように連続して書くことも可能で す。 [b] 定義されている定数の変更 -d [n] : 分割数 (2<=n<=9, default: 3) -m [n] : 最小識別長 (ミリ秒/ブロック数: default: 1.000000/5) -l [n] : サンプル音声の再生長 (ミリ秒/ブロック数: default: 500/4000) -d で選択肢の数を最大 9 まで増やすことができます。ただし、あまり 大きくしても早く頭出しが終るとは限りません。 -m で指定した値は、それより選択肢間の距離が短くなると自動的に終了 する、という値になっています。 -l は、単純音、各サンプル音の長さを指定します。通常は 500 ミリ秒 (=0.5 秒) です。 なお -b を指定したときには、この -m, -l の単位もブロックになりま す。しかし、WAV, AIFF の場合も -l のブロック数のデフォルトの値は 4000 なので、サンプリング周波数によっては短すぎる値になります。 よって、WAV, AIFF の場合に -b を指定するときは -l としてサンプリ ング周波数の半分くらいの数字 (= 0.5 秒) などをしていするようにし てください。 [c] ファイル、コマンド等の指定 -o [file] : 出力ファイル (default: 標準出力) -tmp [dir]: 作業ディレクトリ (default: /tmp) -sh [file]: 単純音の音声ファイル名 (default: poo) -sn [file]: 無音部分として使用する音声ファイル名 (default: empty) -sp [comm]: 音声ファイルの再生コマンド (default: "| auplay") 出力はデフォルトでは標準出力なのでリダイレクトしてファイルを作る ことができますが、-o で指定することもできます。なお、特別に次のよ うな指定もできるようにしてあります。 -o - ==> 標準出力 -o + ==> 出力をしない 各サンプル音は一度 ausubstr で切り出してそれを auconn で繋げてい ます。その切り出した音声ファイルはデフォルトでは /tmp を使います が、同じマシン上で 2 つの auslcut を起動されると作業ファイル名が 重なりますので誤動作の原因となります (本来は作業ファイル名の方を 何とかすべきなのでしょうが...)。その場合は -tmp . のようにして一時ファイルをカレントディレクトリに作るようにしてく ださい。 音声の連結は auconn, wavconn, aiffconn などを使用していますので、 そちらに設定してあるデータファイルのサーチパスに poo.au, empty.au などの音声ファイルがある場合はそれが使われます。よって .au なども 不要です。そうでない場合は -sh, -sn で音声ファイルのパスを指定し てください。 音声の再生コマンドは、yomi の -ap オプションと同じです。「3.2. オ プションの詳細」の [b] を参照してください。 なお、wavslcut, aiffslcut の実態は auslcut へのリンクなのですが、 コマンド名をみて -ap のデフォルトの値は変わるようになっています。 そして、コマンド名が auslcut, wavslcut, aiffslcut のいずれでもな い場合は -au/-wav/-aiff の、音声形式の選択オプションも指定できるようになっています。 4.3. スクリプトの less (shless) ------------------------------- これは、yomi で読ませるときは、前に読んだところに戻れない、という ことを解消するために作ったミニツールです。 % shless [script file] とすると、csh のスクリプトファイルを一行表示してそれを実行し、キ ー入力待ちの状態になります。[script file] として "-" を指定すると 標準入力から読みます。 オプションは % shless (-s|-v|-c|-a) (-x) [script file] で (version 0.7 以降)、-s,-v,-c,-a はこのうち一つを指定しますが、 -x を含めて、これらは実行中に切替えることができます。オプションの 意味は -s: 画面表示なし -v: 実行する行を表示 (default) -c: "#shless:" で始まるコメント行を、実行行の代わりに表示 -a: -v と -c の両者を表示 -x: 表示はするが、実際の実行はしない (default: 実行する) です。実行中のキーの意味は次の通りです (以下のキーを打った後、 [return] を打ちます)。 [space] : 次の行 (または単に [return]) r : 今の行 ([num])n : ([num] 行) 次の行 ([num])b : ([num] 行) 前の行 g : 最初の行 G : 最後の行 h : キー一覧表示 s,v,c,a : 表示切替え (起動時オプションに同じ) x : 実行 (する/しない) のトグルスイッチ q : 終了 [script file] の '#' で始まる行はコメント行とみなして実行をとばし ます。実際には各行を system() で実行しているだけです。 yomi と組み合わせるときは % yomi -d [テキストファイル] | shless - のようにします。 また、実行する行の上の行に "#shless:" で始まる行があると、それを その下の実行行に対するコメント行として認識し、-s オプション時には 実行行の代わりにそのコメント行の内容の方を画面表示するようになり ます。例えば、 #shless:これはテストです。 auconn ko re ha te su to de su > /dev/audio のようなファイルを shless に -c オプション付で実行させると [1] これはテストです。 と表示しながら音声出力を行うようになります。yomi -d のときに、通 常の実行画面出力を "#shless:" つきで出力させるオプション -sh を使 って % yomi -sh -d [テキストファイル] | shless -c - とすれば、通常の yomi と同様の画面が見れながら実行できます。これ は yomi の -s オプションよりは、少しだけ便利です。 テキストファイルの元々の行の表示が、yomi version 0.9 からサポート され、これにより shless でも元々の行を表示できるようになりました。 yomi の -r オプションを使用して 0.8 以前のものと互換表示の機能を 使うと、shless 用の出力も古い形式の出力、すなわち、一度 kakasi を 通して変換された行が出力されるようになります。 4.4. 音声データ情報表示ツール (aufinfo) --------------------------------------- ausubstr は、データのブロックサイズ長を指定して切り出しを行います が、そのためにはまず全体の長さを知る必要があります。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. 技術情報 ----------- 5.1. 動作の流れ --------------- yomi の動作の詳細については perl のソースを見てください。 基本的に、次のように動作しています。 [a] kakasi で漢字をひらがなに変換し、文章を単語毎に区切る [b] 各単語を分類 [c] 分類された単語を音声ファイル名に分割し、コマンドラインを生成 [d] そのコマンドラインの実行 [a] の kakasi の部分、デフォルトでは kakasi -JH -kH -KH -Ea -s -f のようなオプションをつけてフィルタとして使っていますが、これには 少し理由があります (注: 実際には -u -oeuc もつけていますが、これ は別な理由からで、以下の話には無関係です)。 例えば 「私の勤め先は新潟工科大学です。」 は、 (1) kakasi -JH ==> わたしのつとめさきはにいがたこうかだいがくです。 (2) kakasi -JH -s ==> わたし の つとめさき は にいがた こうかだいがく です 。 (3) kakasi -JH -f ==> 私[わたし]の勤め先[つとめさき]は新潟[にいがた]工科大学[こ\ うかだいがく]です。 (4) kakasi -JH -s -f ==> 私[わたし] の 勤め先[つとめさき] は 新潟[にいがた] 工科大学[\ こうかだいがく] です 。 のようになります。(1) のひらがなだけの列だと間を入れることができ ません。(2) のひらがなに空白が入ったものだと、空白を間に置き換え れば確かに間が入りますが、それだと、「わたし」と「の」の間、「つ とめさき」と「は」の間にもいらない間が入ってしまうことになります。 よって、「漢字」+「ひらがな」の間を抜くために -f を使っているので すが、(3) ではやはり処理が面倒なので、(4) の出力を利用しています。 (4) の出力を空白区切りで単語と見なし、"[ひらがな]" で終っている単 語は漢字と見なし、「漢字」+「ひらがな」は間を入れない、という処理 を行っているわけです。もちろん、漢字の部分は "[ひらがな]" の部分 を見て音声ファイルに割り当てます。 単語は、[b] で 句読点、ひらがな、漢字、数字、(数字)、記号 の 6 種類に分類しています。これらに合わなかった単語はエラーとなり ます。 [c] でそれらを音声ファイルに割り当てる作業をします。 5.2. 音声ファイルへの割り当て処理 --------------------------------- 句読点は句点と読点に分け、それぞれ長めの間、短めの間に変換します。 なお、間は auconn を実行しないのではなく、無音状態の音声ファイル を用意し、それらに割り当てています。そうでないと間がマシンの状態 によってまちまちになりますし、音声ファイル前後の雑音が入るからで す。無音の間を含ませて行単位で連結を行うわけです。 ひらがなは、濁音 (だ) や 拗音 (ゃ) などを含む場合の合字を行い、音 声ファイルに割り当てます。促音 (っ) は短い間で置き換え、長音は直 前のひらがなの母音を続けます。よって音声データには単なる 50 音だ けではなく、濁音、拗音などを含む音などのデータも用意する必要があ ります。必要なデータの表は後で記します。 数字は、整数部分と小数部分に分け、整数部分は 4 桁ずつに分け、各 4 桁を "なんぜんなんびゃくなんじゅうなん" という文字列に直し、それ にその 4 桁に対応する位名 (万、億、兆) などを割り当てています。あ まり大きなものは必要なしと考え、現在は "京" までしかサポートして いませんが、原理的には 「9999 無量大数」までサポートすることは可 能だと思います。小数部分は単に "てん" を読んでから、後に続く数字 を一音一音数字のファイルに割り当てていくだけです。 ただし、数字の「十兆」は、本来「じゅっちょう」とすべきですが、そ れは上の方法のため、「じゅうちょう」となるようになっています。修 正はそう難しいものでもないので、兆よりもっと大きい桁までサポート することがあればいっしょにやろうと思っています。 なお、数字は、例えば "3" を「さん」にしているのではなく、3.au と いう、「さん」の音の入った音声ファイルを用意しています。これはそ うしないと数字の読みが間延びするからです。そして、音の読みの例外、 すなわち 、 "300" ==> "さんびゃく" (百が濁る) "600" ==> "ろっぴゃく" (六が促音に、百が半濁音に変化) "800" ==> "はっぴゃく" (同上) "3000" ==> "さんぜん" (千が濁る) "8000" ==> "はっせん" (八が促音に変化) はそれ専用の音声データを用意し、さらに、「じゅう」「ひゃく」「せ ん」も専用の音声データを使用します。これにより、数字は割と高速に 読めます (注: version 0.6.2 より、数字用の音素を使用せず、数字を 全部ひらがなに直して実行することも可能になりました)。 記号は、本来時と場合により読みが変わるのが自然なのですが、ここで はその処理はしておらず、記号に固定されたひらがな文字列を割り当て ていて、そのひらがな文字列を読ませています。それは yomi の中の %Char = ( '[', 'だいかっこ', ']', 'だいかっことじる', '(', 'しょうかっこ', ')', 'しょうかっことじる', '{', 'ちゅうかっこ', '}', 'ちゅうかっことじる', '@', 'あっとまーく', '&', 'あんぱーさんど', ... の連想配列の中で行っているので、この文字列を変えれば固定の読みは 変えることができます。ただし、アルファベットは別で、アルファベッ トはそれらに対する専用の音声データを持っていてそれを使用します。 ひらがなにするとそれらしく聞こえない、ということと、高速化のため にそうしています (注: version 0.6.2 より、アルファベット用の音素 を使用せず、アルファベットを全部ひらがなに直して実行することも可 能になりました)。 なお、アルファベットの B と D は聞き分けにくい (^^; ので、例えば A,B,C,D の成績の読み合わせなどには向きません。よって、そのような 必要がある場合には、音声ファイルを作り直すか、元のデータファイル を変換してください。私はそのような場合は、sed を使って元のファイ ルの方を sed 's/[Dd]/でい/g' のようにして 'D' と 'd' を "でい" に変換してから yomi にかけてい ます。 5.3. 音声データ表 ----------------- yomi のソースを見ればだいたい分かりると思いますが、yomi が使用す る必要な音声データを表にして紹介します。ファイル名の拡張子 ".au" は省略します。 (1) ひらがな (連想配列 %H2a{}) 読み|file 読み|file 読み|file 読み|file 読み|file 読み|file ----+---- ----+---- ----+---- ----+---- ----+---- ----+---- あ |a か |ka さ |sa た |ta な |na は |ha い |i き |ki し |si ち |chi に |ni ひ |hi う |u く |ku す |su つ |tsu ぬ |nu ふ |hu え |e け |ke せ |se て |te ね |ne へ |he お |o こ |ko そ |so と |to の |no ほ |ho 読み|file 読み|file 読み|file 読み|file ----+---- ----+---- ----+---- ----+---- ま |ma や |ya ら |ra わ |wa み |mi ゆ |yu り |ri を |o む |mu よ |yo る |ru ん |n め |me れ |re も |mo ろ |ro 読み|file 読み|file 読み|file 読み|file 読み|file ----+---- ----+---- ----+---- ----+---- ----+---- が |ga ざ |za だ |da ば |ba ぱ |pa ぎ |gi じ |zi | び |bi ぴ |pi ぐ |gu ず |zu | ぶ |bu ぷ |pu げ |ge ぜ |ze で |de べ |be ぺ |pe ご |go ぞ |zo ど |do ぼ |bo ぽ |po 読み|file 読み|file 読み|file 読み|file 読み|file 読み|file ----+---- ----+---- ----+---- ----+---- ----+---- ----+---- きゃ|kya しゃ|sha ちゃ|cha にゃ|nya ひゃ|hya みゃ|mya きゅ|kyu しゅ|shu ちゅ|chu にゅ|nyu ひゅ|hyu みゅ|myu きょ|kyo しょ|sho ちょ|cho にょ|nyo ひょ|hyo みょ|myo 読み|file 読み|file 読み|file 読み|file 読み|file ----+---- ----+---- ----+---- ----+---- ----+---- りゃ|rya ぎゃ|gya じゃ|ja びゃ|bya ぴゃ|pya りゅ|ryu ぎゅ|gyu じゅ|ju びゅ|byu ぴゅ|pyu りょ|ryo ぎょ|gyo じょ|jo びょ|byo ぴょ|pyo 読み|file 読み|file 読み|file ----+---- ----+---- ----+---- ふぁ|fa てぃ|ti でゅ|dyu ふぃ|fi とぅ|tu っ |ttsu ふぇ|fe じぇ|je ー |error ふぉ|fo でぃ|dyi (注: "でぃ" は version 0.6.4 で追加) 最後の「っ」は、短い空白を使用し、「ー」はエラーとしていますので、 error.au は適当に作ってください (何でも結構です)。 (2) 数字 (ベタ読みの場合は連想配列 %NumBeta{} を使用) 読み|file 読み |file 読み |file 読み |file ----+---- ------+---- ------+---- ----------+---- ぜろ|0 ご |5 じゅう|10 さんびゃく|300 いち|1 ろく |6 ひゃく|100 ろっぴゃく|600 に |2 なな |7 せん |1000 はっぴゃく|800 さん|3 はち |8 さんぜん |3000 よん|4 きゅう|9 はっせん |8000 (3) アルファベット (ベタ読みの場合は連想配列 %AlphaBeta{} を使用) ファイル名は A.au から Z.au の 26 file です。 (4) 空白、促音 (っ) これは付属のものをそのまま使えばいいでしょう。 意味 |file ------+---- (空白)|null 促音 |ttsu この 2 つは実は同じもので、auconst を使って % auconst -s 7e -n 2000 > null.au ; cp null.au ttsu.au として作ったものです。 6. その他 --------- (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)。 (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 での音声デー タの作成ツールがあれば、視覚障害者にも使えるツールになる可能性も あるのではないかと期待しています。 7. バグリポート、ライセンス --------------------------- このツール群は無保証です。しかし色々な不具合は、対応できるものは 行う予定ですので、不具合の報告、意見などは歓迎します。報告等は下 記メールアドレスへお願い致します。また、バグリポート等、各種情報 は、順次下記 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 に準じたライセンスとしたいと思いま すが、まだそこまで厳密には考えていません。 8. 謝辞 ------- このツールの改良に関して、研究室の 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 以降の改良に関しては、研究室の 2000 年度の 4 年生船橋崇将君 に主にお世話になっています。彼との意見交換の中で色々な改良のアイ デアを出して頂いています。そして、0.10 で取り入れられた CUI 環境 での編集が可能な頭出しツール auslcut, wavslcut, aiffslcut は彼の 卒業研究によるもので彼との合作です。本当にどうもありがとうござい ました。 9. 変更履歴 ----------- 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 の作成。 10. 目次 -------- 1. introduction 1.1. 概要 2. install 2.1. FreeBSD の場合の簡単な説明 2.2. 動作環境 2.3. Makefile の修正 2.4. コンパイルとインストール 2.5. 設定 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.2. 音声データ編集ツール 4.2.1. auconst, auhz, wavhz, aiffhz 4.2.2. aucut 4.2.3. ausubstr, wavsubstr, aiffsubstr 4.2.4. wavdiet, aiffdiet 4.2.5. auslcut, wavslcut, aiffslcut 4.2.5.1. 準備 4.2.5.2. 使い方 4.2.5.3. オプション 4.3. スクリプトの less (shless) 4.4. 音声データ情報表示ツール (aufinfo) 5. 技術情報 5.1. 動作の流れ 5.2. 音声ファイルへの割り当て処理 5.3. 音声データ表 6. その他 7. バグリポート、ライセンス 8. 謝辞 9. 変更履歴 10. 目次 +=================================================+ 竹野茂治 〒945-1195 新潟工科大学 情報電子工学科 shige@iee.niit.ac.jp TEL(&FAX): 0257-22-8161 +=================================================+