必应语音API(Bing text to speech API)

前言

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密钥就是:

必应语音API(Bing text to speech 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.****.net/kwgrg/article/details/54809238

Have fun!

上一篇:xmppmini 项目详解:一步一步从原理跟我学实用 xmpp 技术开发 2.登录的实现


下一篇:一步一步开发Game服务器(四)地图线程