Pythonで音声合成の簡単実験
AquesTalk2 Win 版を使って音声合成の実験をしてみた。PCが声を出して喋るという行為はおもしろい。2つの別の声で同時発声させるともっとおもしろい。何かに使えないかなあ。ということで、メモしておく。
実験に使う音声合成エンジンについて
AQUEST社のホームページより
テキスト音声合成ミドルウェア
AquesTalk2は、テキストを音声に変換する日本語の規則音声合成ライブラリです。
組み込みシステムに適したライブラリであり、音声データとプログラムコードを含めても50Kバイト程度(12秒程度の固定音声メッセージを用意するのと同等のサイズ*)という他に類を見ないコンパクトなエンジンに仕上がっています。
ライセンスのところもちゃんと目を通しておく
非営利の個人利用では無償でご利用できます。
なお、ダウンロードしたPhontデータを使うと、声の種類も変更できます。実験でもやってみました。
実験環境
- Windows XP SP3
- Python 2.6.5
音声合成エンジンAquesTalk2をダウンロードする。
AquesTalk2は以下URLのDownloadリンクからダウンロードする。
http://www.a-quest.com/products/index.html
Windows XPの環境で実験するので以下ファイルを選択した。
- ソフト名: AquesTalk2 Win
- バージョン: 2.0.0.4
- パッケージ: aqtk2_100402.zip
音声合成に必要なファイルは、ダウンロードしたファイルを解凍してできるbinフォルダの中にある
AquesTalk2Da.dll
なので、これをこれから作るプログラムと同じディレクトリにコピーしておく。
同期タイプの音声合成
発声し終えるとプロンプトが戻ってくる。要するに、発声している間は何もできない。
#coding:cp932 from ctypes import windll aqtalk_dll = windll.LoadLibrary("AquesTalk2Da.dll") aq_playsync = aqtalk_dll.AquesTalk2Da_PlaySync aq_playsync('こんにちわ', 100, 0)
- aq_playsyncに渡す文字列の文字コードはcp932(Shift-JIS)でなければなりません。違う文字コードで渡すと何も発声しません。
-
音声合成した音
非同期タイプの音声合成
発声させると終了を待たずに、プロンプトが戻ってきます。つまり、発声中に次の仕事をさせることができます。同時に発声することも可能になります。
#coding:cp932 import time from ctypes import windll, byref aqtalk_dll = windll.LoadLibrary("AquesTalk2Da.dll") aq_create = aqtalk_dll.AquesTalk2Da_Create aq_play = aqtalk_dll.AquesTalk2Da_Play hdl = aq_create() aq_play(hdl, 'こんにちわ', 100, 0, 0, 0, 0) print 'Now Speaking' time.sleep(1)
- aq_createで音声合成エンジンのインスタンスを生成する
- aq_playにインスタンス、音声記号列、発声速度と、その他のパラメータは0を指定して実行する
- 1秒間スリープさせないと、発声する前にプログラムが終了してしまう。
2つの声を同時に発生させる
別の音声データ(aq_momo1.phont)を先ほどのダウンロードページからダウンロードし、解凍してプログラムと同じディレクトリに置く。
#coding:cp932 import time from ctypes import windll aqtalk_dll = windll.LoadLibrary("AquesTalk2Da.dll") aq_create = aqtalk_dll.AquesTalk2Da_Create aq_play = aqtalk_dll.AquesTalk2Da_Play f = open("aq_momo1.phont","rb") phont = f.read() f.close() hdl1 = aq_create() aq_play(hdl1, 'こんにちわ', 100, 0, 0, 0, 0) hdl2 = aq_create() aq_play(hdl2, 'ゆっくりしていってね', 100, phont, 0, 0, 0) print 'Now Speaking' time.sleep(3)
- 別の声で発声させるため、Phoneファイルをバイナリモードで読み込んでおく
- デフォルトの音声で「こんにちわ」と発声させ、aq_momo1の音声で「ゆっくりしていってね」と同時に発声する
- さきほどより長めにスリープさせて最後まで発声させる
-
音声合成した音(2声を同時発声)