【神奇弹幕】微软TTS语音朗读

2022-03-04 12:09:23

功能介绍

动态设置语音朗读内容、发音、讲话风格的功能:

1. 非常逼真自然的语音合成,支持国际上绝大部分语言

2. 不同的身份(主播/房管/舰长/普通用户)可以同时拥有不同的发音人、风格

3. 可以通过弹幕/礼物/其他自定义操作来设置指定用户的专属发音人

4. 朗读发送弹幕的用户昵称,可以使用不同的发音风格

5. 统一用户连续发送的弹幕,不重复朗读昵称

6. 通过语音合成标记语言SSML,微调音节、发音、语速、音量以及其他属性


image.png


下载

下载地址:http://pan.iwxyi.com/#s/7W3YlRNg

更新方式:目前新版(4.4.3)尚未发布,下载文件夹“每夜版”中的 exe 到旧版目录,双击打开

需关闭程序自带的“朗读弹幕”开关,否则会有重复语音

导入代码:

1. 复制本页底部的代码

2. 神奇弹幕扩展页右上角菜单中的“粘贴代码片段”
    image.png

3. 配置设置页中的语音,选择微软,并填入地区码和订阅码
    image.pngimage.png


共享秘钥

地区码:southeastasia

订阅码:edca5995ff5e492ea1f78f94af0bb093


发音人列表

SSML中的发音人需要使用前缀“zh-CN-”和后缀“Neural”,例如:

通过弹幕设置发音人的代码中已自动添加前后缀,只需发送英文名即可。

  • Xiaoxiao        晓晓

  • Yunyang        云扬

  • Xiaochen       晓辰

  • Xiaohan         晓涵

  • Xiaomo          晓墨

  • Xiaoqiu          晓秋

  • Xiaoriu           晓睿

  • Xiaoshuang   晓双

  • Xiaoxuan       晓萱

  • Xiaoyan         晓颜

  • Xiaoyou         晓悠

  • Yunxi             云希

  • Yunye            云野


讲话风格列表

不是所有角色都能使用讲话风格,也不是有讲话风格的角色能使用所有风格,具体可参考官方试听的选项:

Style说明
affectionate以较高的音调和音量表达温暖而亲切的语气。 说话者处于吸引听众注意力的状态。 说话者的个性往往是讨喜的。
angry表达生气和厌恶的语气。
assistant以热情而轻松的语气对数字助理讲话。
calm以沉着冷静的态度说话。 语气、音调和韵律与其他语音类型相比要统一得多。
chat表达轻松随意的语气。
cheerful表达积极愉快的语气。
customerservice以友好热情的语气为客户提供支持。
depressed调低音调和音量来表达忧郁、沮丧的语气。
disgruntled表达轻蔑和抱怨的语气。 这种情绪的语音表现出不悦和蔑视。
embarrassed在说话者感到不舒适时表达不确定、犹豫的语气。
empathetic表达关心和理解。
fearful以较高的音调、较高的音量和较快的语速来表达恐惧、紧张的语气。 说话人处于紧张和不安的状态。
gentle以较低的音调和音量表达温和、礼貌和愉快的语气。
lyrical以优美又带感伤的方式表达情感。
narration-professional以专业、客观的语气朗读内容。
newscast以正式专业的语气叙述新闻。
newscast-casual以通用、随意的语气发布一般新闻。
newscast-formal以正式、自信和权威的语气发布新闻。
sad表达悲伤语气。
serious表达严肃和命令的语气。 说话者的声音通常比较僵硬,节奏也不那么轻松。


官方SSML文档:https://docs.microsoft.com/zh-cn/azure/cognitive-services/speech-service/speech-synthesis-markup?tabs=csharp


代码片段

复制以下的代码粘贴到神奇弹幕中:

