• 帮微软语音助手纠正“阿弥陀佛”“e”字错误发音的技巧


    一、前言

    微软AI文字转语音助手,现已被大家普便应用。最近在传统文化佛学名词的发音转换应用中,发现了一个致命的错误。那就是“阿弥陀佛”中的“”字的“a”发音,被误读为“e”。说起这个重大的错误,佛门大德南怀瑾老师也一再叮嘱,希望后人纠正错误发音。毕竟佛学文化是严谨严肃的民族文化。传错了,真就误导后世子孙了。

    其实,究其缘起真不怪微软。毕竟西方人不了解东方文化是很正常的。但是,得知这个错误发音,竟然是被某些热门电视剧误读后,才被大众广泛沿用的,不免让人唏嘘。现在国人编剧们,确实要多恶补传统文化了。不然,这复兴中国文化的重任,情何以担呐。哈哈。

    字在佛法的经咒中使用很多,含义广泛,是业的代表。那么,问题来了,如何让语音助手云希改掉错误发音呢?

    二、解决方案

    1、添加标点符号法:

    在这里插入图片描述

    经过反复测试,发现【阿弥陀佛】连读时,一直是错误的e mi tuo fo发音。通过在字后加各种分割符测试后。发现,加上一个上斜点【阿`弥陀佛】后,就可以得到语速正常的“a mi tuo fo”发音了。其他的分割符或标点,字读音时间过长,不适合连读。好了,这一历史性发音错误,终于解决了。哈哈。
    南无阿弥陀佛。

    2、微软官方ssml标记法:

    以下内容转载自:www.360mb.net/32732.html
    前提是软件要支持ssml标记,建议使用开源 tts-vue 软件,gitee和github都有。

    1)语法标记说明:

    使用微软语音合成 API 进行语音合成时,常用的事件处理包括以下几个方面:

    a. 停顿:语音合成会自动根据标点符号以及文本内容进行停顿和语调变换。同时,可以通过添加 SSML 标记来控制停顿的时长和位置,例如使用 标记来指定停顿的时间长度或调整语调。需要注意的是,停顿时间长度应该适当,过长或过短都不利于语音合成的自然度。

    b. 多音:为了避免多音字在语音合成中的发音出现错误,可以通过在相应文字上添加注音或拼音信息来指定正确的读音。例如,可以使用 标记来指定复杂或罕见的词汇的发音,或使用 标记来替换不常用或特殊的词汇。需要注意的是,正确指定多音字的发音对于语音合成的质量具有重要影响。

    在使用微软语音合成 API 进行语音合成时,需要注意上述几个方面,并采取相应的措施来保证语音合成的自然度和质量。

    2)范例:汉字多音字处理

    标记是 SSML(Speech Synthesis Markup Language)中的一个元素,用于指定特定音素或音序列的发音。在 Microsoft SAPI (Speech API)中, 标记可以使用 alphabet 属性指定音素表类型,使用 ph 属性指定具体的音素或音序列。

    中文案例

    
      弥陀佛。
      弥陀佛。
    
    
    • 1
    • 2
    • 3
    • 4

    这个例子中,alphabet 属性指定了音素表类型为 Microsoft SAPI,ph 属性指定了要发音的音素或音序列为 “shan 4”,这表示 “单” 这个汉字的第四声音。

    因此,当微软语音合成 API 遇到这个 标记时,会根据指定的音素进行发音,从而可以实现更准确的语音合成效果。

    其它案例:

    
        
             tomato 
        
    
    
        
             tomato 
        
    
    
        
             en-US 
        
    
    
        
            His name is Mike  Zhou 
        
    
    
         
            hello
        
    
    
    • 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

    停顿处理
    在使用微软文字转语音 API 进行 SSML 播放时,可以使用 标签来控制语音合成的停顿或延迟时间。 标签有一个 time 属性,用于指定停顿或延迟的时间长度,单位为毫秒。

    例如,下面的代码片段表示在播放语音过程中间隔 2 秒钟的时间:

    
    这是一个示例句子。
    
    这是下一个示例句子。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这段代码中,通过在两个语音段之间插入 标签,并设置 time属性为“2000ms”,就实现了两个语音段之间停顿 2 秒钟的效果。

    需要注意的是,标签的 time属性值不宜过长或过短,过长可能会使语音合成显得拖沓生硬,而过短则可能导致语音合成不太自然。因此,在使用标签时,需要根据实际情况选择合适的停顿或延迟时间。其中2000ms=2s也就是2000毫秒等于2秒,这里的事停顿事件可按需自行处理。

    南无阿弥陀佛

  • 相关阅读:
    牛客网《剑指offer》专栏刷题练习|锻炼递归思想|练习栈的使用
    关于#php#的问题:wordpress友联头像不显示是啥问题
    Go语言开发环境安装,hello world!
    在代码世界游走,没几把“锁”防身可不行
    2023/9/27 -- ARM
    自定义数据训练的rknn模型部署 踩坑记录
    【springboot】通过拦截器全局监听请求
    注解方式对常见参数进行校验 java
    低代码和人工智能助力疫情期间抗原自测信息自动化收集和处理
    Python 笔记02 (网络交互 TCP/UDP)
  • 原文地址:https://blog.csdn.net/tian0000hai/article/details/133716070