帖子

[官方资源分享] 【官方】合成多音字、静音停顿、数字读法

[复制链接]
  • TA的每日心情
    开心
    2017-12-29 09:56
  • 签到天数: 46 天

    [LV.5]常住居民I

    2098820  楼主| 王水 发表于 2016-6-7 14:30:23 1#
    在使用合成时,有时候会遇到部分场景下一些文字发音、停顿等效果不符合我们的预期。
    针对于一些定制发音的需求,可以选择在文本中加入一些特殊的标记来指明预期。
    1cssml方法
        在云端下述的一些发音人角色可以通过简单文本标记(cssml)来控制合成的发音属性。也只有下列发音人参数支持cssm标签
    1.  xiaoyan、xiaoyu、xiaofeng、xiaoqi、catherine、mary
    如果使用此项特性,需注意:
    a)、在business中添加参数ttp=cssml
    b)、合成文本不支持unicode文本编码
    具体参见:
    【官网】各平台语音合成cssml参数设置
    http://bbs.xfyun.cn/forum.php?mo ... 10456&fromuid=33982
    (出处: 语音云社区)


    1)、指定文字读音。举例如下:
    1.  他姓<phoneme py="zeng1">曾</phoneme>2.  工会主席<phoneme lang="en">Chen Yuxing</phoneme>
    3.  “查”作为姓氏时应该读<phoneme lang="zh-cn">zha1</phoneme>
    其中,phoneme是指明发音参数的标签,建议闭合。py是指明拼音的,最后一位的数字表示声调(1234)。lang指明语言类型的,两种取值:en指定按照英文读法,zh-cn按照拼音读法。pylang不能同时指定。
    2)、在文本合成时加入自定义的静音停顿。举例如下:
    1.  风<break time="500ms"/>轻轻摇着树梢
    其中,break是指明停顿的,time是停顿时间。以秒或者毫秒为单位。
    3)、标点的朗读规则指定。举例如下:
    1.  中国传统的节日有<punctuation speak_out="no">:</punctuation>
    2.   <punctuation speak_out="yes">春节、端午节、中秋节等。</punctuation>
    其中,punctuation用于指明标点符号的发音方式,建议闭合。speak_out有三个取值yes,no,defaultyes:读出,no:静默,default:自动判断
    4)、指定文本中特殊串的性质,即相应的发音方式。如数字读法:
    1.  现在时钟已指向<sayas type="number">8</sayas>
    2.  我们一共有<sayas type="numberrdinal">13</sayas>个人
    3.  我住在<sayas type="number:digits">412</sayas>房间
    4.  双方比分是<sayas type="number:score">3:1</sayas>
    5.  取其中的<sayas type="number:fraction">1/3</sayas>
    其中,sayas是文本性质标签,建议闭合。该用法可以抽象为:
    1.  <sayas type="string:extension"> </sayas>
    string取值目前支持number,extension的范围以及意义如下:
    1.  ordinal  :  按数值发音
    2.  digits   :  按数字串发音
    3.  score    :  按比分读法发音
    4.  fraction :  按分数读法发音
    2、使用简单标记
        除了cssml标记外,还可以通过简单标记来指定文本朗读规则。除方法一中列举中的发音人(xiaoyan、xiaoyu、xiaofeng、xiaoqi、catherine、mary)、小语种发音人外,均可使用改标记方法。包括离线在线发音人和webapi在线发音人。
    1)、设置单词发音方式。方法如下:
    1.  格式: [h*]   (*=0/1/2)
    2.  参数: 0 – 自动判断单词发音方式
                    1 – 字母发音方式
                    2 – 单词发音方式
    3.  说明:  默认单词为自动判断。
    文本举例:
    1.  [h1]hello[h0] word
    其中,hello将会按照字母发音,word就会按照单词进行发音
    2)、数字处理策略。方法如下:
    1.  格式: [n*]   (*=0/1/2)
    2.  参数: 0 – 自动判断
                   1 – 数字作号码处理
                   2 – 数字作数值处理
    3.  说明: 默认为自动判断。
    文本举例:
    1.  [n2]123[n1]456[n0]
    其中,123将会按照数值处理,456则会按照号码处理,而后的文本中的数字,均会自动判断。
    3)、合成时,加入静音停顿。方法如下:
    1.  格式: [p*]   (*=无符号整数)2.  参数: * – 静音的时间长度,单位:毫秒(ms)
    文本举例:
    1.  你好[p500]科大讯飞
    该句合成时,将会在你好后加入500ms的静音
    4)、指定汉字发音。方法如下:
    1.  格式: [=*]   (*=拼音/音标)
    2.  参数: * – 为前一个汉字/单词设定的拼音/音标
    3.  说明: 汉字:声调用后接一位数字1~5分别表示阴平、阳平、上声、去声和轻声5个声调。
    文本举例:
    1.  着[=zhuo2]手
    其中,“着”字将读作“zhuó   

    文本的标记还会继续完善,我们会不断完善介绍文档哦。
    另外,不在该文档介绍范围内的标记功能,不会作为稳定支持哦。




    评分

    参与人数 1语点 +5 收起 理由
    栗子讲究 + 5 很给力!

    查看全部评分

    zhengxiangwen@i 发表于 2016-6-7 15:49:22
    2#
    非常好,谢谢谢谢
    使用道具 举报 回复
    hongyefan 发表于 2016-6-15 21:13:47
    3#
    本帖最后由 hongyefan 于 2016-6-16 14:58 编辑

    请教下,使用
    [h1]hello[h2]hello为什么把h1 h2也读出来了?另外数字那个也是的,把n1 n2读出来了,直接用下载的sdk demo测试的,谢谢
    windows平台 在线语音合成 默认那个xiaoyan发音人
    使用道具 举报 回复
    yangningbo 发表于 2016-6-16 19:30:14
    4#
    hongyefan 发表于 2016-6-15 21:13
    请教下,使用
    [h1]hello[h2]hello为什么把h1 h2也读出来了?另外数字那个也是的,把n1 n2读出来了,直接用 ...

    检查一下参数

    Windows/Linux:
    在线、离线:
    const char* param = "vcn=xiaoyan,aue = speex-wb,auf=audio/L16;rate=16000,spd = 5,vol = 5,tte = utf8,ttp=cssml";
    调用接口:
    ret = text_to_speech(text,filename,param);

    楼内回复

    windows下没有这个ret = text_to_speech(text,filename,param)接口?  详情 发表于 2017-5-11 14:20
    使用道具 举报 回复
    hongyefan 发表于 2016-6-16 22:28:46
    5#
    本帖最后由 hongyefan 于 2016-6-16 22:31 编辑
    yangningbo 发表于 2016-6-16 19:30
    检查一下参数

    Windows/Linux:在线、离线:const char* param = "vcn=xiaoyan,aue = speex-wb,auf=audio/ ...

    发现,用讯飞在线的体验http://www.xfyun.cn/default/online_demo/ 选择语音合成

    前三个发言人 比如 小燕,也同样是错误的,第四个开始就是正确的了
    输入的是[n1]1000[n2]10000

    帖子里不是说两种方法吗,第二种简易的不需要设置那个啊

    使用道具 举报 回复
    hongyefan 发表于 2016-6-17 09:18:20
    6#
    难道说 方法一里面那些发音人不支持方法二。。。 呃。。。。
    使用道具 举报 回复
    hongyefan 发表于 2016-6-17 14:22:46
    7#
    最后自己写了逻辑 ,把阿拉伯数字转换成带读音的中文解决了,这样比较通用


    使用道具 举报 回复
    liuh 发表于 2016-8-30 09:33:10
    8#
    hongyefan 发表于 2016-6-15 21:13
    请教下,使用
    [h1]hello[h2]hello为什么把h1 h2也读出来了?另外数字那个也是的,把n1 n2读出来了,直接用 ...

    请问这个问题你最后解决了吗?怎么解决的?
    我也遇到这个问题了,就是不管怎么设置都是所有字符都变成语音了
    使用道具 举报 回复
    zhoulianxiang 发表于 2017-3-15 18:03:47
    9#
    坑啊,我怎么设置了毫无效果?我用的是as,也设置好了mTts.setParameter("ttp", "cssml");
    mTts.setParameter(SpeechConstant.TEXT_ENCODING, "GB2312");

    然后在stringsxml中进行如下设置
    <string name="text_tts_source">
          <phoneme py="pu3">朴</phoneme>槿惠,<phoneme py="pu3">朴</phoneme>树,单亚玲      
    </string>最后开启合成mTts.startSpeaking(text_origin, mTtsListener);
    但是合成的语音中仍然是把“朴”读成 “piao”,为啥啊,真心求教

    楼内回复

    试试这个吧,在线合成xiaoyan  详情 发表于 2017-3-16 18:37
    使用道具 举报 回复
     楼主| 王水 发表于 2017-3-16 18:37:25
    10#
    zhoulianxiang 发表于 2017-3-15 18:03
    坑啊,我怎么设置了毫无效果?我用的是as,也设置好了mTts.setParameter("ttp", "cssml");
    mTts.setParamet ...

    [mw_shl_code=java,true]                        int code = mTts.startSpeaking(
                                            "<?xml version=\"1.0\" encoding=\"GB2312\"?><speak><phoneme py=\"pu3\">朴</phoneme>槿惠,<phoneme py=\"pu3\">朴</phoneme>树,单亚玲</speak>"
                                            , mTtsListener);[/mw_shl_code]
    试试这个吧,在线合成xiaoyan

    楼内回复

    亲测有效,感谢~  详情 发表于 2017-5-7 23:06
    使用道具 举报 回复