Skip to content

h7ga40/HTS_Engine_GR-MANGO

Repository files navigation

OpenJTalk for GR-MANGO

OSSの音声合成ソフトOpenJTalkのエンジンhts_engine APIGR-MANGOで動かしたサンプルプログラム。 (その後、OpenJTalkも組込みました。)

MbedライブラリとMbed Library for GR-Boards mbed-gr-libsを使用し、SSIF loop back sampleを改造して作りました。

!注意!

RZ/A2Mに関するテクニカルアップデートによりOctaRAMは8MByteまでしか使えてませんでした。

ビルド方法

ビルドにはe² studioを使用します。

  • e2 studioを起動

    e2 studioを起動

  • 「プロジェクトをインポート…」をクリック

    プロジェクトをインポートをクリック

  • 「プロジェクトをワークスペースへ」を選択して「次へ」

    プロジェクトをワークスペースへ

  • ダウンロードしたzipフィルを選択して「終了」

    e2 studioを起動

  • ビルド

    左領域の「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にも、変更内容の一部を詳しく書きました。

HTS Engineの省メモリ化

  • 「double」型を「float」型に変更。
  • シンセサイザの各ステップで、参照しなくなった前ステップのメモリを解放。
  • シンセサイザの最終ステップ「HTS_gstream.c」で、合成したPCMデータを全てをメモリに置かず、部分的なバッファのサイズに変更。
  • malloc/freeでOctaRAMを使用するよう「HTS_calloc」「HTS_free」の実装を変更。

MBedのGR-MANGOポーティング部

  • 標準のブートローダーはOctaRAMが8MBになっているため、「mbed_sf_boot.c」で16MBになるよう変更。
  • スタックが足らなかったため「mbed_config.h」の「MBED_CONF_RTOS_MAIN_THREAD_STACK_SIZE」を「16384」に変更。

SSIF loop back sample

  • HTS Engineの呼び出しを追加。
  • マイクからの入力では無く、HTS Engineからの合成結果で音声出力するよう変更。

OpenJTalkのmmap処理変更

  • mmapは使えないので、ファイルを全てメモリに読み込むようになっているが、sys.dicファイルはサイズが100MByte近くあるので、値が必要な場合は随時ファイルから読み出すように変更。

ライセンス

ライセンスはそれぞのをファイルにある記載を確認してください。

変更部分があるので、注意してください。

変更内容については、自由に使ってください。