[
    {
        "anchor_key": "神奇弹幕:AutoReply",
        "enabled": true,
        "key": "设置发音人\\s*(\\S*)",
        "reply": "/// 设置微软语音发音人,使用英文名字\n// Xiaoxiao晓晓  Yunyang云扬  Xiaochen晓辰  Xiaohan晓涵  Xiaomo晓墨\n// Xiaoqiu晓秋  Xiaoriu晓睿  Xiaoshuang晓双  Xiaoxuan晓萱  Xiaoyan晓颜\n// Xiaoyou晓悠  Yunxi云希  Yunye云野\n>setValue(voice/speaker_%uid%, zh-CN-%$1%Neural)"
    },
    {
        "anchor_key": "神奇弹幕:AutoReply",
        "enabled": true,
        "key": "设置发音风格\\s*(\\S*)",
        "reply": "/// 指定讲话风格,不是所有角色都能用\n// affectionate亲切  angry生气  assistant热情轻松  calm沉着冷静  chat轻松随意\n// cheerful愉快  customerservice友好 depressed忧郁  disgruntled轻蔑  embarrassed犹豫\n// empathetic关心  fearful紧张  gentle温和  lyrical优美感伤  narration-professional朗读\n// newscast正式  newscast-casual通用随意  sad悲伤  serious严肃\n>setValue(voice/style_%uid%, %$1%)"
    },
    {
        "anchor_key": "神奇弹幕:AutoReply",
        "enabled": false,
        "key": "设置发音角色扮演\\s*(\\S+)",
        "reply": "/// 指定讲话角色扮演,使语音模拟不同的年龄和性别(暂不可用)\n// 仅这些角色可用:Xiaomo晓墨  Xiaoxuan晓萱  Yunxi云希  Yunye云野\n// 参数列表:\n// 模拟男女孩:Girl  Boy\n// 模拟年轻男女:YoungAdultFemale  YoungAdultMale\n// 模拟年长男女:OlderAdultFemale  OlderAdultMale\n// 模拟老年男女:SeniorFemale  SeniorMale\n>setValue(voice/role_%uid%, %$1%)"
    },
    {
        "anchor_key": "神奇弹幕:AutoReply",
        "enabled": true,
        "key": ".+",
        "reply": "/// 自定义弹幕朗读,仅限微软语音\n>speakTextSSML(<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xmlns:mstts=\"https://www.w3.org/2001/mstts\" xml:lang=\"zh-CN\">\\\n     <voice name=\"%>getEventExecutionResult(GET_VOICE_SPEAKER)%\">\\\n        %>getEventExecutionResult(GET_VOICE_USER)%\\\n        <mstts:express-as style=\"%>getEventExecutionResult(GET_VOICE_STYLE)%\" >\\\n            <prosody rate=\"0%\" pitch=\"0%\">\\\n                %text%\\\n            </prosody>\\\n        </mstts:express-as>\\\n     </voice>\\\n</speak>)"
    },
    {
        "action": "/// 测试发音人\n>speakTextSSML(<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xmlns:mstts=\"https://www.w3.org/2001/mstts\" xml:lang=\"zh-CN\">\\\n    <voice name=\"zh-CN-XiaomoNeural\">\\\n        女儿看见父亲走了进来,问道:\\\n        <mstts:express-as role=\"YoungAdultFemale\" style=\"calm\">\\\n            “您来的挺快的,怎么过来的?”\\\n        </mstts:express-as>\\\n        父亲放下手提包,说:\\\n        <mstts:express-as role=\"OlderAdultMale\" style=\"calm\">\\\n            “刚打车过来的,路上还挺顺畅。”\\\n        </mstts:express-as>\\\n    </voice>\\\n</speak>)",
        "anchor_key": "神奇弹幕:EventAction",
        "enabled": false,
        "event": ""
    },
    {
        "action": "// 自定义的语音发音人\n[%{voice/speaker_%uid%}%]****%{voice/speaker_%uid%}%\n// 设置不同身份的默认语音\n[%is_up%]***zh-CN-XiaoxiaoNeural // 主播自己\n[%guard%]**zh-CN-YunyangNeural // 舰长\n[%admin%]*zh-CN-XiaoyouNeural // 房管\nzh-CN-XiaoyanNeural // 普通用户",
        "anchor_key": "神奇弹幕:EventAction",
        "enabled": true,
        "event": "GET_VOICE_SPEAKER"
    },
    {
        "action": "// 自定义的语音风格\n[%{voice/style_%uid%}%]****%{voice/style_%uid%}%\n// 设置不同身份的默认语音\n[%is_up%]***lyrical // 主播自己\n[%guard%]**affectionate // 舰长\n[%admin%]*cheerful // 房管\nnewscast-casual // 普通用户",
        "anchor_key": "神奇弹幕:EventAction",
        "enabled": true,
        "event": "GET_VOICE_STYLE"
    },
    {
        "action": "// 是连续同一个用户,不重复朗读昵称\n[%{voice/last_user}% == %uid%]***\n// 返回用户昵称\n>setValue(voice/last_user, %uid%)\\n\\\n        <mstts:express-as style=\"lyrical\" >\\\n            <prosody rate=\"0%\" pitch=\"0%\">\\\n                %ai_name%说:\\\n            </prosody>\\\n        </mstts:express-as>\\\n        <break strength=\"medium\" />",
        "anchor_key": "神奇弹幕:EventAction",
        "enabled": true,
        "event": "GET_VOICE_USER"
    }
]