Windows Phone 8 SpeechSynthesizer

  • 1911
  • 0
  • 2012-11-06

WP8 SpeechSynthesizer

  SpeechSynthesizer類別用來處理合成文字轉換語音 (TTS) 聲音的類別,也就說你給他一段文字他就唸給你聽啦

 

1.首先我們來使用非同步說出純文字字串的內容,只要你打上二行指令就可以了,下面有二種寫法可以選擇一種貼到你的程式碼就好了最後結果都是一樣的

   1:          private void Button_Click_1(object sender, RoutedEventArgs e)
   2:          {
   3:               SpeechSynthesizer ss = new SpeechSynthesizer();
   4:              ss.SpeakTextAsync("你有一個新訊息");
   5:          }
   6:  
   7:          private async  void Button_Click_1(object sender, RoutedEventArgs e)
   8:          {
   9:              SpeechSynthesizer ss = new SpeechSynthesizer();
  10:              await ss.SpeakTextAsync("你有一個新訊息");
  11:          }

當你第一次貼上很興奮要run的時候突然給你來個錯誤會覺得失望跳出下面訊息不要灰心,這個是你的設定檔沒勾選所以只要參考下面畫面勾一下就好了

image

在方案總管展開Properties目錄匣看到WMAppManifest.xml在給你用滑鼠點二下就出現下面的設定畫面,找到ID_CAP_SPEECH_RECOGNITION鉤一下,在重新啟動程式就會聽到很動人的聲音出來

image

 

2.接著我們可以設定合成語音,取得文字轉換語音 (TTS) 聲音的語言及文字轉換語音 (TTS) 聲音的性別,下面的範例是取得英文男性的發音

   1:   SpeechSynthesizer ss = new SpeechSynthesizer();
   2:   VoiceInformation vi = InstalledVoices.All.Where(v => v.Language == "en-US" && v.Gender == VoiceGender.Male).FirstOrDefault();
   3:   ss.SetVoice(vi);
   4:   ss.SpeakTextAsync("You've Got Message");

 

3.在來我們可以搭配語音合成標記語言 (SSML) 標記和文字轉換語音聲音,非同步說出文字字串,這個標記裡面可以調整說話的聲音大小及速度快慢還有停頓時間長短,這樣在模擬說話就會有抑揚頓輟的感覺了

   1:   System.Text.StringBuilder sb = new System.Text.StringBuilder();
   2:   sb.Append("<speak version=\"1.0\" xmlns:ssml=\"http://www.w3.org/2001/10/synthesis\" xml:lang=\"zh-TW\">");
   3:   sb.Append("<sentence>");
   4:   sb.Append(" <prosody volume=\"80\">你有<break time=\"500ms\" /></prosody>");
   5:   sb.Append(" <prosody rate=\"-20%\" volume=\"100\"><emphasis>3 <break time=\"50ms\" /> 個</emphasis></prosody>");
   6:   sb.Append(" <prosody volume=\"900\"> <break time=\"500ms\" /> 新訊息");
   7:   sb.Append("</prosody></sentence></speak>");
   8:   SpeechSynthesizer ss = new SpeechSynthesizer();
   9:   ss.SpeakSsmlAsync(sb.ToString());