含辞未吐,声若幽兰,史上最强免费人工智能AI语音合成TTS服务微软Azure(Python3.10接入)

所谓文无第一,武无第二,云原生人工智能技术目前呈现三足鼎立的态势,微软,谷歌以及亚马逊三大巨头各擅胜场,不分伯仲,但目前微软Azure平台不仅仅只是一个PaaS平台,相比AWS,以及GAE,它应该是目前提供云计算人工智能服务最全面的一个平台,尤其是语音合成领域,论AI语音的平顺、自然以及拟真性,无平台能出其右。

本次,我们通过Python3.10版本接入Azure平台语音合成接口,打造一款本地的TTS服务(文本转语音:Text To Speech)。

准备工作

首先根据Azure平台官方文档:https://learn.microsoft.com/zh-cn/azure/cognitive-services/speech-service/get-started-text-to-speech?tabs=macos%2Cterminal&pivots=programming-language-python

在平台上创建免费订阅服务:https://azure.microsoft.com/zh-cn/free/cognitive-services/

免费订阅成功后,进入资源创建环节,这里我们访问网址,创建免费的语音资源:https://portal.azure.com/#create/Microsoft.CognitiveServicesSpeechServices

这里注意订阅选择免费试用,使用区域选择东亚,如果在国外可以选择国外的对应区域。

创建语音服务资源成功后,转到资源组列表,点击获取资源秘钥:

需要注意的是,任何时候都不要将秘钥进行传播,或者将秘钥写入代码并且提交版本。

这里相对稳妥的方式是将秘钥写入本地系统的环境变量中。

Windows系统使用如下命令:

setx COGNITIVE_SERVICE_KEY 您的秘钥

Linux系统使用如下命令:

export COGNITIVE_SERVICE_KEY=您的秘钥

Mac系统的bash终端:

编辑 ~/.bash_profile,然后添加环境变量

export COGNITIVE_SERVICE_KEY=您的秘钥

添加环境变量后,请从控制台窗口运行 source ~/.bash_profile,使更改生效。

Mac系统的zsh终端:

编辑 ~/.zshrc,然后添加环境变量

export COGNITIVE_SERVICE_KEY=您的秘钥

如此,前期准备工作就完成了。

本地接入

确保本地Python环境版本3.10以上,然后安装Azure平台sdk:

pip3 install azure-cognitiveservices-speech

创建test.py文件:

`import azure.cognitiveservices.speech as speechsdk  
import os  speech_config = speechsdk.SpeechConfig(subscription=os.environ.get('KEY'), region="eastasia")``audio_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True)`

这里定义语音的配置文件,通过os模块将上文环境变量中的秘钥取出使用,region就是新建语音资源时选择的地区,audio_config是选择当前计算机默认的音箱进行输出操作。

