Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Buildしたものだと音声がでない #4

Open
alice251 opened this issue May 17, 2022 · 6 comments
Open

Buildしたものだと音声がでない #4

alice251 opened this issue May 17, 2022 · 6 comments

Comments

@alice251
Copy link

Unity 2020.3.3.11f1を使用
Unityはwindows
ビルドするプラットフォームはPC,MAC&LinuxStandaloneを選択 ターゲットプラットフォームはWindows
Unityのプロジェクト上では音声合成されて動作するシーンをBuildすると音声が出ない状態です。
Apiは .Net4.xに変更してます。
Buildしたものだと音声がでない原因は何かありますでしょうか?

@rarafy
Copy link
Owner

rarafy commented May 17, 2022

お世話になっております。 @alice251 様がご指摘のように、たしかにビルドすると動かなくなっていますね。夜にでも詳しい原因を調査してみます。今しばらくお待ちください。

image

@rarafy
Copy link
Owner

rarafy commented May 17, 2022

恐らくなんですが、 #1 と同様に実行時パスを直接指定すれば解決する可能性がありますね。
これも夜に確認してみます

@rarafy
Copy link
Owner

rarafy commented May 17, 2022

@alice251
お世話になっております。こちらの問題ですが、当面2通りの解決方法がございます。


1. Cドライブ直下に追加ファイルを置く

open_jtalk.zip をダウンロードし、Cドライブ直下に配置する。C:\open_jtalk\bin となるように配置してください。

image

2. 実行時パスを直接指定する

Streaming Assetsにファイルを含むよう設定し、 #1 と同様に実行時パスを直接指定する。(おそらく public JTalkTTS(String voicePath = "mei_happy", String dicPath = "StreamingAssets/OpenJTalkForUnity/dll/dic_utf_8", String voiceDirPath = "StreamingAssets/OpenJTalkForUnity/dll/voice") などとなるはずです。)

もしくは、ビルド後に手動でフォルダを作ってexeファイルと同階層にdicファイル(上記zipファイル内のdic_utf_8ファイル)とvoiceファイルを置くという解決方法もあります。

image


ちなみにdicファイルとvoiceファイルの判定方法については

voiceDir 音響モデルフォルダの優先順位

  1. 引数による指定
  2. カレントフォルダの設定ファイルによる指定
  3. カレントフォルダの音響モデルフォルダ
  4. 親フォルダの音響モデルフォルダ
  5. (win) 共有ライブラリのあるフォルダの設定ファイルによる指定(カレントフォルダに設定ファイルがないとき)
  6. (win) 共有ライブラリのあるフォルダの音響モデルフォルダ
  7. (win) 共有ライブラリの親フォルダの音響モデルフォルダ
  8. 標準の音響モデルフォルダ(インストールフォルダの音響モデルフォルダ)
    音響モデルフォルダの名前はvoiceフォルダ、voiceで始まるフォルダ、hts_voiceで始まるフォルダの順で探す。
    ※冒頭に(win)とある項目はWindows限定。

dic 辞書フォルダの優先順位

  1. 引数による指定
  2. カレントフォルダの設定ファイルによる指定
  3. カレントフォルダの辞書フォルダ
  4. 親フォルダの辞書フォルダ
  5. (win) 共有ライブラリのあるフォルダの設定ファイルによる指定(カレントフォルダに設定ファイルがないとき)
  6. (win) 共有ライブラリのあるフォルダの辞書フォルダ
  7. (win) 共有ライブラリの親フォルダの辞書フォルダ
  8. 標準の辞書フォルダ(インストールフォルダの辞書フォルダ)
    辞書フォルダの名前はdic_utf_8フォルダ、dicで始まるフォルダ、open_jtalk_dic_utf_8-で始まるフォルダの順で探す。
    ※冒頭に(win)とある項目はWindows限定。

    このとき辞書データがUTF-8エンコード向けかどうか、 unk.dic の先頭から40バイト目の文字列で簡単な確認が行われ、エンコードが違えば、そのフォルダに辞書は存在しないと見なす

といった順で処理が行われています。



原因は特定出来ましたが、完全な修正にはPackageManagerによる方法を廃止する必要があり、概ね1ヶ月前後を要する見込です。まずは上記の一時回避策をお試し頂けますでしょうか。

ちなみにPackage Manager(git URL)での導入が廃止されたら不便・・・ですよね。UPMにStreaming Assetsを含める方法について調査してみます。

どうしてもUPMにStreaming Assetsを含むことは出来ないようです。完全な修正に向けては

  1. ビルド後に別途ディレクトリを配置して頂くか(この場合はReadMeに追記します)
  2. UPMを廃止してUnity Packageのみでの配布

のどちらかを考えています。どちらが良いでしょうか?ご意見お聞かせいただければと思います。

@alice251
Copy link
Author

alice251 commented May 17, 2022

ありがとうございます。
jtalk.csの書き換えて
C:\open_jtalk\binにファイルを置くのと
またはexeファイルと同階層にファイルを置くどちらでも
build後の音声合成での音声が出ました。
exeファイルと同階層にファイルを置くのが自分の用途には合ってました。

大変助かりました。ありがとうございます。

個人的には 、1.ビルド後に別途ディレクトリを配置して頂くか(この場合はReadMeに追記します)
でいいのではないかなと思います。

たぶんこれは全然別ものの話になってしまうと思いますが
スマホのandroidへのBuildはやりようによってできたりするのでしょうか?

@rarafy
Copy link
Owner

rarafy commented May 17, 2022

解決したようで何よりです。もし良ければReadMe.mdに直接追記しておいて頂けると助かります(たった数クリックでOSSコントリビュータを名乗れます!詳細な手順はこの辺の記事)。


AndroidへのBuildに関しては、適切な回答になってるかは分かりませんがテクニカルな解決方法が2つ、正攻法が1つあります。具体的には

  1. Do you plan to make it work on Mac or Ubuntu? #3 で載せたようにWine等のツールを使ってWindowsアプリをAndroidで動かす
  2. 本プログラムをサーバ側で動かしてAndroidと通信
  3. 本プログラムの元となった jtalkdllCMakeでAndroid向けにビルド してそのdllをご自分のアプリに組み込む

という3つの方法がすぐに思い付きます。ちょっと調べてみた感じでも 「Androidでおしゃべりコマンドを試す。」 などの記事がヒットするので、Android向けのC++ライブラリの出力は恐らく出来るはずです。AndroidはLinuxベースだったはずなので、Linux向けにビルドしたパッケージがそのまま使えるかもしれません。

@rarafy
Copy link
Owner

rarafy commented Oct 24, 2022

まだReadMeに追記してませんでした

@rarafy rarafy reopened this Oct 24, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants