本文正在参加「金石方案 . 瓜分6万现金大奖」

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

本次,咱们经过Python3.10版别接入Azure渠道语音组成接口,打造一款本地的TTS服务(文本转语音:Text To Speech)。

准备工作

首先依据Azure渠道官方文档:learn.microsoft.com/zh-cn/azure…

在渠道上创立免费订阅服务:azure.microsoft.com/zh-cn/free/…

免费订阅成功后,进入资源创立环节,这儿咱们拜访网址,创立免费的语音资源:portal.azure.com/#create/Mic…

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

这儿留意订阅挑选免费试用,运用区域挑选东亚,假如在国外能够挑选国外的对应区域。

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

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

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

这儿相对保险的方法是将秘钥写入本地体系的环境变量中。

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是挑选当时计算机默认的音箱进行输出操作。

接着,依据官方文档的装备,挑选一个语音机器人:learn.microsoft.com/zh-cn/azure…


纯文本	wuu-CN-XiaotongNeural1(女)  
wuu-CN-YunzheNeural1(男)	不支持  
yue-CN	中文(粤语,简体)	yue-CN	纯文本	yue-CN-XiaoMinNeural1(女)  
yue-CN-YunSongNeural1(男)	不支持  
zh-CN	中文(普通话,简体)	zh-CN	音频 + 人工符号的脚本  
纯文本  
结构化文本  
短语列表	zh-CN-XiaochenNeural4、56(女)  
zh-CN-XiaohanNeural2、456(女)  
zh-CN-XiaomengNeural1、2456(女)  
zh-CN-XiaomoNeural2、3456(女)  
zh-CN-XiaoqiuNeural4、56(女)  
zh-CN-XiaoruiNeural2、456(女)  
zh-CN-XiaoshuangNeural2、4568(女)  
zh-CN-XiaoxiaoNeural2、456(女)  
zh-CN-XiaoxuanNeural2、3456(女)  
zh-CN-XiaoyanNeural4、56(女)  
zh-CN-XiaoyiNeural1、2456(女)  
zh-CN-XiaoyouNeural4、568(女)  
zh-CN-XiaozhenNeural1、2456(女)  
zh-CN-YunfengNeural1、2456(男)  
zh-CN-YunhaoNeural1、2456(男)  
zh-CN-YunjianNeural1、2456(男)  
zh-CN-YunxiaNeural1、2456(男)  
zh-CN-YunxiNeural2、3456(男)  
zh-CN-YunyangNeural2、456(男)  
zh-CN-YunyeNeural2、3456(男)  
zh-CN-YunzeNeural1、23456(男)	神经网络定制声音专业版  
神经网络定制声音精简版(预览版)  
跨言语语音(预览版)  
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、56(女)  
zh-HK-HiuMaanNeural4、56(女)  
zh-HK-WanLungNeural1、456(男)	神经网络定制声音专业版  
zh-TW	中文(台湾普通话)	zh-TW	纯文本	zh-TW-HsiaoChenNeural4、56(女)  
zh-TW-HsiaoYuNeural4、56(女)  
zh-TW-YunJheNeural4、56(男)	神经网络定制声音专业版

单以中文语音论,可挑选的规模仍是适当广泛的。

持续修改代码:

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官方文档:learn.microsoft.com/zh-cn/azure…

经过调整语音的人物以及款式来获取定制化的声音:

语音	款式	人物
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 speechsdk
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()  
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  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语音体系完成了人工智能在语音组成这个细分市场的落地应用,为互联网范畴内许多需要配音的事务节约了本钱和时间。