接着,根据官方文档的配置,选择一个语音机器人:https://learn.microsoft.com/zh-cn/azure/cognitive-services/speech-service/language-support?tabs=stt-tts#prebuilt-neural-voices

  
纯文本	wuu-CN-XiaotongNeural1(女)  
wuu-CN-YunzheNeural1(男)	不支持  
yue-CN	中文(粤语,简体)	yue-CN	纯文本	yue-CN-XiaoMinNeural1(女)  
yue-CN-YunSongNeural1(男)	不支持  
zh-CN	中文(普通话,简体)	zh-CN	音频 + 人工标记的脚本  纯文本  结构化文本  短语列表	zh-CN-XiaochenNeural4、5、6(女)  
zh-CN-XiaohanNeural2、4、5、6(女)  
zh-CN-XiaomengNeural1、2、4、5、6(女)  
zh-CN-XiaomoNeural2、3、4、5、6(女)  
zh-CN-XiaoqiuNeural4、5、6(女)  
zh-CN-XiaoruiNeural2、4、5、6(女)  
zh-CN-XiaoshuangNeural2、4、5、6、8(女)  
zh-CN-XiaoxiaoNeural2、4、5、6(女)  
zh-CN-XiaoxuanNeural2、3、4、5、6(女)  
zh-CN-XiaoyanNeural4、5、6(女)  
zh-CN-XiaoyiNeural1、2、4、5、6(女)  
zh-CN-XiaoyouNeural4、5、6、8(女)  
zh-CN-XiaozhenNeural1、2、4、5、6(女)  
zh-CN-YunfengNeural1、2、4、5、6(男)  
zh-CN-YunhaoNeural1、2、4、5、6(男)  
zh-CN-YunjianNeural1、2、4、5、6(男)  
zh-CN-YunxiaNeural1、2、4、5、6(男)  
zh-CN-YunxiNeural2、3、4、5、6(男)  
zh-CN-YunyangNeural2、4、5、6(男)  
zh-CN-YunyeNeural2、3、4、5、6(男)  
zh-CN-YunzeNeural1、2、3、4、5、6(男)	神经网络定制声音专业版  神经网络定制声音精简版(预览版)  跨语言语音(预览版)  
zh-CN-henan	中文(中原河南普通话,中国大陆)	不支持	不支持	zh-CN-henan-YundengNeural1(男)	不支持  
zh-CN-liaoning	中文(东北普通话,中国大陆)	不支持	不支持	zh-CN-liaoning-XiaobeiNeural1(女)	不支持  
zh-CN-shaanxi	中文(中原陕西普通话,中国大陆)	不支持	不支持	zh-CN-shaanxi-XiaoniNeural1(女)	不支持  
zh-CN-shandong	中文(冀鲁普通话,中国大陆)	不支持	不支持	zh-CN-shandong-YunxiangNeural1(男)	不支持  
zh-CN-sichuan	中文(西南普通话,简体)	zh-CN-sichuan	纯文本	zh-CN-sichuan-YunxiNeural1(男)	不支持  
zh-HK	中文(粤语,繁体)	zh-HK	纯文本	zh-HK-HiuGaaiNeural4、5、6(女)  
zh-HK-HiuMaanNeural4、5、6(女)  
zh-HK-WanLungNeural1、4、5、6(男)	神经网络定制声音专业版  
zh-TW	中文(台湾普通话)	zh-TW	纯文本	zh-TW-HsiaoChenNeural4、5、6(女)  
zh-TW-HsiaoYuNeural4、5、6(女)  
zh-TW-YunJheNeural4、5、6(男)	神经网络定制声音专业版

单以中文语音论,可选择的范围还是相当广泛的。

继续编辑代码:

import azure.cognitiveservices.speech as speechsdk  
import os  speech_config = speechsdk.SpeechConfig(subscription=os.environ.get('KEY'), region="eastasia")  
audio_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True)  speech_config.speech_synthesis_voice_name='zh-CN-XiaomoNeural'  speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_config)  text = "hello 大家好,这里是人工智能AI机器人在说话"  speech_synthesis_result = speech_synthesizer.speak_text_async(text).get()

这里我们选择zh-CN-XiaomoNeural作为默认AI语音,并且将text文本变量中的内容通过音箱进行输出。

如果愿意,我们也可以将语音输出为实体文件进行存储:

import azure.cognitiveservices.speech as speechsdk  
import os  speech_config = speechsdk.SpeechConfig(subscription=os.environ.get('KEY'), region="eastasia")  
audio_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True)file_config = speechsdk.audio.AudioOutputConfig(filename="./output.wav")  speech_config.speech_synthesis_voice_name='zh-CN-XiaomoNeural'  speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=file_config)  text = "hello 大家好,这里是人工智能AI机器人在说话"  speech_synthesis_result = speech_synthesizer.speak_text_async(text).get()

这里指定file_config配置为脚本相对路径下的output.wav文件:

ls  
output.wav

如此,音频文件就可以被保存起来,留作以后使用了。

语音调优

默认AI语音听多了,难免会有些索然寡味之感,幸运的是,Azure平台提供了语音合成标记语言 (SSML) ,它可以改善合成语音的听感。

根据Azure官方文档:https://learn.microsoft.com/zh-cn/azure/cognitive-services/speech-service/speech-synthesis-markup

通过调整语音的角色以及样式来获取定制化的声音:

