OSSの音声合成ソフトOpenJTalkのエンジンhts_engine APIをGR-MANGOで動かしたサンプルプログラム。 (その後、OpenJTalkも組込みました。)
MbedライブラリとMbed Library for GR-Boards mbed-gr-libsを使用し、SSIF loop back sampleを改造して作りました。
RZ/A2Mに関するテクニカルアップデートによりOctaRAMは8MByteまでしか使えてませんでした。
ビルドにはe² studioを使用します。
-
e2 studioを起動
-
「プロジェクトをインポート…」をクリック
-
「プロジェクトをワークスペースへ」を選択して「次へ」
-
ダウンロードしたzipフィルを選択して「終了」
-
ビルド
左領域の「app_hts」を選択して、上部のトンカチボタンでビルドします。
-
プロジェクト参照
ビルドはMbedが含まれるため時間がかかるが、ライブラリとなっているので、アプリ部分「app_hts」の変更であれば、すぐに終わるはず。
ライブラリのソースを変えていないのに再ビルドが行われる場合は、プロジェクト参照を変更してください。
手順は「app_hts」の右クリックメニューで「プロパティ」を選択、右領域の「プロジェクト参照」を選択して、再ビルドが行われるプロジェクトのチェックを外してください。
-
プロジェクト構成について
Mbedは以下のプロジェクトに分割してあります。「mbed_os」「mbed_os_cpp」「mbed_os_lwipstack」「mbed_os_mbedtls」「mbed_os_nanostack」「mbed_os_nfc」。
これは、1つのプロジェクトにするとオブジェクトファイルが多すぎて、リンクコマンドが失敗してしまうためです。
各プロジェクトに*.cや*.cppを割り振っていますが、*.hはすべて「mbed_os」に置いてあります。ちょっと雑なファイル構成です。
マイクロSDカードに音響モデル(htsvoiceファイル)を入れる必要があります。
SDカードのファイル | 提供元 |
---|---|
nitech_jp_atr503_m001.htsvoice | OpenJTalk |
mei\mei_happy.htsvoice | MMDAgent |
mei\mei_normal.htsvoice | MMDAgent |
mei\mei_sad.htsvoice | MMDAgent |
dic\* | OpenJTalk |
htsvoiceファイルは下記のサイトからダウンロードしてください。
-
OpenJTalk
OpenJTalkから、次のようにフォルダ辿って「HTS voice」→「hts_voice_nitech_jp_atr503_m001-1.05」、「hts_voice_nitech_jp_atr503_m001-1.05.tar.gz」をダウンロードします。 「nitech_jp_atr503_m001.htsvoice」をSDカードのルートフォルダに入れます。
OpenJTalkを使う場合は、「Dictionary」→「open_jtalk_dic-1.11」と辿って、「open_jtalk_dic_utf_8-1.11.tar.gz」をダウンロードします。 「open_jtalk_dic_utf_8-1.11」フォルダの中身をSDカードの「dir」フォルダに入れます。
-
MMDAgent
MMDAgentから、「MMDAgent "Sample Script"」にある「Source code」をクリックしてダウンロードします。 「Voice\mei」フォルダをSDカードの「mei」フォルダに入れます。
RenesasさんのMbedのWikiに書いてある手順で、GR-MANGOだけでデバッグができます。
「app_hts.launch」を用意したので参考サイトの手順「New Configuration」を行わず「app_hts」を選択でも可能です。
Qiitaにも、変更内容の一部を詳しく書きました。
- 「double」型を「float」型に変更。
- シンセサイザの各ステップで、参照しなくなった前ステップのメモリを解放。
- シンセサイザの最終ステップ「
HTS_gstream.c
」で、合成したPCMデータを全てをメモリに置かず、部分的なバッファのサイズに変更。 - malloc/freeでOctaRAMを使用するよう「
HTS_calloc
」「HTS_free
」の実装を変更。
- 標準のブートローダーはOctaRAMが8MBになっているため、「
mbed_sf_boot.c
」で16MBになるよう変更。 - スタックが足らなかったため「
mbed_config.h
」の「MBED_CONF_RTOS_MAIN_THREAD_STACK_SIZE
」を「16384
」に変更。
- HTS Engineの呼び出しを追加。
- マイクからの入力では無く、HTS Engineからの合成結果で音声出力するよう変更。
mmap
は使えないので、ファイルを全てメモリに読み込むようになっているが、sys.dic
ファイルはサイズが100MByte近くあるので、値が必要な場合は随時ファイルから読み出すように変更。
ライセンスはそれぞのをファイルにある記載を確認してください。
変更部分があるので、注意してください。
変更内容については、自由に使ってください。