iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
Mobile Development

Ionic結合ChatGPT - 30天打造AI英語口說導師APP系列 第 16

【Day - 16】Azure AI Service - 認識Speech Service語音服務

  • 分享至 

  • xImage
  •  

在【Day - 14】我們完成了基本的聊天對話功能,然而,所有的回應都是以文字的形式呈現,於是我想透過Azure AI Service的語音服務,將文字轉成語音,進一步提升對話的真實感。今天,我們來探索Speech Service語音服務吧!

Speech Service語音服務 - 文字轉語音

Speech Service語音服務是Azure平台的一部分,它提供了一系列與語音相關的服務。這些服務包含了語音識別、語音合成等實時及靈活的服務,這些服務可以應用於各類的服務和設備上。而我們將使用其中的文字轉語音服務,這項服務是由「深度神經網路」所驅動,並能提供相當逼真的語音輸出。加上語音合成標記語言(SSML)的幫助,我們甚至可以調整語音的各項細節,使輸出的語音更為真實。

另外可以到Speech Studio上測試微軟所提供的「語音資源庫」,上面有各種語音和說話風格試聽,還有各種使用案例可以參考。
https://ithelp.ithome.com.tw/upload/images/20230916/20161663Ad3uYHVMHQ.png
目前Azure的Speech Service語音服務定價有兩個:

  • 免費(F0)
  • 標準(S0)

關於標準的定價可以參考官網

建立語音服務

要使用文字轉語音前需要建立語音服務。我們可以使用Azure CLI指令來迅速建立一個Speech Service語音服務。由於「免費的定價層(F0)」提供神經文字轉換語音每個月50萬字元的額度,已經很足夠我使用,因此直接選擇免費即可。其餘的參數則可以參考微軟提供的官方文檔

我們使用以下命令建置服務:

az cognitiveservices account create --kind SpeechServices --location "East Asia" --name <服務名稱> --resource-group <資源群組名稱> --sku F0

參數設定:

  • --kind:API名稱。這裡選擇使用SpeechServices。
  • --sku:定價層設定。

建立完成後,可以到Azure上確認該語音服務是否已經建立完成。接著,點擊服務進入後,在「概觀」的頁面中找到「金鑰」並記下來,我們等等會使用到。到這邊Speech Service語音服務就建立完成了。
https://ithelp.ithome.com.tw/upload/images/20230916/20161663FQiP70IPSi.jpg
https://ithelp.ithome.com.tw/upload/images/20230916/20161663ScZ84ZMZxK.png

測試文字轉語音API

設置完成Speech Service語音服務之後,我們使用Postman來測試這項服務。需要注意的是,API的請求網址會根據「服務的地區」而定,各個地區的URL可以在官方文檔中找到:

https://<你的服務所在地區>.tts.speech.microsoft.com/cognitiveservices/v1

接著是請求Header的部分,我們需要添加以下四個欄位:

  • Ocp-Apim-Subscription-Key:服務金鑰,剛剛在概觀頁面上複製的金鑰。
  • X-Microsoft-OutputFormat:語音輸出的格式,設定為audio-16khz-128kbitrate-mono-mp3,其餘音訊格式可以參考官方文檔
  • Content-Type:固定是application/ssml+xml。
  • User-Agent:應用程式的名稱。

https://ithelp.ithome.com.tw/upload/images/20230916/20161663P2AqpKZzJ3.png
在請求的Body部分,我們需要提供相應的SSML範例。在這個例子中,我們選擇使用的語音是「en-US Tony」。這個可以根據需求或個人喜好自由更換:

<speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" version="1.0" xml:lang="en-US">
    <voice name="en-US-TonyNeural">
        Welcome to use Audio Content Creation to customize audio output for your products.      
    </voice>
</speak>

最後,在Postman的「Send」選項中下拉並選擇「Send and Download」,即可下載生成的語音檔案。就這樣,成功完成了一個快速而簡易的文字轉語音API測試!
https://ithelp.ithome.com.tw/upload/images/20230916/20161663YhJ521R3LA.png

SSML語音合成標記語言

SSML(Speech Synthesis Markup Language)是由W3C(World Wide Web Consortium)標準化基於XML的標記語言,專門用於提升文字轉語音合成的質量。它提供豐富且可定制的調整方案,包括「語調」、「語速」、「音量」等細節,從而使文字轉語音在更多的場景下有更自然的表現。

SSML基礎檔案結構介紹

