最近,微软对Azure AI语音服务进行了升级,发布了9种更真实的AI语音,其中有多年历史的”小小“-低幼版少女语音终于长大啦,读起中文文章来情感丰富,阴阳顿挫,简直真假难辨。
能不能在苹果手机上调用小小,直接对长文章生成音频呢?当然可以。
需要两个原料 和 一个菜谱
-
在苹果手机(iPhone)上执行自动化任务时,最便捷的方法是通过“快捷指令”(Shortcuts)应用。它是一个非常强大的工具,可以让你轻松创建自动化工作流程,而不需要复杂的编程技能;
-
您需要申请 Azure cloud 账户。
- 登录到Azure, https://portal.azure.com/
- 在Azure云中,需要申请并部署 speech 资源
- 注意:批量语音的 Endpoint 节点,亚洲地区目前只能选择 southeastaisa
有了原料,先看下微软官网提供的菜谱:用于文本转语音的批量合成 API - 语音服务 - Azure AI services | Microsoft Learn 吧啦吧啦都是介绍,关键两点:
- 用到两个 API :创建和获取
| Operation 操作 | Method 方法 | REST API call REST API 调用 |
|---|---|---|
| Create batch synthesis 创建批量合成 | PUT |
texttospeech/batchsyntheses/YourSynthesisId 文本到语音/批量合成/您的合成 ID |
| Get batch synthesis 获取批量合成 | GET |
texttospeech/batchsyntheses/YourSynthesisId 文本到语音/批量合成/您的合成 ID |
| List batch synthesis 批量合成列表 | GET |
texttospeech/batchsyntheses 文本到语音/批量合成 |
| Delete batch synthesis 删除批量合成 | DELETE |
texttospeech/batchsyntheses/YourSynthesisId 文本到语音/批量合成/您的合成 ID |
微软贴心提供了示例代码: cognitive-services-speech-sdk/samples/batch-avatar/python at master · Azure-Samples/cognitive-services-speech-sdk
- 自定义 Azure TTS 参数
-
语言和声音设置,在TTS请求正文中自定义您的语言和声音设置。在此处查找所有声音 https://learn.microsoft.com/en-us/azure/cognitive-services/speech-service/language-support?tabs=tts#supported-languages
-
新的成熟版”小小“:zh-CN-XiaoxiaoMultilingualNeural
-
在TTS请求头中,您可以指定“X-Microsoft-OutputFormat” 音频输出质量。在此处查找所有音频输出 https://learn.microsoft.com/en-us/azure/cognitive-services/speech-service/rest-text-to-speech?tabs=streaming#audio-outputs
核心 python 代码
调用创建 Api:
def submit_synthesis(job_id: str) -> bool:
url = f'{SPEECH_ENDPOINT}/texttospeech/batchsyntheses/{job_id}?api-version={API_VERSION}'
header = {
'Content-Type': 'application/json'
'Ocp-Apim-Subscription-Key': SUBSCRIPTION_KEY
}
payload = {
"inputKind": "PlainText",
'synthesisConfig': {
"voice": "en-US-AvaMultilingualNeural",
},
"inputs": [
{
"content": text
},
],
"properties": {
"outputFormat": "audio-24khz-160kbitrate-mono-mp3",
},
}
response = requests.put(url, json.dumps(payload), headers=header)
if response.status_code < 400:
logger.info('Batch synthesis job submitted successfully')
return True
调用获取 Api:
def get_synthesis(job_id: str):
url = f'{SPEECH_ENDPOINT}/texttospeech/batchsyntheses/{job_id}?api-version={API_VERSION}'
header = _authenticate()
response = requests.get(url, headers=header)
if response.status_code < 400:
logger.info('Get batch synthesis job successfully')
logger.info(response.json())
return response.json()['status']
主程序,轮询获得下载地址:
if __name__ == '__main__':
job_id = _create_job_id()
if submit_synthesis(job_id):
while True:
status = get_synthesis(job_id)
if status == 'Succeeded':
logger.info('batch synthesis job succeeded')
break
elif status == 'Failed':
logger.error('batch synthesis job failed')
break
else:
logger.info(f'batch synthesis job is still running, status [{status}]')
time.sleep(5)
如何改写为 ios shortcuts?
核心是使用快捷指令的 ”获取 url 内容“模块,一一对应,下面是例子:
获取 api 返回更加简单:
有需要完整代码的伙伴,可以留言索取。