我用过
mTts.addSpeech(text, filename.getAbsolutePath() );
将音频文件映射到特定的文本字符串。
问题是如果使用删除文件,这在我的情况下可能/可能,我需要从mTts中删除addSpeech映射(使用不存在的removeSpeech()),以便它恢复为计算机语音。
这可能吗?
这是我使用addSpeech添加文件后得到的堆栈跟踪,然后删除该文件并尝试再次说话。
12-17 15:41:45.016: ERROR/MediaPlayer(361): error (1, -2147483648)
12-17 15:41:45.056: DEBUG/MediaPlayer(361): create failed:
12-17 15:41:45.056: DEBUG/MediaPlayer(361): java.io.IOException: Prepare failed.: status=0x1
12-17 15:41:45.056: DEBUG/MediaPlayer(361): at android.media.MediaPlayer.prepare(Native Method)
12-17 15:41:45.056: DEBUG/MediaPlayer(361): at android.media.MediaPlayer.create(MediaPlayer.java:611)
12-17 15:41:45.056: DEBUG/MediaPlayer(361): at android.media.MediaPlayer.create(MediaPlayer.java:588)
12-17 15:41:45.056: DEBUG/MediaPlayer(361): at android.tts.TtsService.processSpeechQueue(TtsService.java:1098)
12-17 15:41:45.056: DEBUG/MediaPlayer(361): at android.tts.TtsService.speak(TtsService.java:507)
12-17 15:41:45.056: DEBUG/MediaPlayer(361): at android.tts.TtsService.access$1900(TtsService.java:58)
12-17 15:41:45.056: DEBUG/MediaPlayer(361): at android.tts.TtsService$1.speak(TtsService.java:1256)
12-17 15:41:45.056: DEBUG/MediaPlayer(361): at android.speech.tts.ITts$Stub.onTransact(ITts.java:86)
12-17 15:41:45.056: DEBUG/MediaPlayer(361): at android.os.Binder.execTransact(Binder.java:288)
12-17 15:41:45.056: DEBUG/MediaPlayer(361): at dalvik.system.NativeStart.run(Native Method)
答案 0 :(得分:0)
来自API:
public int addSpeech(String text,String filename)
在文本字符串和声音文件之间添加映射。使用此功能,可以为一串文本添加自定义代词。调用此方法后,后续调用
说话(String,int,HashMap)
将播放指定的声音资源(如果可用),或合成缺少的文本。
所以,这是可能的
我写简单的方法。它有效。
private void speak(String text) {
if(text != null) {
HashMap<String, String> myHashAlarm = new HashMap<String, String>();
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_ALARM));
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "end of message - "+text);
mTts.speak(text, TextToSpeech.QUEUE_FLUSH, myHashAlarm);
}
}