android - 为什么不可用语音列表总是空的?

标签 android text-to-speech

Android 允许应用程序向平台查询语言文件的可用性:只需实例化下面的 Intent 并使用 startActivityForResult 方法在异步请求中发送它。

Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, TTS_CHECK_DATA_REQUEST_CODE);

上述请求的结果是通过调用onActivityResult方法返回的:第二个参数是表示上述请求成功或失败的值,第三个参数包含一些额外的数据。在附加数据中,有两个列表(可能为空):

  • 可用的语音;

    ArrayList<String> availableVoices = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
    Log.i(LOG_TAG, String.format("Available voices: %s %s", availableVoices.size(), availableVoices.toString()));
    
  • 不可用的声音。

    ArrayList<String> unavailableVoices = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_UNAVAILABLE_VOICES);
    Log.i(LOG_TAG, String.format("Unavailable voices: %s %s", unavailableVoices.size(), unavailableVoices.toString()));
    

在像上面所示的简单请求的情况下,不可用语音列表是空的,而可用语音数组填充了系统上安装的所有语音。

如果添加 TextToSpeech.Engine.EXTRA_CHECK_VOICE_DATA_FOR extra,行为会发生变化:根据文档,此 extra 用于向检查某些特定语音的 TTS 引擎提供指令。这是源代码示例:

ArrayList<String> checkVoiceDataFor = new ArrayList<String>(3);
checkVoiceDataFor.add("ita-ITA");   // installed on emulator
checkVoiceDataFor.add("eng-USA-female");  // not installed
checkVoiceDataFor.add("eng-USA");   // installed on emulator
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
checkIntent.putStringArrayListExtra(TextToSpeech.Engine.EXTRA_CHECK_VOICE_DATA_FOR, checkVoiceDataFor);

我希望响应包含:

  • ita-ITA 和 eng-USA 在可用语音列表中;
  • eng-USA-female 在不可用语音列表中。

然而,结果如下:

  • 可用语音:2 [eng-USA ita-ITA]
  • 不可用的声音:0 []

为什么?

最佳答案

对于不可用的语音,我使用以下方法:

    ArrayList<String> unavailable = data
            .getStringArrayListExtra("unavailableVoices");

结果始终采用“eng-GBR”格式或只是“eng”格式。

如果我误解了你的问题并且你想知道为什么你没有得到专门用于搜索“eng-USA-female”的“不可用”输出(而不是根本没有),那么我可以只建议格式不适合过去搜索。我建议搜索“zzz-ZZZ”以查看实际问题所在...

希望对您有所帮助。

关于android - 为什么不可用语音列表总是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10524980/

相关文章:

android - 在android中获取错误的网络接口(interface)?

java - Android 客户端/服务器 Socket 客户端未接收

android - 我们可以在文本转语音 (tts) 中处理 "Is not audiable"吗?

c# - 通过 Xamarin 在 UWP 上使用文本转语音

java - FreeTTS 可移植性问题

android - 如何使用solo.searchText搜索一些由特殊字符组成的文本

android - 改造为异步 FormUrlEncoded DELETE 调用抛出 IllegalArgumentException 异常

java - Android 使用 PHP MySQL 和 SQLite 登录和注册失败

actionscript-3 - 如何使用 ActionScript 或 Air 进行文本转语音?

ios - 如何检测用户在 iOS 中使用了语音输入?