我正在应用程序中使用TextToSpeech。我想添加一个允许用户选择声音的设置。我从当前的TTS引擎(com.google.android.tts,我只需要中文语音)获取语音列表,并且其名称已添加到设置中:
val voices = tts.voices.filter {it.locale == Locale.SIMPLIFIED_CHINESE}
它们的名称看起来完全不可读,例如:
cmn-cn-x-ssa-local
cmn-cn-x-ccc-network
cmn-cn-x-ccd-local
是否有一种方法可以获取人类可读的语音名称?或至少得到他们的性别?
例如,TextToSpeech.EngineInfo包含一个包含引擎唯一名称的name字段和一个包含人类可读名称的label字段。也许声音也有类似的东西吗?
我已经用这种方式格式化,也许可以改进,但至少看起来比默认列表要好。
String sal = voices.get(e).name;
if(sal.contains("#")) {
String[] pre = sal.split("#");
String sec = pre[1].replace("_", " ");
sec = sec.replace("-", " ");
String[] sal2 = pre[0].split("-");
sal = sal2[0] + "_" + sal2[1].toUpperCase() + " (" + utils.capitalize(sec) + ")";
}
if(sal.contains("-x-")) {
String[] noSal = sal.split("-x-");
String[] noSal2 = noSal[0].split("-");
String noSal3 = noSal[1].replace("-", " ");
sal = noSal2[0] + "_" + noSal2[1].toUpperCase() + " (" + utils.capitalize(noSal3) + ")";
}
if(sal.contains("-")){
String[] finalSal = sal.split("-");
sal = finalSal[0] + "_" + finalSal[1] + " (" + utils.capitalize(finalSal[2]) + ")";
}
utils.capitalize()这是一个大写单词的小功能。