快速体验微软TTS服务

打印 上一主题 下一主题

主题 527|帖子 527|积分 1581

微软的语音合成服务(TTS)拥有500多种高品质的音色,并且在全球都有节点可以接入,在国内访问延迟可以控制在毫秒级。下面介绍在不必要编码的环境下,如何快速体验微软TTS的结果。
方式一、微软语音库UI界面

语音库地址:Speech Studio
条件:有微软开辟账号
访问微软的语音库页面,在页面上选择必要体验的声音,然后输入对应文本,就能实时合成语音。


没有账号的话,可以听官方给的demo,结果可能会有差异。


方式二、REST API

TTS API:文本转语音 API 参考 (REST) - 语音服务 - Azure AI services | Microsoft Learn
条件:有语音服务的token
开辟者有可能没有账号的权限,但是一定有sts的token,服务上线也必要这个token。
通过API获取音频必要分三步:

  • 选取语音名称
  • 获取TTS的访问token
  • 调用语音合成接口
选取语音名称

一般我们会先在语音库试听声音的demo,大致选定几个声音。然后在“示例代码”里找到:
  1. config.SpeechSynthesisVoiceName = "zh-CN-XiaochenMultilingualNeural";
复制代码
"zh-CN-XiaochenMultilingualNeural"就是当前声音对应的名字。
另外,可以通过声音列表接口,获取全部支持的声音和可用的区域:
  1. curl 'https://eastasia.tts.speech.microsoft.com/cognitiveservices/voices/list' --header 'Authorization: Bearer {accessToken}'
  2. --- 返回值 ---
  3. [
  4.     {
  5.         "Name": "Microsoft Server Speech Text to Speech Voice (af-ZA, AdriNeural)",
  6.         "DisplayName": "Adri",
  7.         "LocalName": "Adri",
  8.         "ShortName": "af-ZA-AdriNeural",
  9.         "Gender": "Female",
  10.         "Locale": "af-ZA",
  11.         "LocaleName": "Afrikaans (South Africa)",
  12.         "SampleRateHertz": "48000",
  13.         "VoiceType": "Neural",
  14.         "Status": "GA",
  15.         "WordsPerMinute": "147"
  16.     },
  17.     ...
  18. ]
复制代码
哀求头里的accessToken就是第二步获取到访问token。
获取访问token

获取访问token必要先拿到语音服务的apiKey,这个必要用微软账号在后台先创建出来。然后通过接口获取访问token:
  1. curl -X POST 'https://eastasia.api.cognitive.microsoft.com/sts/v1.0/issueToken' --header 'Ocp-Apim-Subscription-Key: {apiKey}' -d ''
复制代码
调用语音合成接口

拿到访问token后,就能直接通过语音API /cognitiveservices/v1合成音频:
  1. curl -X POST 'https://eastasia.tts.speech.microsoft.com/cognitiveservices/v1' \
  2. -H 'Authorization: Bearer {accessToken}' \
  3. -H 'X-Microsoft-OutputFormat: audio-24khz-48kbitrate-mono-mp3' \
  4. -H 'User-Agent: TEST' \
  5. -H 'Content-Type: application/ssml+xml' \
  6. -d '<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US">
  7.   <voice name="zh-CN-XiaochenMultilingualNeural">
  8.         hi there!How was your weekend?Did you do anything interesting?
  9.   </voice>
  10. </speak>' --output test.mp3
复制代码
这里有几个留意点:

  • apiKey是和区域绑定,选择endpoint的时候要留意对应关系。区域和endpoint关系
  • X-Microsoft-OutputFormat决定合成音频的采样率和格式等信息,16khz结果较差,24khz和48kzh才有真人的感觉。音频输特别式
  • body里填的是SSML格式内容,voice标签可以指定声音名字。SSML介绍
方式三、通过SDK合成

SDK方式:文本转语音快速入门 - 语音服务 - Azure AI services | Microsoft Learn
条件:有语音服务的token
通过SDK合成原理是本地与TTS服务创建websocket连接,支持合成音频内容流式输出,并且增加了许多回调事件。
线上环境应该优先利用SDK合成方式,这种方式准备环境比较复杂,必要预安装一些插件,具体不睁开介绍,可以检察官方文档。安装语音SDK
安装完环境后,调用方式如下:
  1. SpeechConfig config = SpeechConfig.fromSubscription("{apiKey}", "{region}");
  2. config.setSpeechSynthesisOutputFormat(SpeechSynthesisOutputFormat.Audio24Khz48KBitRateMonoMp3);
  3. config.setSpeechSynthesisVoiceName("zh-CN-XiaochenMultilingualNeural");
  4. SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer(config, null);
  5. SpeechSynthesisResult speechSynthesisResult = speechSynthesizer.SpeakSsml("""
  6.                     <speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US">
  7.                       <voice name="zh-CN-XiaochenMultilingualNeural">
  8.                             hi there!How was your weekend?Did you do anything interesting?
  9.                       </voice>
  10.                     </speak>
  11.                     """);
  12. System.out.println("音频的二进制内容:" + speechSynthesisResult.getAudioData());
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表