「音声合成やってみたいけど難しそうだなあ」
私もそう思っていました。
私が使おうとしたきっかけは、大量の青空文庫の書籍を機械に朗読させたいと思ったからです。
そこで、調べてみるとできるということが分かりました。
WindowsのノートPCでも時間を掛ければできるし、これはスゴイ!
ただ、実際のコードを追ってみると技術(言語特徴量抽出、音響特徴量予測、音声波形形成)の複合体なので実装はツラい。orz
さらに調べてみると、Pythonにttslearnというライブラリがあり、なんと6行程度で実装が可能・・・!
これはスゴイ。
それでは、今回は成果物を交えて音声合成の技術書を紹介します。
成果物
「日本語音声合成のデモです。」という短い文の音声を作成しました。
DNN
計算時間
数秒
参考コード
https://r9y9.github.io/ttslearn/latest/notebooks/ch06_Recipe-DNNTTS.html
感想
聞いたことある感じやな~
WaveNet
計算時間
03:54(PC1+GPU使用あり)
06:04(PC2+GPU使用なし)
参考コード
https://r9y9.github.io/ttslearn/latest/notebooks/ch08_Recipe-WaveNet.html
感想
「です」がちょっと違和感あるなあ。。
計算時間もかかるし、これはDNNの方がいいかな?
Tacotron2
計算時間
03:07(PC1+GPU使用あり)
04:51(PC2+GPU使用なし)
参考コード
https://r9y9.github.io/ttslearn/latest/notebooks/ch10_Recipe-Tacotron.html
感想
えっ・・・?すごくないコレ…?
めっちゃ自然やねんけど。
今回の参照本
ttslearnで利用されているモデルは非商用で使うことが可能です。ライセンスなどの詳細は公式サイトをご覧ください。
今回は3つのモデルのみ紹介しましたが、これが音声合成のすべてではありません。そのため、公式サイトに目を通してから利用されることを推奨します。
※過去からの積み重ねがあるので、そちらを読んでいただきたく。
※本を通読しましたが、数式に圧倒されるかもしれません。
エラー対応
Windows環境ではttslearnをインポートできない可能性があります。
そのため、その回避方法を下記に書いておきます。
openjtalk 0.1.3をダウンロード
pyopenjtalkからダウンロードします。
※バージョンが上がるとディレクトリ構成が違っているため、対応が難しいかもしれません。
config.hの編集
mecab/src/config.hを3点編集します。
/* #undef HAVE_WINDOWS_H */
を
#define HAVE_WINDOWS_H 1
/* #undef VERSION */
を
#define VERSION "1.10"
#define HAVE_DIRENT_H 1
を
// #define HAVE_DIRENT_H 1
pip install openjtalk
openjtalkの(setup.pyがある)メインディレクトリで、下記コマンドを実行します。
pip install -e .
pip install ttslearn
ttslearnがインストールできるはず!
エラー対応参考
https://github.com/r9y9/pyopenjtalk/issues/10
https://twitter.com/yamori81/status/1426918620676853769
機器情報
PC1
GALLERIA ZG Core i9 9900K/RTX2080/メモリ16GB K/08430-10a
ゲーム用タワーPC。一昔前のものだが、まだ現役で使えそう。
PC2
THIRDWAVE DX-T7
ノートPC。意外と計算速度が速かった。
青空文庫に関連するサービスについて
青空文庫関連の競合サービスは意外と少なく、文学作品を読める、人の朗読、Androidでの朗読・・・と色々あるものの、本を読む(聞く)間にある、さまざまな意思決定を円滑にする技術(文、音声、要約、検索、しおり、、etc)がどのサービスも所々抜けていて、中年層~ご老人に向けて刺さるような包括的なサービスになっていないので勿体ないなと。
しかもアクセス解析サイトで見てみると1サイトで月100万PV超えているものが複数。コレはびっくり…(@@;
移動時間でも、仕事前でも、就寝前でも、病院でも読める(聞ける)ようなサービスとなるとデバイスを問わないWebが一番楽ですかね。
ちょっと作ってみよう。
さいごに
今回は音声合成を試してみました。
Tacotron2のなめらかさには驚かれたかと思います。
それではまた~(^^ノ