2

TextToSpeech エンジンからの出力をアプリのキャッシュ ディレクトリに書き込みたいと考えています。TTS がそこに書き込むためには、まず書き込み権限を与える必要があります。しかし、方法がわかりません。FileDescriptor通常、このような問題は、特定のファイルへのアクセス許可を与えることで解決できることを理解しています。しかし、TextToSpeech.synthesizeToFile メソッドはファイル パスを文字列としてのみ受け入れるため、TTS ではそれを行うことはできませんFileDescriptor。じゃあ何をすればいいの?

TTS にはアプリのディレクトリへの書き込み権限がないことを強調するために、コードを次に示します...:

TextToSpeech mTts = new new TextToSpeech(context, this);
mTts.synthesizeToFile(text, null, getCacheDir() + "/" + "speech.wav");

そしてデバッガーのログ:

08-20 14:46:11.257: ERROR/TtsService(336): Can't create
/data/data/com.myorg.myapp/cache/speech.wav due to exception java.io.IOException: Permission denied
4

2 に答える 2

6

TextToSpeech.synthesizeToFile()は実際のデバイスでは機能しません。AVD でのみ機能します。

私も、オリジナルの Pico TTS エンジンとサードパーティの TTS エンジンの両方を使用して、sdcard または内部メモリ (root 化されたデバイス上) に書き込もうとして、これを試しています。

context.getDir("soundfiles", Context.MODE_WORLD_WRITEABLE);

ただし、ご指摘のとおり、メソッドはTextToSpeech.SUCCESS実際にファイルを作成せずに戻ります。

TTS 出力を WAV ファイルに録音する必要がある場合は、ヘッドセット出力を PC のサウンド カードの AUX 入力に接続し、録音ソフトウェアを使用してそれをキャプチャします。

于 2011-10-13T16:07:58.760 に答える
-1

TextToSpeech.synthesizeToFile() は実際のデバイスで実際に動作しますが、少し厄介です。私は同じ問題を抱えていましたが、最終的には機能しました。私が使用するコードは次のとおりです。

speakTextTxt = speakText.getText().toString();
HashMap<String, String> myHashRender = new HashMap<String, String>();
myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, UTTERANCE_SAVE_ID);

String exStoragePath = Environment.getExternalStorageDirectory().getAbsolutePath();
File appTmpPath = new File(exStoragePath + "/sounds/");
appTmpPath.mkdirs();
String tempFilename = "tmpaudio.wav";
tempDestFile = appTmpPath.getAbsolutePath() + "/" + tempFilename;

mTts.synthesizeToFile(speakTextTxt, myHashRender, tempDestFile);

しかし、今日、私は別の非常に奇妙なものを見つけました。別のコンピューターに切り替えて開発を行ったところ、同じエラー「java.io.IOException: Permission denied」が再び発生し始めました。次に、Android SDK Manager に入り、すべての「SDK Platform」と「Google APIs by Goole Inc.」を確認しました。パッケージはすべての Android バージョンにインストールされました。どのバージョンのパッケージで修正されたのか正確にはわかりませんが、再び機能しています。したがって、明らかに完全に優れたコードを作成できますが、問題を引き起こす可能性のある開発環境に何か問題がある可能性があります。これが誰かを助けることができることを願っています。

于 2012-01-16T20:58:39.717 に答える