【发布时间】:2014-03-17 10:25:17
【问题描述】:
我正在制作一个应用程序,每次触发广播接收器时都使用 tts 合成 wav 文件。我正在使用 AndroidStudio(最新版本)并使用 API 级别 19,最少 15。
我有一个带有广播监听器的服务。每次执行 BroadcastListener onReceive 方法时,我都使用
tts.synthesizeToFile(playing, null, storagePath + "/" + "tst.wav");
文件创建成功,但 UtteranceProgressListener 的 onDone() 方法从未被调用。
public void onCreate() {
super.onCreate();
//Get TTS capabilities
//TODO: Use TextToSpeech.Engine.ACTION_CHECK_TTS_DATA to check if tts is available
tts = new TextToSpeech(PresenterService.this,
new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
//If the TTS engine was started successfully
if (status != TextToSpeech.ERROR) {
tts.setLanguage(Locale.US);
tts.setPitch(PRESENTER_PITCH);
tts.setSpeechRate(PRESENTER_RATE);
}
}
});
tts.setOnUtteranceProgressListener(new TtsUtteranceListener());
IntentFilter filter = new IntentFilter();
filter.addAction("xxxxxxxxxxxxxxxxxx");
mReceiver = new TrackChangedReceiver(tts);
registerReceiver(mReceiver, filter);
}
还有 TtsUtteranceListener 类:
public class TtsUtteranceListener extends UtteranceProgressListener {
@Override
public void onDone(String utteranceId) {
Log.d("TtsUtteranceListener", "utterance Done: " + utteranceId);
}
@Override
public void onStart(String utteranceId) {
Log.d("TtsUtteranceListener", "utterance Start: " + utteranceId);
}
@Override
public void onError(String utteranceId) {
Log.d("TtsUtteranceListener", "utterance Error: " + utteranceId);
}
}
监听器上的方法:
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null) {
if (action.equalsIgnoreCase("xxxxxxxxxxxxxxxxx")) {
String playing = "test string";
tts.synthesizeToFile(playing, null, storagePath + "/" + "tst.wav");
}
}
}
我正在使用 AndroidStudio,在调试模式下我可以看到 tts 对象的 mUtteranceProgressListener 有一些对象引用:
com.example.android.ttstest.TtsUtteranceListener@41eaf8d8
但是监听器的方法永远不会被调用。 Log.d() 调用永远不会起作用,并且永远不会触发任何断点。
我还尝试在调用时将 UtteranceProgressListener 声明为匿名类
tts.setOnUtteranceProgressListener(new UtteranceProgressListener(){...});
但同样的事情......
谁能指出我做错了什么?
【问题讨论】:
-
我想我已经解决了。我尝试使用 tts.speak 并且回调有效。那是我以前的实现。我只需要在其中传递一个带有 KEY_PARAM_UTTERANCE_ID 参数的参数 HashMap。
标签: java android text-to-speech