2

次のスニペットを使用して、現在電話で使用可能な(および使用できない)すべての音声をログに記録しています。

ArrayList<String> availableVoices = intent.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
String availStr = "";
for (String lang : availableVoices)
    availStr += (lang + ", ");
Log.i(String.valueOf(availableVoices.size()) + " available langs: ", availStr);

ArrayList<String> unavailableVoices = intent.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_UNAVAILABLE_VOICES);
String unavailStr = "";
for (String lang : unavailableVoices)
    unavailStr += (lang + ", ");            
Log.w(String.valueOf(unavailableVoices.size()) + " unavailable langs: ", unavailStr);

ログに記録された結果は、私が複数の言語をインストールしていることを確実に知っており、TTSが話しているのを聞くeng-USAことさえできるので、なんとなく当惑していますが、ログには次のように表示されます。

1つの利用可能な言語:eng-GBR

30の利用できない言語:ara-XXX、ces-CZE、dan-DNK、deu-DEU、ell-GRC、eng-AUS、eng-GBR、eng-USA、spa-ESP、spa-MEX、fin-FIN、fra- CAN、fra-FRA、hun-HUN、ita-ITA、jpn-JPN、kor-KOR、nld-NLD、nor-NOR、pol-POL、por-BRA、por-PRT、rus-RUS、slk-SVK、 swe-SWE、tur-TUR、zho-HKG、zho-CHN、zho-TWN、tha-THA、

なぜこの一貫性のない動作なのですか?(eng-GBRは利用可能なリストと利用できないリストの両方に表示されることに注意してください...)

4

1 に答える 1

1

Android 2.xのテキスト読み上げに関する限り、それは西部開拓時代です。インストールされているすべてのサードパーティTTSエンジンは、チェックされているかどうかに関係なくEXTRA_AVAILABLE_VOICES、この関数の出力を自由に変更できます。デフォルトでチェックされていないか、選択/選択解除されています。

ハードコードされたPicoだけを残して、電話からすべてのTTSエンジンをアンインストールしようとしましたが、結果は私が期待したものと完全に一致します。

6つの利用可能な音声:deu-DEU、eng-GBR、eng-USA、spa-ESP、fra-FRA、ita-ITA、

0利用できない音声:

この関数の出力は、現在選択されている(つまりデフォルトの)TTSエンジンを動的に参照しますが、実際には、サードパーティのTTSエンジンがインストールされると、この関数の出力は無視されるため、意味がありません。任意の設定。

また、誤解を招く名前であることに注意してください。音声ではなく、使用可能な言語です。

私は、誰かがこれを困難な方法で発見する時間と苦痛を節約するのに役立つことを願って、この回答を投稿しています

于 2012-08-22T19:38:12.870 に答える