前言

Link : Microsoft Speech API overview

通过这个链接,大致了解Bing speech API的语音识别和语音合成两部分,

这次是需要用到TTS,所以就直接看TTS相关的文档。

Link : Bing text to speech API

 

简介

使用Bing语音合成API,需要应用程序通过发送HTTP请求到云端,云端合成为人声后返回音频文件。

 

语音合成请求

JSON Web Token(JWT) access token


每一个的语音合成请求都需要一个JSON Web Token(JWT) access token,且这个JWT要放在语音请求的header中。每一个JWT持续10分钟,如果超时或者没有获得这个JWT,那么你的语音请求就会得到**[403 Forbidden]**的response。

所以,发送语音请求的第一步需要根据你的API密钥来获取,API密钥就是:

登录后就看的到了,有两个,哪个都行。

根据文档,发送POST请求来获取Base64 access token,用curl就如下:

E:\xxx>curl.exe -X POST --header "Content-Length: 0" --header "Ocp-Apim-Subscription-Key:your api key goes here" "https://api.cognitive.microsoft.com/sts/v1.0/issueToken"

当然,用几次你就会想还是写个程序来的方便,哈哈。

那么,就得到了Base64 access token的一串东西,现在可以来发送语音合成的请求了。

 

HTTP headers


如下表:

Header Value Comments
Content-Type application/ssml+xml The input content type.
X-Microsoft-OutputFormat 1.ssml-16khz-16bit-mono-tts 2.raw-16khz-16bit-mono-pcm 3.audio-16khz-16kbps-mono-siren 4.riff-16khz-16kbps-mono-siren 5.riff-16khz-16bit-mono-pcm 6.audio-16khz-128kbitrate-mono-mp3 7.audio-16khz-64kbitrate-mono-mp3 8.audio-16khz-32kbitrate-mono-mp3 The output audio format.
X-Search-AppId A GUID (hex only, no dashes) An ID that uniquely identifies the client application. This can be the store ID for apps. If one is not available, the ID can be user generated for an application.
X-Search-ClientID A GUID (hex only, no dashes) An ID that uniquely identifies an application instance for each installation.
User-Agent Application name The application name is required and must be fewer than 255 characters.
Authorization Authorization token See the Authorization token section.

不是每一项都必须,我只用了加粗的那3个header

 

Input parameters


好,头已经准备就绪,只等……

body部分包含SSML,SSML通过更改参数可以改变输出的声音。

所以,语音输出请求就像这样:

POST /synthesize
HTTP/1.1
Host: speech.platform.bing.com X-Microsoft-OutputFormat: riff-8khz-8bit-mono-mulaw
Content-Type: application/ssml+xml
Authorization: Bearer [Base64 access_token] <speak version='1.0' xml:lang='en-US'><voice xml:lang='en-US' xml:gender='Female' name='Microsoft Server Speech Text to Speech Voice (en-US, ZiraRUS)'>Microsoft Bing Voice Output API</voice></speak>

请求之后一会儿服务器返回音频文件,程序中写入文件就好了。

 

SSML参考资料:

Changing voice output via SSML

SSML W3C Specification

P.S. Bing speech和Microsoft speech似乎不是同一套东西,但大部分规则是相通的:

Speech Synthesis Markup Language Reference

(这里是个总览,可以选择具体元素的页面)

以下几个页面对SSML的修饰有比较大的帮助:

1.prosody Element

(包括音调、速率、持续时间、音量等的描述)

2.phoneme Element

(这个元素主要针对如何改变发音的描述,此页面没有中文的例子,但可以先看看)

SSML说明

< prosody >音律调整

此部分说明了音律调整要用到的包括pitch(音调)、contour("音形")、 range(音调范围)、rate(速率)、duration(持续时间)和volume(音量)

语法:

<prosody pitch="value" contour="value" range="value" rate="value" duration="value" volume="value"> </prosody>

参数信息:

