こんにちは、長井です。
私はメールの文面やドキュメントを作成する際、かなりの割合で誤字脱字や記述ミスをしてしまいます。
誤字脱字がないか調べてくれるサイト等を使って確認しているのですが、完全に間違いを正してくれるわけではないので最後は自分で読んでチェックすることになります。
そこで日本語テキストを音声ファイルに変換して音読による文章校正ができたらと思い試してみました。
利用するのは「Open JTalk」というライセンスフリーのソフトウェアです。
※ サイトトップとサンプルデモページ
今回LinuxOS上でソースコードからコンパイルします。
その他のOSでは検証はしていませんが、WindowsOSの場合こちらで紹介されているようにMicrosoft Visual C++の環境を用意してインストールする方法があるようです。
また、MacOSの場合はこちらにインストール方法が紹介されています。
準備
必要なファイルをダンロード
Open JTalkはHTSという音声合成ソフトウェア上でテキストを日本語音声に変換します。
HTSを動かすため、hts_engine APIというライブラリを一緒にインストールします。
ダウンロードするファイルは以下になります。
hts_engine API(サイト)
- hts_engine_API-1.xx.tar.gz
Open JTalk(サイト)
- open_jtalk-1.xx.tar.gz(Open JTalk本体)
- open_jtalk_dic_utf_8-1.xx.tar.gz(辞書ファイル)
- hts_voice_nitech_jp_atr503_m001-1.xx.tar.gz(音響モデルファイル)
音響モデルは波形データを集めたもので、音声ファイルの元になります。
今回、上記のファイルを「~/Downloads」ディレクトリ以下にダウンロードしました。
ビルド・インストール
hts_engine APIのインストール
まずはhts_engine APIをビルド・インストールします。
1 2 3 4 5 6 |
$ cd ~/wrk $ tar xvf ~/Downloads/hts_engine_API-1.xx.tar.gz $ cd hts_engine_API-1.xx $ ./configure $ make $ sudo make install |
パッチの適用
Open JTalkインストールの前にパッチを適用します。これを当てないと作成される音声がところどころで間延びしてしまうようです(参考文献)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$ cd ~/wrk $ tar xzf ~/Downloads/open_jtalk-1.xx.tar.gz $ cd open_jtalk-1.xx/ $ cat << 'END' > manobi.patch *** jpcommon/jpcommon_label.c.orig 2012-12-24 17:18:53.000000000 +0900 --- jpcommon/jpcommon_label.c 2013-05-27 16:35:45.195252424 +0900 *************** *** 284,289 **** --- 284,290 ---- if (index == a) break; } + if (i > 3) i = 3; return i; } *************** *** 383,388 **** --- 384,390 ---- for (i = 0, index = m->next; index != NULL; index = index->next) i++; + if (i > 10) i = 10; return index_mora_in_utterance(m) + i; } END $ patch -p0 < ../manobi.patch |
Open JTalkのインストール
Open JTalkをビルド・インストールします。
1 2 3 |
$ ./configure --with-charset=UTF-8 $ make $ sudo make install |
各種データファイルの用意
辞書ファイルおよび音響モデルファイルを展開します。
1 2 3 4 |
$ tar xzf ~/Downloads/hts_voice_nitech_jp_atr503_m001-1.xx.tar.gz $ tar xzf ~/Downloads/open_jtalk_dic_utf_8-1.xx.tar.gz $ sudo mkdir /usr/local/share/open_jtalk $ sudo mv hts_voice_nitech_jp_atr503_m001-1.xx/ open_jtalk_dic_utf_8-1.xx/ /usr/local/share/open_jtalk/ |
実行
Open JTalkを実行します。まず適当な日本語の文章をテキストファイルに出力して、コマンド「open_jtalk」を実行します。
1 2 3 4 5 6 7 |
$ cat <<'END' > input.txt 今日もいい天気です。外で元気よく遊びましょう。 END $ cat input.txt | open_jtalk \ -m /usr/local/share/open_jtalk/hts_voice_nitech_jp_atr503_m001-1.xx/nitech_jp_atr503_m001.htsvoice \ -ow output.wav -x /usr/local/share/open_jtalk/open_jtalk_dic_utf_8-1.xx/ |
パラメータはそれぞれ「-m」が音響モデルファイルの場所、「-x」が辞書ファイル(ディレクトリ)の場所、「-ow」が出力先のファイルです。
作成されたoutput.wavを再生してみます。
上手くいっているようですね。ただ他のファイルで試してみると、改行を含む場合にそこで音声が途切れてしまうことが分かりました。
そこで次のようなシェルスクリプトファイルを作ってその中で改行を取り除いてやることにしました。
jtk.sh
1 2 3 4 5 |
#!/usr/bin/bash cat $1 | /usr/bin/tr -d '\n' | open_jtalk \ -m /usr/local/share/open_jtalk/hts_voice_nitech_jp_atr503_m001-1.xx/nitech_jp_atr503_m001.htsvoice \ -ow output.wav -x /usr/local/share/open_jtalk/open_jtalk_dic_utf_8-1.xx/ |
これで以下のようにして改行を含む文章も音声ファイルにすることが出来ました。
1 2 3 4 5 6 7 |
$ cat input.txt 吾輩は猫である。名前はまだ無い。 どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣 いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあ とで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。 $ sh jtk.sh input.txt |
結果作成されたファイルです。
これで日本語の文章を作成するときに音読による校正が出来るようになりました。
課題
今回試してみて以下の課題も見つかりました。
- 一度に処理する文字数が多いと大量のメモリを消費し作成途中で失敗する。
- 英単語が認識されずアルファベットの羅列になる。例えばプログラムコードを含む場合の音声が不自然。
英単語を含む文章の場合
input.txt
1 2 3 4 5 |
以下のプログラムを読み上げます。 public static void main (String[] args) { System.out.println("hello. Open JTalk!"); } |
input.txtを変換した結果
メモリ消費については入力ファイルを分割する等の改善が必要になりそうです。
英単語については単語ファイルを読み込むようにできないか等、検討していきます。
以上、今後も誤字脱字を無くして正しい日本語の文章を心がけたいと思います。
最後まで読んで頂きありがとうございました。