我正在製作一個應用程序,每次觸發broadcastreceiver時都會使用tts合成wav文件。我工作在AndroidStudio(最新)和使用最低15分的API 19級。UtteranceProgressListener不適用於Android TTS
我有一個BroadcastListener服務。每次執行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,並與調試模式下,我可以看到的mUtteranceProgressListener tts對象有一些對象引用:
[email protected]
但是偵聽器的方法永遠不會被調用。 Log.d()調用不會工作,並且從不觸發任何斷點。
我還通過聲明UtteranceProgressListener作爲一個匿名類調用
tts.setOnUtteranceProgressListener(new UtteranceProgressListener(){...});
,但同樣的事情時試圖...
有人能指出我什麼我做錯了嗎?
我想我已經解決了它。我試着用tts.speak,回調工作。那是我的prevoius實施。我只需要在那裏傳遞一個帶有KEY_PARAM_UTTERANCE_ID參數的參數HashMap。 – ztrange