语音	样式	角色  
en-GB-RyanNeural1	cheerful, chat	不支持  
en-GB-SoniaNeural1	cheerful, sad	不支持  
en-US-AriaNeural	chat, customerservice, narration-professional, newscast-casual, newscast-formal, cheerful, empathetic, angry, sad, excited, friendly, terrified, shouting, unfriendly, whispering, hopeful	不支持  
en-US-DavisNeural	chat, angry, cheerful, excited, friendly, hopeful, sad, shouting, terrified, unfriendly, whispering	不支持  
en-US-GuyNeural	newscast, angry, cheerful, sad, excited, friendly, terrified, shouting, unfriendly, whispering, hopeful	不支持  
en-US-JaneNeural	angry, cheerful, excited, friendly, hopeful, sad, shouting, terrified, unfriendly, whispering	不支持  
en-US-JasonNeural	angry, cheerful, excited, friendly, hopeful, sad, shouting, terrified, unfriendly, whispering	不支持  
en-US-JennyNeural	assistant, chat, customerservice, newscast, angry, cheerful, sad, excited, friendly, terrified, shouting, unfriendly, whispering, hopeful	不支持  
en-US-NancyNeural	angry, cheerful, excited, friendly, hopeful, sad, shouting, terrified, unfriendly, whispering	不支持  
en-US-SaraNeural	angry, cheerful, excited, friendly, hopeful, sad, shouting, terrified, unfriendly, whispering	不支持  
en-US-TonyNeural	angry, cheerful, excited, friendly, hopeful, sad, shouting, terrified, unfriendly, whispering	不支持  
es-MX-JorgeNeural1	cheerful, chat	不支持  
fr-FR-DeniseNeural1	cheerful, sad	不支持  
fr-FR-HenriNeural1	cheerful, sad	不支持  
it-IT-IsabellaNeural1	cheerful, chat	不支持  
ja-JP-NanamiNeural	chat, customerservice, cheerful	不支持  
pt-BR-FranciscaNeural	calm	不支持  
zh-CN-XiaohanNeural5	calm, fearful, cheerful, disgruntled, serious, angry, sad, gentle, affectionate, embarrassed	不支持  
zh-CN-XiaomengNeural1、5	chat	不支持  
zh-CN-XiaomoNeural5	embarrassed, calm, fearful, cheerful, disgruntled, serious, angry, sad, depressed, affectionate, gentle, envious	YoungAdultFemale, YoungAdultMale, OlderAdultFemale, OlderAdultMale, SeniorFemale, SeniorMale, Girl, Boy  
zh-CN-XiaoruiNeural5	calm, fearful, angry, sad	不支持  
zh-CN-XiaoshuangNeural5	chat	不支持  
zh-CN-XiaoxiaoNeural5	assistant, chat, customerservice, newscast, affectionate, angry, calm, cheerful, disgruntled, fearful, gentle, lyrical, sad, serious, poetry-reading	不支持  
zh-CN-XiaoxuanNeural5	calm, fearful, cheerful, disgruntled, serious, angry, gentle, depressed	YoungAdultFemale, YoungAdultMale, OlderAdultFemale, OlderAdultMale, SeniorFemale, SeniorMale, Girl, Boy  
zh-CN-XiaoyiNeural1、5	angry, disgruntled, affectionate, cheerful, fearful, sad, embarrassed, serious, gentle	不支持  
zh-CN-XiaozhenNeural1、5	angry, disgruntled, cheerful, fearful, sad, serious	不支持  
zh-CN-YunfengNeural1、5	angry, disgruntled, cheerful, fearful, sad, serious, depressed	不支持  
zh-CN-YunhaoNeural1、2、5	advertisement-upbeat	不支持  
zh-CN-YunjianNeural1、3、4、5	Narration-relaxed, Sports_commentary, Sports_commentary_excited	不支持  
zh-CN-YunxiaNeural1、5	calm, fearful, cheerful, angry, sad	不支持  
zh-CN-YunxiNeural5	narration-relaxed, embarrassed, fearful, cheerful, disgruntled, serious, angry, sad, depressed, chat, assistant, newscast	Narrator, YoungAdultMale, Boy  
zh-CN-YunyangNeural5	customerservice, narration-professional, newscast-casual	不支持  
zh-CN-YunyeNeural5	embarrassed, calm, fearful, cheerful, disgruntled, serious, angry, sad	YoungAdultFemale, YoungAdultMale, OlderAdultFemale, OlderAdultMale, SeniorFemale, SeniorMale, Girl, Boy  
zh-CN-YunzeNeural1、5	calm, fearful, cheerful, disgruntled, serious, angry, sad, depressed, documentary-narration	OlderAdultMale, SeniorMale

这里将语音文本改造为SSML的配置格式:

