gpt4 book ai didi

java - 即使传递 hashmap 字符串后也不会调用 UtteranceProgressListener(在标记为重复之前读取)

转载 作者:太空宇宙 更新时间:2023-11-04 11:33:50 26 4
gpt4 key购买 nike

我正在尝试在 tts 上放置一个 onUtteranceProgressListener。我已经浏览了 stackoverflow 上的其他相关问题并关注了它们。但即使通过 Hashmap 或 Bundle 传递话语 id 字符串(因为 Hashmap 在 api21 后已弃用),utteranceProgressListener 也不会被调用。我用 toast 来验证,但没有 toast 输出。我正在获取音频输出,但无法让 ProgressListener 对其进行处理。

@Override
public void onInit(int initStatus) {
if (initStatus == TextToSpeech.SUCCESS) {
myTTS.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
Toast.makeText(InvisibleActivity.this,"listener Started",Toast.LENGTH_SHORT).show();
}

@Override
public void onDone(String utteranceId) {
if (utteranceId.equals("utteranceId")) {
myTTS.stop();
Toast.makeText(InvisibleActivity.this,"mytts stopped",Toast.LENGTH_SHORT).show();

}
}

@Override
public void onError(String utteranceId) {

}
});
myTTS.setLanguage(Locale.US);
} else if (initStatus == TextToSpeech.ERROR) {
Toast.makeText(this, "Sorry,Text To speech not supported", Toast.LENGTH_SHORT).show();
}
Bundle bundle = new Bundle();
bundle.putString(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"utteranceId");

myTTS.speak(outText, TextToSpeech.QUEUE_FLUSH, bundle,null);
chan();
}

我使用过的 HashMap 代码(已弃用的 talk())是:

HashMap<String,String> params = new HashMap<>();
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"utteranceId");
myTTS.speak(outText,TextToSpeech.QUEUE_FLUSH, params);

我尝试了 QUEUE_ADDQUEUE_FLUSH,但结果是相同的。

最佳答案

这是因为它在另一个线程上工作。您需要使用 runOnUiThread 才能使其工作:

tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String s) {

final String keyword = s;
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Started " + keyword, Toast.LENGTH_SHORT).show();
}
});


}

@Override
public void onDone(String s) {

runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Done ", Toast.LENGTH_SHORT).show();
}
});
}

@Override
public void onError(String s) {

runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Error ", Toast.LENGTH_SHORT).show();
}
});
}
});

确保在 speak 方法之前调用此方法。

关于java - 即使传递 hashmap 字符串后也不会调用 UtteranceProgressListener(在标记为重复之前读取),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43499938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com