科大讯飞语音识别 离线语音合成 数字读法 Android
用科大讯飞语音识别包的时候要求识别到数字的时候以阿拉伯数字的形式传到后台。
数字优先的设定下大多数数字经过识别返回的结果是阿拉伯数字,但是比如“十二万”就会识别成“12万”,同时比较大的数字会有逗号分隔符(比如12,345)。
用正则匹配替换。
text = text.replace(",", "");
text = text.replaceAll("([0-9])万", "$10000");
后台返回四位数序列时期望语音合成按照串的读法,但其他部分的数字依旧按照数字读法。
在线语音合成支持cssml方法设定读音,离线不支持。
将数字序列转成汉字传入startSpeaking方法解决了问题。
final private String[] character = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
StringBuilder toRead = new StringBuilder();
for(int i=0; i<serial.length(); i++) {
toRead.append(character[(int)serial.charAt(i) - (int)('0')]);
}