"4 and 3 4ths" 1.5 => "1 and 1 half" 1.33 =-6ren">
gpt4 book ai didi

android - 文本到语音发音数字,如 "4th"、 "8ths"或 "2nd"

转载 作者:行者123 更新时间:2023-11-29 23:34:12 27 4
gpt4 key购买 nike

前段时间我写了一些代码,将 Double 转换为字符串,其中字符串被格式化为可读分数。

举个例子

4.75 => "4 and 3 4ths"
1.5 => "1 and 1 half"
1.33 => "1 and 1 3rd"

大多数数字的发音都符合预期,但有一些明显的异常(exception)。而不是将文本“4ths”发音为“fourths”,而是发音为“four tee ache ess”。这是一个演示这一点的例子。

//this works
tts.speak("1 and 3 fourths", TextToSpeech.QUEUE_FLUSH, null);
//this works
tts.speak("1 and 1 3rd", TextToSpeech.QUEUE_FLUSH, null);
//this works
tts.speak("1 and 1 4th", TextToSpeech.QUEUE_FLUSH, null);

//this does not work
tts.speak("1 and 3 4ths", TextToSpeech.QUEUE_FLUSH, null);
//this does not work
tts.speak("1 and 3 4thes", TextToSpeech.QUEUE_FLUSH, null);
//this does not work
tts.speak("1 and 3 4th-s", TextToSpeech.QUEUE_FLUSH, null);

最奇怪的是,大约一年前,当我第一次编写代码时,它运行良好,“ths”后缀的发音与人们预期的一样。也许我在这一点上弄错了……

无论如何,问题似乎是数字后跟 2 个字母读起来像一个完整的单词,而数字后跟 3 个或更多字母读起来像一系列数字。我可以通过将所有数字替换为对应的单词来增加算法的复杂性,但是我在这方面工作的时间越长,我就越开始认为我是在重新发明轮子。 API似乎并不表示为 speak() 方法指定发音的方式。我错过了什么吗?

最佳答案

这种行为在 TextToSpeech 引擎之间会有所不同——例如,Google TTS 引擎的行为将不同于 SVOX PICO(模拟器 < API 24)引擎……所以这不是你的错每个引擎的行为略有不同......如果有任何发音控制,则引擎负责通过设置将它们直接提供给最终用户。

您可能只是在与以前不同的引擎上进行测试……甚至是对同一引擎的更新。

您可以只测试三星、谷歌和 PICO 等主要引擎,并尝试找到行为的共同点。我怀疑你是对的:在这种情况下拼出单词是最好的选择。

您可以将要使用的引擎指定为 TextToSpeech 构造函数的最后一个参数 (String),并且您可以通过转到 (home\settings\language&locale\TTS) 或在代码如下:

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 - 文本到语音发音数字,如 "4th"、 "8ths"或 "2nd",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52392804/

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