必應語音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密鑰就是:
https://azure.microsoft.com/zh-cn/try/cognitive-services/?api=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.csdn.net/kwgrg/article/details/54809238

Have fun!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM