讯飞语音合成发音不准确怎么解决
替换要朗读文本中的容易读错的字符
首先讯飞语音合成我们是无法控制的,我们能控制的之后是自己传给他的文本。为了朗读效果,我这里通过替换掉一些容易读错的字符,加入空白符等方式,来提高合成的效果。
点号读错的问题
问题描述
例如java.lang.Object,我们读成java点lang点Object。但是发音人不一定会把.读成点。
解决方案
合成之前先对字符串进行替换
- 对于java包名(或类全名),例如:
java.lang.Object先自行替换成java点lang点Object。 
- 对于文章标题,如
5.5.5 XXXXX先自行替换成5点5点5 XXXXX 
替换方法
首先通过正则表达式进行匹配,然后匹配到的文本中的点号.替换成中文点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
   | public static String replaceTitle(String text) {     Pattern titlePattern = Pattern.compile("\\w+(?:(\\.)(?:\\w+))+");     Matcher titleMatcher = titlePattern.matcher(text);     StringBuffer sb = new StringBuffer();     String line = null;     boolean titleFind = false;          while ((titleFind = titleMatcher.find()))     {         if (titleFind)         {                                       line = titleMatcher.group();             line = line.replaceAll("\\.", "点");             titleMatcher.appendReplacement(sb, line);         }     }          titleMatcher.appendTail(sb);     return sb.toString(); }
   | 
 
中英混合英文读不清楚的问题
问题描述
中文和英文混合的时候,当从中文读到英文然后读到中文时,发音人可能会把英文读错,经过测试之后.
在英文签名加上空格
经过我的反复实验,发现在每个英文前面加上一个空格,这个时候英文朗读会比较清晰.
替换方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
   | public static String replaceEnglish(String text) {     Pattern englishPattern = Pattern.compile("[a-zA-Z]+");     Matcher englishMatcher = englishPattern.matcher(text);     StringBuffer sb = new StringBuffer();     String line = null;          boolean englishFind = false;     while ((englishFind = englishMatcher.find()))     {         if (englishFind)         {                          
 
              line = "  ".concat(englishMatcher.group());             englishMatcher.appendReplacement(sb, line);         }     }          englishMatcher.appendTail(sb);     return sb.toString(); }
   | 
 
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
   | package replace; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Replace {     public static String replaceTitle(String text)     {         Pattern titlePattern = Pattern.compile("\\w+(?:(\\.)(?:\\w+))+");         Matcher titleMatcher = titlePattern.matcher(text);         StringBuffer sb = new StringBuffer();         String line = null;         boolean titleFind = false;                  while ((titleFind = titleMatcher.find()))         {             if (titleFind)             {                                                   line = titleMatcher.group();                 line = line.replaceAll("\\.", "点");                 titleMatcher.appendReplacement(sb, line);             }         }                  titleMatcher.appendTail(sb);         return sb.toString();     }     public static String replaceEnglish(String text)     {         Pattern englishPattern = Pattern.compile("[a-zA-Z]+");         Matcher englishMatcher = englishPattern.matcher(text);         StringBuffer sb = new StringBuffer();         String line = null;                  boolean englishFind = false;         while ((englishFind = englishMatcher.find()))         {             if (englishFind)             {                                  
 
                  line = "  ".concat(englishMatcher.group());                 englishMatcher.appendReplacement(sb, line);             }         }                  englishMatcher.appendTail(sb);         return sb.toString();     }     public static void main(String[] args)     {          String text = "5.5.2 构造器重载";                           
          System.out.println(replaceTitle(text));     } }
 
   | 
 
手动解决
合成音频后,肯定还是有不理想的地方,通过audition等音频编辑软件,做进一步的优化。