Open JTalk 1.07 への移行
Open JTalk 1.06 では音響モデルのファイル形式が変更されました。
MMDAgent はまだ Open JTalk 1.05 ベースのままなので、いままで提供していた mei の話者データがこのままでは使用できません。
新しいファイル形式は複数のファイルを一つの .htsvoice にまとめています。また、内部のバイナリデータがビッグエンディアンからリトルエンディアンに変更されています。
ツールを自作してファイル変換してみたのですが、うまく動作しないため、エンディアン以外にも変更が必要と思われます。
引き続き調査します。
マーチン@まほろば です。
以下のサイトに、takayanさんが、変換ツールをアップしてくれています。
http://neu101.seesaa.net/article/316259910.html
まだ使ってみてはいませんが、参考にならないでしょうか。
ご教示ありがとうございます。
MMDAgent_Example-1.3.1 の mei_normal を htsvconv002 で変換して Open JTalk 1.06 で使えることを確認できました。
Open JTalk 1.07 と MMDAgent 1.4 がリリースされました。
http://open-jtalk.sourceforge.net/
Open JTalk 1.06 用の話者モデル mei が MMDAgent で提供されなかったため(非公式な対応方法はあったのですが) Open JTalk 1.06 へのアップデートを見送っていました。
MMDAgent と合わせて調査して、JTalk のアップデートを再検討します。
これまで使っていた旧バージョンの話者モデル 16KHz 音声の lite も提供できたほうがよいので、やはり話者モデルフォーマットの変換は何かしら必要かも知れません。
takayanさんの htsvconv002 を以下のように修正すれば、いままで使ってきた lite の話者モデル(サンプリングレートが 16KHz だったときの Open JTalk 用の m001 の旧モデル)を、最新の htsvoice フォーマットに変換できて、 Open JTalk 1.07 で動かせることを確認しました。
スペックの低いマシンで 48KHz の JTalk はやはり重いため、この方法で今後も lite をサポートしたいと思います。
diff --git a/Program.cs b/Program.cs index 4ac87d3..d70979b 100644 --- a/Program.cs +++ b/Program.cs @@ -7,8 +7,8 @@ using System.Collections.Generic; public class HTSVoiceConverter { // global const - private static string[] stream_type = { "MCP", "LF0", "LPF" }; - private static string[] stream_name = { "mgc", "lf0", "lpf" }; + private static string[] stream_type = { "MCP", "LF0" /*, "LPF" */ }; + private static string[] stream_name = { "mgc", "lf0" /*, "lpf" */ }; private static string fullcontext_format = "HTS_TTS_JPN"; private static string hts_voice_version = "1.0"; private static string fullcontext_version = "1.0";
config.txt
SAMPLING_FREQUENCY=16000 FRAME_PERIOD=80 ALPHA=0.42
NVDA 日本語版の JTalk ドライバーを Open JTalk 1.07 に合わせて書き直した作業の成果を python-jtalk として独立させることにしました。
https://bitbucket.org/nishimotz/python-jtalk/
この実装は Open JTalk に合わせて(NVDA のライセンスと矛盾しない)修正BSDライセンスで公開します。
開発者向けのドキュメント整備、Windows 以外の環境でのビルドや動作確認も予定しています。
NVDA 日本語チームの成果を他のプロジェクトで活用しやすくすることで、 Python から Open JTalk を利用する開発者が増えることを期待しています。
いままで Open JTalk を安定させて動かすため、また NVDA が必要とする機能を実装するために Open JTalk と HTS Engine API にいろいろなパッチをあててきましたが、そのために Open JTalk オリジナル版の更新を簡単に取り込むことができなくなっていました。
Open JTalk がいままでリリースを重ねて改良が進んだことをふまえて、今後 NVDA 日本語版の開発を引き継いでくれる人が(もし見つかったとしても)苦労しないように、オリジナルのソースをなるべく書き換えない方針をとりたいと考えています。
wav ファイルの出力やオーディオデバイス制御は pyaudio ライブラリに依存しています。
今日公開したソースは、フレームシフトの変更で速度を変える処理まで実装しています。 おそらく NVDA の音声ドライバーを提供するにあたって「高さ」と「抑揚」の変更を実装する必要があり、何らかのパッチが必要になるのですが、前述の方針で引き続き検討します。
ブランチ jtalk107 での作業がまとまったので、テスト版を作りました。
https://dl.dropboxusercontent.com/u/62564469/nvda_jpbeta140109.exe
このバージョンには jtalk と jtalk107 の2種類の日本語音声エンジンがあり、 テキスト解析辞書は共通です(更新していません)が、jtalk1.07 ドライバーは JTalk のコアライブラリを Open JTalk 1.07 ベースに差し替えて、 話者モデルも新しいフォーマットのデータを採用しました。
抑揚と高さをサポートするために nmake の中でパッチをあてる方法を採用しました。 このパッチは前述コメントの python-jtalk レポジトリにありますが、 いずれ git のサブモジュールとして統合したいと思います。
このテスト版で JTalk107 ドライバーを評価していただき、問題がなさそうなら、 現在の JTalk ドライバーは新しいドライバーで置き換える予定です。
単語によってすこしイントネーションが変わっているような気がしますが、 まだテキスト解析辞書を Open JTalk 1.07 ベースに置き換えていないので、 今後もイントネーション処理は変わる可能性があります。
残念ながら m001 で長文を読み上げるとおかしくなる不具合が直っていないので、やはり jpcommon_label.c にパッチをあてることを検討します。
本件については takayanの雑記帳 でも指摘されています。
ブランチ jtalk107 のテスト版ですが、長文の読み上げ不具合修正版 jpbeta140109a をビルドしました。
https://dl.dropboxusercontent.com/u/62564469/nvda_jpbeta140109a.exe
音声エンジンのコアライブラリ libopenjtalk.dll は nvdajp レポジトリにコミットされていませんが、最新の python-jtalk レポジトリ(jpcommon_label.c にパッチをあてる処理を追加)で build.cmd を実行した結果になっています。
これはいずれ miscdep のサブモジュールとして統合する予定です。
JTalk ドライバーを 1.07 版に入れ替えて python-jtalk をサブモジュールとして統合しました。
To ssh://git@bitbucket.org/nvdajp/nvdajp.git 5046598..9e83fd3 jtalk107 -> jtalk107
サブモジュールの中にさらにサブモジュールがある場合の操作:
が必要です。
jpbranch にマージしました。
NVDA日本語テスト版 jpbeta140116
https://dl.dropboxusercontent.com/u/62564469/nvda_jpbeta140116.exe
前回のテスト版で一時的に追加した jtalk107 ドライバーは削除されました。 JTalk ドライバーが新しいバージョンのドライバーです。
以下の課題が残っています。
旧バージョンのファイル(下記)を nvdajpmiscdep から削除しました。
_jtalk_core.py _nvdajp_jtalk.py _nvdajp_predic.py
NVDA 2012.3.jp は Open JTalk 1.05 ベースの JTalk 音声エンジンを提供しています。
2012年12月に Open JTalk 1.06 が公開されたので、移行を検討しますが、点訳エンジンのテキスト解析も JTalk に依存しているので、時間をかけて行いたいと思います。
http://open-jtalk.sourceforge.net/
2013年12月25日:ターゲットを 1.06 から 1.07 に更新しました。