属性 描述
pitch 代表文字的基准音调,它的值有3种不同的方式表达:1.一个绝对的值,使用“数字Hz”的方式。例如,600Hz;2.一个相对的值,使用“+/-数字Hz/st”的方式,表示音调的变化程度。例如,+80Hz 或 -2st。st(semitone)表示一个半音;3.一个枚举的值,包括:x-low, low, medium, high, x-high, or default
contour 在不同的时间段内描述出音调变化(感觉是个高级特性),时间段用%作区隔,代表在此百分比时音调开始变化。例如,< prosody contour="(0%,+20Hz) (10%,-2st) (40%,+10Hz)" >
range 代表文字音调的范围,值同上面的pitch
rate 代表文字的阅读速率,它的值有2种不同的方式表达:1.一个相对的值,例如:1表示速率不变;.5表示速率减半;3表示3倍基本速率(测试发现用"+20%"的方式也行);2.一个枚举的值,包括:x-slow, slow, medium, fast, x-fast, or default
duration 文字阅读的持续时间,单位为s或ms
volume 代表阅读的音量大小,它的值有3中不同的方式表达:1.一个绝对的值,范围在0.0~100.0(从最小声到最大声)。例如,75。默认为100.0;2.一个相对的值,使用“+/-数字”的方式。例如,+10或-5.5;3.一个枚举的值,包括:silent, x-soft, soft, medium, loud, x-loud, or default
< phoneme >音素调整

此部分说明了如何从支持的语音字母表中来更改文字的发音。

语法:

<phoneme alphabet="string" ph="string"> </phoneme>

注意:参数alphabet的值只有3个:ipa | x-microsoft-sapi | x-microsoft-ups

也就是支持的发音字母表,参见:3.Phonetic Alphabet Reference

(Microsoft.speech的发音表,总共有3个,SAPI支持中文)

参数信息:

属性 描述
alphabet 可选。选择一个合适的发音字母表,值为:ipa / x-microsoft-sapi / x-microsoft-ups
ph 必须。一个描述如何发音的字符串,如果这个字符串不合法,TTS引擎会拒绝SSML文档,不会生成任何输出。中文发音标注的方式,例如,< phoneme alphabet="x-microsoft-sapi" ph="o 3" >哦< phoneme >,这里“哦”字的发音就是o的第三声。另外,12345代表汉语发音的4声和轻声

SSML例子:

<speak version="1.0"
xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="zh-CN">
<voice xml:lang="zh-CN" name="Microsoft Server Speech Text to Speech Voice (zh-CN, Kangkang, Apollo)">
<prosody rate="+20%" pitch="+8st" duration="220ms">
<phoneme alphabet="x-microsoft-sapi" ph="a 1">啊</phoneme>
</prosody>
<prosody rate="-20%" duration="380ms">
<phoneme alphabet="x-microsoft-sapi" ph="ou 1">哦</phoneme>
</prosody>
</voice>
</speak>

 

对了,还有另一位老兄的文章,是Bing speech语音识别那部分的:http://blog.csdn.net/kwgrg/article/details/54809238

Have fun!

最新文章

  1. iOS开发 Xcode8中遇到的问题及改动
  2. Snap.svg – 现代 Web 开发必备的 JavaScript SVG 库
  3. a版本冲刺第三天
  4. Java远程调试代码不一致问题汇总
  5. 十、mysql事务的简介
  6. 信鸽推送.net 服务端代码
  7. 【HDOJ】1542 Atlantis
  8. 5.编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试St
  9. 在使用pydelicious时出现HTTP Error 500: Internal Server Error的错误的解决方法:
  10. 持续集成-jenkins介绍与环境搭建
  11. STS的安装以及IDEA安装和破解过程
  12. VMware虚拟机安装CentOS系统图文教程
  13. mongo中的模糊查询
  14. 如果让我重来,我会选择C和(或者)Python。
  15. SVN入门使用
  16. BZOJ3534:[SDOI2014]重建(矩阵树定理)
  17. [Winform]CefSharp ——js调用c#方法
  18. 【小白的CFD之旅】22 好网格与坏网格
  19. 汽车检测SIFT+BOW+SVM
  20. Codeforces Round #298 (Div. 2) A. Exam 构造

热门文章

  1. arcgis api for javascript中使用proxy.jsp
  2. OutputStreamWriter与InputStreamReader(转换流)
  3. Python yield的用法
  4. centos7下安装docker(12.5容器在单个host上的网络总结)
  5. input框下拉综合搜索
  6. 用PHP的curl实现并发请求远程文件(并发抓取远程网页)
  7. 简单使用metamascara
  8. Java的快速失败和安全失败
  9. 1002-过河卒-洛谷-luogu-动态规划dp
  10. Qt Creator中如何选择某个子项目为启动项目