Ubuntu Weekly Recipe

第250回 Ubuntuに日本語を話してもらおう(前編)

この記事を読むのに必要な時間:およそ 3 分

今回から2回に渡り,Ubuntuで利用可能ないくつかのソフトウェアを組み合わせて,入力テキストを喋る仕組みを作るレシピをお届けします。Mbrola,MeCabを使って音声を合成し,Linuxのサウンドサブシステムを通じて音声を出力します。

MBROLAプロジェクトとは

MBROLAとは,汎用音声合成エンジン「mbrola」と,mbrolaで利用可能な音声データベースを開発するプロジェクトです注1)⁠1995年にベルギーのFaculte Polytechnique de Mons大学のTCTS研究室が開始しました。音声合成エンジンもデータベースもバイナリーの形で提供されているためオープンソースソフトウェアではありませんが,フリーなライセンス注2のもとで利用できます。

DebianやUbuntuではmbrolaのパッケージが提供されています。Ubuntuソフトウェアセンターでmbrolaを検索し,インストールしてください。

図1 UbuntuソフトウェアセンターでのMbrolaの検索結果

図1 UbuntuソフトウェアセンターでのMbrolaの検索結果

データベースのパッケージも提供されていますが,日本語話者の音声は提供されていません。Copying the MBROLA Bin and Databasesから,jp1(男声)⁠jp2(女声)⁠jp3(女声)のデータベースをダウンロードすることができます。

注1
Mbrolaのウェブサイトによると,テキスト音声合成を学ぶ学生に実践の機会を提供することが目的だったようです。入力テキストから音声を合成する処理のことをテキスト音声合成と言いますが,言語処理や信号処理,コンピューター科学の複雑な処理を含んでいます。そのエンジンの開発や改良に関係する敷居を下げたいということのようです。
注2
非商用,非軍事目的であれば自由に利用可能で,バイナリを変更しない限りは再配布も可能です。

Mbrolaの音声合成の仕組みと使い方

Mbrolaのデータベースは,⁠ふたつの音素が連続したひとつづきの音」をデータとして保持しています。あるテキストを発声させたい場合,テキストに加えて,発音させたい文字列を構成する音素と,いわゆるトーン情報(強弱や長短・イントネーション)を記述してMbrolaに読み込ませます。Mbrolaは音素から「ひと続きの音」をデータベースより取り出し,これにトーン情報を加味して波形を合成して音声を出力します。

なお,あるデータベースに収録されている録音データセットはデータベースごとにまちまちです。あるデータベースを用いて処理できた音素の連なりが,別なデータベースを用いると処理できないことがあります。

説明はここまでにして,実際に音声合成してみましょう。まず,次のコードをテキストに保存します。

h       75      0       250
a       75      0       250
tS      75      0       260
i       75      0       260
n       75      0       300
o       75      0       300
h       75      0       250
e       75      0       250
_       75

Mbrolaのデータベースが必要なので,jp1データベースの圧縮ファイルをどこかに展開しておきます。

次に端末を開きます。音声合成をするには次のコマンドを実行します。今回はテキストファイル名を「./hachinohe.pho」⁠jp1データベースへの相対パスを「./jp1/jp1」としましたが,読者の実行環境に応じて変更してください。

$ mbrola ./jp1/jp1 ./hachinohe.pho -.au | aplay

図2 合成した音声の波形をAudacityで表示した例。上の記号が「音素」を,その下の矢印が「2つの音素が連続したひとつづきの音」を表し,一番下に発音を表示した。表示は便宜的なものであり厳密なものではない

図2 合成した音声の波形をAudacityで表示した例。上の記号が「音素」を,その下の矢印が「2つの音素が連続したひとつづきの音」を表し,一番下に発音を表示した。表示は便宜的なものであり厳密なものではない

システムのサウンド出力から「はちのへ(八戸)⁠という男声が聞こえたら合成は成功です注3)⁠jp1ではなくjp3を使うと,今度は女声が聞こえると思います。データベースに同梱されているマニュアルを参照すると,jp1とjp3はほぼ同じ音素セットを用いていますが,jp2は異なるものを用いています。この「八戸」の例では問題ありませんが,データベースを変更すると,処理できる音素セットも変わる点に注意してください。

さて,Mbrolaに読み込ませるファイルのフォーマットは次のとおりです。

音素のアルファベット表記    発声の継続時間    ピッチペア

ピッチペアは発声のピッチを変化させるために用います。2つの数字からなり,1つ目で発音の継続時間におけるパーセンテージを,2つ目に周波数を記述します。ピッチペアは複数記述できるため,例えば次のようにするとビブラートのかかったような音声を合成することができます。うまく合成すれば歌唱を再現することもできるでしょう。

rr   150  0  265  50  250
a   3000  0  265   5  250  10  265  15  250  20  265  25  250  30  265
35  250  40  265  45  250  50  265  55  250  60  265  65  250  70  265
75  250  80  265  85  250  90  265  95  250
_     90

ここまでの結果から,テキスト音声合成にmbrolaを用いるには,テキストを解析して読みを抽出し,それを音素のリストに変換すればよさそうです。加えてテキストの解析結果を反映してピッチを調整すると,より自然な音声となるでしょう。

注3
ここではシェルの機能を使い,mbrolaの標準出力をパイプでaplayに送っている。aplayはALSAプロジェクトで開発されているサウンドプレイヤーで,⁠alsa-utils」パッケージに含まれている。Ubuntuではデフォルトでインストールされている。aplayは引数を与えないとシステムのデフォルトのサウンドカードに出力するが,Ubuntuの標準設定ではこれはPulseAudioとなっている。その結果,他のアプリケーションが音声を出力していてもミックスされてシステム出力となる。
なお,筆者が試した限りMbrolaのwavフォーマット出力はうまく扱えなかったため,今回は拡張子auを持つSunオーディオファイルフォーマットを用いた。

著者プロフィール

坂本貴史(さかもとたかし)

Ubuntuのマルチメディア編集環境であるUbuntu Studioのユーザ。主にUbuntu日本コミュニティとUbuntu Studioコミュニティで活動。いつかユーザ同士で合作するのが夢。

コメント

コメントの記入