我有一个严重依赖 TTS 的应用程序供视力不佳的人使用。但是由于某些原因,当我使用 speak 方法时,TTS 会随机跳过句子的前几个字母,或者以非常低的音量说出前几个字母,而以正常音量说出其余字母。
知道为什么会发生这种情况吗?
这是我当前的代码:
public class SpeechHelper implements TextToSpeech.OnInitListener {
private Context context = null;
private TextToSpeech tts;
public SpeechHelper(Context context)
{
this.context = context;
try {
tts = new TextToSpeech(context, this);
} catch(Exception e) {
Log.e("Phone Features Exception","Couldn't initiate TTS", e);
}
}
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
tts.setLanguage(Locale.getDefault());
}
}
public void speak(String s, int mode, String messageID) {
Log.d("VOLUME", "getStreamVolume " + am.getStreamVolume(AudioManager.STREAM_MUSIC)); // Always 15
Log.d("VOLUME", "isMusicActive " + (am.isMusicActive() ? "true" : "false")); // Always false
Log.d("VOLUME", "isVolumeFixed " + (am.isVolumeFixed() ? "true" : "false")); // Always false
Log.d("VOLUME", "isSpeakerphoneOn: " + (am.isSpeakerphoneOn() ? "true" : "false")); // Always false
Log.d("VOLUME", "getMode: " + am.getMode()); // Always 0
HashMap<String, String> params = new HashMap<String, String>();
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, messageID);
tts.speak(s, mode, params);
}
}
我注意到问题总是在调用电话后或将手机解锁到应用程序后的 5 秒内发生。
最佳答案
要么你做错了什么,要么 Android 做错了。如果我必须在上面花钱,我会说是你。
从调用开始
tts.speak("the quick brown fox jumps over the lazy dog", tts.QUEUE_FLUSH, null);
看看您是否可以在测试应用程序中重现该问题(我不能)。如果可以,那么我很好奇您运行的是什么手机/操作系统。您的问题可能在于被截断的字符串,或者其他以编程方式干扰音量的问题。
关于android - TTS 随机跳过句子的第一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32447124/