import os  
import azure.cognitiveservices.speech as speechsdkspeech_config = speechsdk.SpeechConfig(subscription=os.environ.get('KEY'), region="eastasia")  
audio_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True)file_config = speechsdk.audio.AudioOutputConfig(filename="./output.wav")  speech_config.speech_synthesis_voice_name='zh-CN-XiaomoNeural'  speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=file_config)  #text = "hello 大家好,这里是人工智能AI机器人在说话"  #speech_synthesis_result = speech_synthesizer.speak_text_async(text).get()  text = """  <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="zh-CN">  <voice name="zh-CN-XiaoxiaoNeural">  <mstts:express-as style="lyrical"  role="YoungAdultFemale" >  <prosody rate="+12.00%">  hello 大家好,这里是刘悦的技术博客  大江东去,浪淘尽,千古风流人物。  
故垒西边,人道是,三国周郎赤壁。  
乱石穿空,惊涛拍岸,卷起千堆雪。  
江山如画,一时多少豪杰。  
</prosody>  </mstts:express-as>  </voice>  </speak>"""   result = speech_synthesizer.speak_ssml_async(ssml=text).get()

通过使用style和role标记进行定制,同时使用rate属性来提升百分之十二的语速,从而让AI语音更加连贯顺畅。注意这里使用ssml=text来声明ssml格式的文本。

结语

人工智能AI语音系统完成了人工智能在语音合成这个细分市场的落地应用,为互联网领域内许多需要配音的业务节约了成本和时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/73195.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对接百度文心一言API---人工智能工作笔记0039

1.获取文心一言的api key 这个地址然后 点击 创建API key就可以了 然后先用postman测试一下 https://wenxin.baidu.com/moduleApi/portal/api/oauth/tokenclient_credentials application/x-www-form-urlencoded 注意 这里的参数grant_type这个是client_credentials是固定的…

斩获23项冠军,日均调用破万亿!百度交出年度AI成绩单:语音语言领衔技术突破,国产自研成大趋势...

乾明 雷刚 发自 凹非寺 量子位 报道 | 公众号 QbitAI 刚刚&#xff0c;百度一年AI成绩单官宣。 作为中国AI头雁&#xff0c;百度的成绩单不止代表巨头公司业绩&#xff0c;也代表了技术前沿现状和产业基本情况。 而且诸多进展&#xff0c;也是全新起跑线上全球AI发展的侧影&am…

AI百科:一个开启人工智能时代的综合性平台

无论是人工智能的快速发展还是AI技术在各个领域的广泛应用&#xff0c;都让我们对智能未来充满了期待和好奇。随着科技的进步&#xff0c;发现了一个好网站&#xff0c;一个集合了丰富AI工具和产品介绍的综合性网站—— AI百科。 在人工智能&#xff08;AI&#xff09;领域的快…

三大运营商乘风破浪,为什么离不开BAT等互联网企业?

【全球云观察 &#xff5c; 热点关注】对于中国联通从2017年开始的混改&#xff0c;业界关注挺多&#xff0c;之后确实带入了互联网企业如腾讯、京东、阿里、百度等参与&#xff0c;从而对中国联通在云计算、物联网等新兴技术领域的发展激发了业务的创新热情。 特别是2022年11…

周鸿祎:腾讯将来可能会是中国最大的运营商

近日&#xff0c;本刊记者采访了周鸿祎近一个小时&#xff0c;探讨未来互联网的变化、颠覆及未来&#xff0c;周鸿祎怎么看待互联网巨头的崛起对传统产业的影响和变化?在巨头林立的时代怎样才能颠覆式创新打败对手?如何选择你的对手和伙伴&#xff0c;周鸿祎说&#xff0c;“…

进程地址空间详解

进程地址空间 文章目录 进程地址空间验证地址空间的基本排布进程地址空间究竟是什么&#xff1f; 地址空间和物理内存之间的关系为什么要存在地址空间&#xff1f; 我们在学习C语言期间&#xff0c;经常可以提及到这些区域&#xff0c;有一个问题&#xff1a;这里的地址空间是内…

【GlobalMapper精品教程】044:空间操作(1)——交集(Intersection)

GlobalMapper提供的空间分析(操作)的方法有:交集、并集、单并集、差异、对称差集、相交、重叠、接触、包含、等于、内部、分离等,本文主要讲述交集工具的使用。 文章目录 一、实验数据二、符号化设置三、交集运算四、结果展示1. 运行提示2. 空间查看3. 属性表查看五、心灵感…

PostgreSQL的表空间

PostgreSQL之表空间 1、什么是PG中的表空间&#xff08;tablespace&#xff09;&#xff1f; pg中的表空间实际上就是文件系统中的一个目录, 是pg中数据库对象&#xff08;包括表、索引等&#xff09;的容器。 Pg使用操作系统的文件系统进行对象存储&#xff0c;每个数据库对…

Oracle表空间、用户详解

目录 新建连接三者关系表空间创建表空间修改表空间和数据文件修改数据文件容量新增表空间的数据文件重命名数据文件修改表空间状态修改数据文件状态 删除表空间查询 用户创建删除查询修改 新建连接 工具选择&#xff1a; 我们一般会选择一个工具来连接本地的Oracle&#xff0c…

49-Linux_malloc及4G虚拟空间分布

文章目录 malloc及4G虚拟空间分布1.malloc2.32位操作系统进程的4G虚拟空间分布1) 代码区(Text egment)&#xff1a;2) 全局初始化数据区/静态数据区(Data Segment)3) 未初始化数据区(BSS)&#xff1a;4) 堆区(heap)&#xff1a;5) 栈区(stack)&#xff1a; malloc及4G虚拟空间分…

(微信开发)Laya转发H5网页到微信,带图片

网页转发到微信时&#xff0c;带图片和自定义标题。2022年11月22号 关键解说 _wx.config({ debug: _wx_configdebug, appId: e.appId, timestamp: e.timestamp, nonceStr: e.nonceStr, signature: e.signature, jsApiList: [ // 所有要调用的 API 都要加到这个列表中 ‘onMen…

移动端H5页面开发的几种方法

单位&#xff1a; px 宽度百分比&#xff0c;高度px 在不同屏幕下的效果是不一样的&#xff0c;可用媒体查询&#xff08;media&#xff09;对不同宽度的手机进行适配&#xff0c;麻烦&#xff0c;不推荐使用 单位&#xff1a;rem 1、flexible 用法&#xff1a;https://blog.c…

H5页面调用微信支付

1、H5页面使用微信支付&#xff0c;首先需要注册微信公众号&#xff0c;在设置与开发>公众号设置>功能设置中配置业务域名、JS接口安全域名、网页授权域名。支付功能页面需在此域名链接下的页面。 2、加入域名后&#xff0c;就可以在H5页面调用微信支付功能。首先请求后台…

H5实现移动端,PC端页面分享

想做个页面分享功能&#xff0c;既要兼容移动端&#xff0c;也要兼容PC端。 找了一轮&#xff0c;决定PC端用百度分享的api&#xff1a; http://share.baidu.com/code/advance 移动端一开始想用soshm.js&#xff0c;发现ios没问题&#xff0c;但安卓手机在微信上点微博完全没…

app端内h5页面使用微信h5支付

app端内h5页面使用微信h5支付 app端内h5页面使用微信h5支付一、起初使用的方法二、解决方法三、最后 app端内h5页面使用微信h5支付 一、起初使用的方法 在对接支付宝支付的时候&#xff0c;我是使用window.open()直接打开后端返回的链接&#xff0c;完全没有任何问题&#xf…

H5页面内嵌到微信小程序和APP,做分享操作

前言 最近接到项目新需求&#xff0c;H5项目需要内嵌到微信小程序和APP里&#xff0c;然后将H5页面分享出去&#xff0c;被分享的人可以点击消息跳转到H5页面。H5页面不难&#xff0c;难的是要与微信小程序和APP进行交互&#xff0c;因为以前也没有接触过&#xff0c;所以这里…

H5及H5页面是什么意思?如何制作H5页面?

H5是HTML5的简称。HTML5是HTML最新的修订版本&#xff0c;是一种超文本标记语言。H5有两大特点&#xff1a;首先&#xff0c;强化了 Web 网页的表现性能。其次&#xff0c;追加了本地数据库等 Web 应用的功能。 H5页面就是利用html5制作出来的页面&#xff0c;尤其在微信中发展…

不懂技术,如何轻松制作微信H5页面?

H5这个由HTML5简化而来的词汇&#xff0c;正通过微信广泛传播。H5是集文字、图片、音乐、视频、链接等多种形式的展示页面&#xff0c;丰富的控件、灵活的动画特效、强大的交互、实现信息传播&#xff0c;非常适合通过手机的展示、分享。也因其灵活性高、开发成本低、制作周期短…

Java基础语法练习题

2023.2.18刷题 1、java的4类流程控制语句 解析&#xff1a; java的4类流程控制语句 循环语句&#xff1a;while&#xff0c;for&#xff0c;do while 选择语句&#xff08;分支语句&#xff09;&#xff1a;if,switch 跳转语句&#xff1a;break,continue,break,label 异常处理…

java里在做TCP通讯的时候,一直报java.net.ConnectException: Connection timed out: connect的错误?

可能的你的ip地址发生了变化&#xff1a; 1.在cmd里面输入&#xff1a; ipconfig 2.找到ipv4地址 3.把客户端的Socket S new Socket("192.168.31.65",10002);的192.168.31.65改成现在的即可。