窝牛号

基于python3实现Azure机器学习最接近人声的文本转语音功能

上期文章,我们介绍了如何使用Azure来创建一个语音服务API,哪里,我们得到了API的key,以及语音服务的基本信息,包含地区等,这些都是本期代码需要的参数

听了那么多AI合成的语音,Azure机器学习的文本转语音最接近人声

下图是Azure官方的一个语音合成流程图,大致包含如下步骤

准备需要合成语音的text文件或者SSML文件向API发送请求API服务提供文本转语音功能(本步骤直接在Azure服务器上执行)用户端检查服务状态,若提示为succeeded,说明服务完成(由于是长语言转换功能,服务器需要时间较长,程序可以循环判断目前的转换状态)下载转换完成的语言

——1——

文本准备

对于文本的要求如下:

文件是纯文本文件 (.txt) 或 SSML 文本 (.txt)。

文件已编码为UTF-8 格式。

文件是单个文件,而不是 zip 文件。

文件包含 400 多个字符(对于纯文本),或 400 个可计费字符(对于 SSML 文本),并且少于 10,000 个段落。

对于纯文本,通过点击 Enter/Return 来分隔每个段落。

对于 SSML 文本,每个 SSML的每个部分都被视为一个段落。 按不同段落分隔 SSML 部分。

——2——

获取支持的语音列表

由于不同的API服务会使用不同的地区与付费标准,Azure API 在进行访问之前,我们首先查看一下自己API对应的语音列表,我们后期需要合成的语音只能从语音列表中选取,否则API会返回错误信息

import json import ntpath import requests input_file_path_text = &39; TTS_voicename = &34; TTS_KEY = &39; TTS_region = &39; TTS_locale = &34; 39;https://{}.customvoice.api.speech.microsoft.com/api/texttospeech/v3.0/longaudiosynthesis/voices&39;Ocp-Apim-Subscription-Key&34;zh-CN-XiaoxiaoNeural&39;your key&39;eastus&34;zh-CN&34;values&34;locale&34;ko-KR&34;voiceName&34;ko-KR-SunHiNeural&34;description&34;{&34;:&34;}&34;gender&34;Female&34;createdDateTime&34;2021-11-30T15:12:34.717Z&34;properties&34;publicAvailable&34;locale&34;de-DE&34;voiceName&34;de-DE-KatjaNeural&34;description&34;{&34;:&34;}&34;gender&34;Female&34;createdDateTime&34;2021-11-30T13:48:10.387Z&34;properties&34;publicAvailable&34;locale&34;zh-CN&34;voiceName&34;zh-CN-XiaoyouNeural&34;description&34;{&34;:&34;}&34;gender&34;Male&34;createdDateTime&34;2021-11-30T16:55:21.760Z&34;properties&34;publicAvailable&39;https://{}.customvoice.api.speech.microsoft.com/api/texttospeech/v3.0/longaudiosynthesis&39;Ocp-Apim-Subscription-Key&39;voicename&39;displayname&39;long audio synthesis sample&39;description&39;sample description&39;locale&39;voices&39;outpUTFormat&39;riff-16khz-16bit-mono-pcm&39;concatenateresult&39;script&39;rb&39;text/plain&39;response.status_code: %d&39;Location&39;Location&39;Ocp-Apim-Subscription-Key&34;models&34;voiceName&34;zh-CN-XiaoxiaoNeural&34;properties&34;outputFormat&34;riff-16khz-16bit-mono-pcm&34;concatenateResult&34;totalDuration&34;PT0S&34;billableCharacterCount&34;id&34;7e3d9994-d319-44f3-9b35-02fe253a7643&34;lastActionDateTime&34;2022-03-24T05:33:48.440Z&34;status&34;Running&34;createdDateTime&34;2022-03-24T05:28:50.267Z&34;locale&34;zh-CN&34;displayName&34;long audio synthesis sample&34;description&34;sample description&39;https://{}.customvoice.api.speech.microsoft.com/api/texttospeech/v3.0/longaudiosynthesis/{}/files&39;Ocp-Apim-Subscription-Key&39;response.status_code: %d&34;values&34;name&34;3e322b4a-0aed-49e3-874e-5066c12e15a2.txt&34;kind&34;LongAudioSynthesisScript&34;properties&34;size&34;createdDateTime&34;2022-03-24T05:28:50.190Z&34;links&34;contentUrl&34;https://cvoiceprodeus.blob.core.windows.net/bestor-c6e3ae79-1b48-41bf-92ff-940bea3e5c2d/VoiceSynthesisData/3e322b4a-0aed-49e3-874e-5066c12e15a2.txt?sv=2019-07-07&sr=b&sig=iGHOI1h%2BiCT%2Brb/3rDE1GH2FyOFK8ALr/khoMuVxqDY%3D&st=2022-03-24T05:35:32Z&se=2022-03-24T17:40:32Z&sp=rl&34;name&34;voicesynthesis_waves.zip&34;kind&34;LongAudioSynthesisResult&34;properties&34;size&34;createdDateTime&34;2022-03-24T05:35:38.140Z&34;links&34;contentUrl&34;https://cvoiceprodeus.blob.core.windows.net/bestor-c6e3ae79-1b48-41bf-92ff-940bea3e5c2d/VoiceSynthesisData/8a8cb7b2-2fc6-4102-b57c-06d0cf0a7740?sv=2019-07-07&sr=b&sig=8SG%2BGAOx0UV2BslaI5xi5xEqZO%2BZ5IhPVPyd5lHVa1s%3D&st=2022-03-24T05:35:32Z&se=2022-03-24T17:40:32Z&sp=rl&34;kind&34;LongAudioSynthesisScript&34;kind&34;LongAudioSynthesisResult&34;123.txt&34;123.zip"),第二个链接返回一个压缩包,里面有合成的wav的语音

