2016年9月22日 星期四

Microsoft Cognitive Services (4) - 使用Speech API讓你的電腦說話

讓你的電腦說話早已經不是新鮮事了,早期WP7.x的時代,我們就寫過程式碼讓手機說話,適當的採用語音輸出,對於用戶來說也是個不錯的互動體驗。

透過Cognitive Services中的Speech API讓電腦說話,用起來也相當簡單,它可以直接在雲端為你產生你指定的語音,並且將語音檔案binary傳回用戶端。

整體來說,使用該API的方式可參考底下:
Bing Text To Speech API

同樣的,使用時你會用到一組Key,這個Key與先前我們做語音辨識的時候使用的Key相同。呼叫 API前,我們需要先透過這組Key取得一個token (底下是postman呼叫畫面):

取得Token時,請用POST呼叫底下URL :
https://oxford-speech.cloudapp.net/token/issueToken

傳入的body是 :
grant_type=client_credentials&client_id=<Your subscription key>&client_secret=<Your subscription key>&scope=https://speech.platform.bing.com


其中的 Your subscription key 是我們前面說到的 key。

取得後的token應該是類似上圖中一長串的文數字。

接著,請組出底下這樣的XML,這組XML是用來告知Speech API我們要取得什麼語音:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="zh-TW">
<voice name="Microsoft Server Speech Text to Speech Voice (zh-TW, Yating, Apollo)">
哈囉,今天天氣不錯啊
</voice>
</speak>

這組XML是以body的方式傳入http post的呼叫,其URL是:
https://speech.platform.bing.com/synthesize

留意XML中的內容,voice name可讓我們指定語音的語言和類型,可用的內容可以參考底下這裡得知:
https://www.microsoft.com/cognitive-services/en-us/Speech-api/documentation/API-Reference-REST/BingVoiceOutput

你也可以透過底下這邊的工具來組這串XML:
https://www.microsoft.com/cognitive-services/en-us/speech-api

別忘記,呼叫上述http post時必須傳入底下的headers:
Content-Type : application/ssml+xml
X-Microsoft-OutputFormat : raw-8khz-8bit-mono-mulaw
Authorization : Bearer <剛才取得一長串token>

例如(底下是postman呼叫畫面):

也不是很複雜,透過這樣的方式,就能夠取得指定文字的音訊(.wav)檔案囉。

上面是透過測試工具post man來呼叫,如果要透過C#程式碼呼叫,則可參考底下連結:
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/6e7f64e4-052c-4753-8128-43b94045064a/mvp-sample-code-with-voice-output-rest-api-in-c?forum=mlapi

2 則留言:

Robin Li 提到...

文末的範例,不知道如何取得 client ID,試了許久放棄。
改用 https://github.com/Microsoft/Cognitive-Speech-TTS
貼上 Key 即可執行。

匿名 提到...

現在Bing speech API已經改版, 傳的參數已經不同@@
不知是否可以更新?