gpt4 book ai didi

android - onRangeStart() 在阅读段落时停止获取回调(遇到标点符号后)

转载 作者:行者123 更新时间:2023-12-05 00:03:55 25 4
gpt4 key购买 nike

我正在尝试使用 Android Text to Speech 功能来朗读文档中的文本并在大声朗读时突出显示单词。我在我的 TTS 对象上使用 setOnUtteranceProgressListener() 设置了一个话语进度监听器,并在其中覆盖了 onStart()、onDone() 和 onRangeStart() 等函数。期望的是,当我的文本被大声朗读时,onRangeStart(String utteranceId, int start, int end, int frame) 将在 TTS 服务即将使用给定的 utteranceId 说出指定范围的话语时给我回调。

这是相同的文档: https://developer.android.com/reference/android/speech/tts/UtteranceProgressListener#onRangeStart(java.lang.String,%20int,%20int,%20int)

我要阅读的文档由多个段落组成,每个段落可以有多个句子。例如:这是示例段落的样子:

你好,你好吗?我希望有机会就此进行更多讨论。让我知道您的想法。

期望对于字符串中的每个单词,我应该在 onRangeStart() 中获取事件,但它没有发生。我现在得到的是:

onRangeStart utteranceId: 100000, start: 0, end: 5, frame: 120, text: Hello
onRangeStart utteranceId: 100000, start: 6, end: 11, frame: 6060, text: world
onRangeStart utteranceId: 100000, start: 13, end: 16, frame: 18720, text: how
onRangeStart utteranceId: 100000, start: 17, end: 20, frame: 23760, text: are
onRangeStart utteranceId: 100000, start: 21, end: 24, frame: 26040, text: you

此后,onRangeStart() 中不再有回调。我无法理解的是它在大约 2 周前工作正常,我一直在测试该应用程序,但它突然停止工作。我还检查了 TextToSpeech、UtteranceProgressListener 等的文档,但最近没有记录任何更改。

谁能帮我找出导致此问题的原因?

最佳答案

onRangeStart() 的实现/行为取决于安装在您用于测试的设备上的引擎。

因此,要么您在两个完全不同的引擎上进行测试,其中一个的实现不太理想,要么

您成功测试的引擎在两次测试之间进行了更新,并且在更新中引入了一个实际错误。

您可以使用以下方法来确定您在测试期间使用的引擎:

private ArrayList<String> whatEnginesAreInstalled(Context context) {
final Intent ttsIntent = new Intent();
ttsIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
final PackageManager pm = context.getPackageManager();
final List<ResolveInfo> list = pm.queryIntentActivities(ttsIntent, PackageManager.GET_META_DATA);
ArrayList<String> installedEngineNames = new ArrayList<>();
for (ResolveInfo r : list) {
String engineName = r.activityInfo.applicationInfo.packageName;
installedEngineNames.add(engineName);

// just logging the version number out of interest
String version = "null";
try {
version = pm.getPackageInfo(engineName,
PackageManager.GET_META_DATA).versionName;
} catch (Exception e) {
Log.i("XXX", "try catch error");
}
Log.i("XXX", "we found an engine: " + engineName);
Log.i("XXX", "version: " + version);
}
return installedEngineNames;
}

关于android - onRangeStart() 在阅读段落时停止获取回调(遇到标点符号后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65112889/

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