——6——

REST API 中的 HTTP 响应代码和消息

下表详细介绍了 REST API 中的 HTTP 响应代码和消息。

API HTTP 状态代码 说明 解决方案

400 此区域未启用语音合成。 使用受支持区域更改语音订阅密钥。 400 只有此区域的标准语音订阅才有效。 将语音订阅密钥更改为“标准”定价层。 400 超过 Azure 帐户的 20,000 个请求限制。 在提交新请求之前需删除一些请求。 服务器将为每个 Azure 帐户最多保留 20,000 个请求。 请在提交新请求之前删除一些请求。 400 此模型不能用于语音合成:{modelID}。 请确保 {modelID} 的状态正确。 400 请求区域与模型区域不一致:{modelID}。 请确保 {modelID} 区域与请求区域匹配。 400 语音合成仅支持使用包含字节顺序标记的 UTF-8 编码中的文本文件。 请确保输入文件使用包含字节顺序标记的 UTF-8 编码。 400 语音合成请求中只允许有效的 SSML 输入。 请确保输入 SSML 表达式正确。 400 在输入文件中找不到语音名称 {voiceName}。 输入 SSML 语音名称与模型 ID 不对齐。 400 输入文件中的段落数应小于 10,000。 请确保文件中的段落数小于 10,000。 400 输入文件应超过 400 个字符。 请确保输入文件超过 400 个字符。 404 找不到语音合成定义中声明的模型:{modelID}。 请确保 {modelID} 正确。 429 超出活动语音合成限制。 请耐心等待,直至一些请求处理完成。 对于每个 Azure 帐户,服务器最多可以运行 120 个请求并将其排入队列。 请耐心等待,避免在某些请求处理完成之前提交新请求。 全部 429 请求太多。 对于每个 Azure 帐户,客户端每秒最多可以向服务器提交 5 个请求。 请减少每秒请求数量。 Delete 400 语音合成任务仍在使用中。 只能删除“已完成”或“已失败”的请求。 GetByID 404 找不到指定的实体。 请确保合成 ID 正确。

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除

窝牛号 wwww.93ysy.com   沪ICP备2021036305号-1