Я делаю приложение, которое использует tts для синтеза wav-файлов каждый раз, когда запускается трансляция. Im работает на AndroidStudio (последние) и использует API-уровень 19 с минусом 15.UtteranceProgressListener не работает для Android TTS
У меня есть служба с BroadcastListener. Каждый раз, когда метод BroadcastListener OnReceive выполняется, я использую
tts.synthesizeToFile(playing, null, storagePath + "/" + "tst.wav");
Файл успешно создан, но метод onDone() из UtteranceProgressListener никогда не вызывается.
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 и обратный вызов работал. Это была моя предиуция. Мне просто нужно было передать параметры HashMap с параметром KEY_PARAM_UTTERANCE_ID. – ztrange