接下來,我將介紹幾個基本的而且會使用到的基本SSML元素:

  • speak:speak元素是SSML中的根元素,也是必要的項目。它需要包括的資訊有「版本號」、「所使用的語言」,以及對「特定詞彙的標記定義」:

    <speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" version="1.0" xml:lang="en-US"></speak>
    
  • voice:voice元素在SSML中用來設定文字的語言,以及不同角色的聲音調性,例如:「男性或女性的聲音」、「聲音的粗細」和「高低」等。這也是一個必要元素,每個speak元素內至少要有一個voice元素:

    <voice name="en-US-TonyNeural">
    	Hello! How are you?
    </voice>
    

    此外,speak元素內可以包含多個voice元素,這些voice元素可以一起使用,創造出類似兩個人在對話或是有聲書的效果。例如:

    <speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" version="1.0" xml:lang="en-US">
        <voice name="en-US-TonyNeural">
            Hello there.    
        </voice>
        <voice name="en-US-GuyNeural">
            Hi, Nice to meet you.
        </voice>
        <voice name="en-US-TonyNeural">
            Nice to meet you too.
        </voice>
    </speak>
    
  • mstts:express-as:是一個用於設定語音風格樣式的元素,它包含三個可以進行調整的屬性:

    • style:是一個調整語音說話風格的屬性,例如:「愉快」、「生氣」、「傷心」、「興奮」等等。每個voice可以搭配的style都可能不同,因此如果需要查詢具體的搭配,可以通過語音清單API或到Speech Studio上查看。
      https://ithelp.ithome.com.tw/upload/images/20230916/20161663wCjuodgfeV.png

    • styledegree:這個屬性允許你調整說話風格的強度,可以針對不同的風格設定更強或更軟的語調,其範圍在0.01到2之間。

    • role:讓語音扮演特定角色,例如:「年輕男性」、「年輕女性」、「男孩」、「女孩」等。要注意的是,並不是每個語音都有這個角色扮演功能哦!
      https://ithelp.ithome.com.tw/upload/images/20230916/20161663ByT1uf3hxj.png

      <speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" version="1.0" xml:lang="en-US">
          <voice name="en-US-TonyNeural">
              <mstts:express-as style="excited" styledegree="1.5">
                  Hello there! Nice to meet you!
              </mstts:express-as>
              <mstts:express-as style="friendly">
                  It's a beautiful day, isn't it?
              </mstts:express-as>        
          </voice>
      </speak>
      
  • emphasis:這個元素用於強調特定的語氣。通過提升某個詞語或片段的語調,可以使聽者感覺到該內容的重要性或強調。此元素可以放置在mstts:express-as元素下方。另外,需要注意的是,只有「en-US-GuyNeural」、「en-US-DavisNeural」和「en-US-JaneNeural」的語音支援強調功能。它只有一個屬性,用於設定強調的程度。

    • level:這是強調元素的屬性,用以設定強調的強度。可選的值包括「reduced」、「none」、「moderate」和「strong」,我們可以根據需求選擇不同的強調程度:

      <speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" version="1.0" xml:lang="en-US">
          <voice name="en-US-GuyNeural">
              <mstts:express-as style="excited" styledegree="1">
                  Oh, that's fantastic! <emphasis level="moderate">Bon Jovi</emphasis> is a very popular band.
              </mstts:express-as>
          </voice>  
      </speak>
      
  • lang:當你需要在語音中混合多種語言時,可以使用特定的元素。這個元素必須置於voice元素的下方。需要注意,多語言功能通常只能在特定的語言角色中使用:

    <speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" version="1.0" xml:lang="en-US">
    	<voice name="en-US-RyanMultilingualNeural">
    	    <lang xml:lang="zh-TW">
    	        突然好想你
    	    </lang>
    	    <lang xml:lang="en-US">
    	        is a very touching song.
    	    </lang>    
    	</voice>
    </speak>
    

    https://ithelp.ithome.com.tw/upload/images/20230916/20161663lskiXbGPyY.png

結語

網路上的文字轉語音服務琳瑯滿目,但我最終選擇了使用Azure AI Service來實現這個功能。Azure的優勢在於其快速的部署服務、豐富的語音庫,以及完整的SSML支援。這些特性不僅讓我們可以更方便快速的實現我們的需求,同時也為我們提供了更多的可能性來優化和定制服務哦!



Github專案程式碼:Ionic結合ChatGPT - Day16


上一篇
【Day - 15】GPT Tokenizer - 計算對話字數
下一篇
【Day - 17】Prompt Engineering實戰2 - 控制模型輸出SSML格式
系列文
Ionic結合ChatGPT - 30天打造AI英語口說導師APP30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言