第一種方案:
利用微軟text to speech引擎(TTS),讀取文本
(1)添加Microsoft Speech Object Library的項目引用
(2)引入using SpeechLib名稱控件
(3)讀取文本
SpeechVoiceSpeakFlags flag = SpeechVoiceSpeakFlags.SVSFlagsAsync; SpVoice voice = new SpVoice();
//默認使用“控制面板”—>“聲音”—>“錄制”選項卡的“配置”—>“文本到語音轉換”—>語言選擇中對應項,例如Microsoft Lily或Microsoft Sam
//此處可采用“預聽語音”測試,保證操作系統本身正確配置該語音包,尤其是B/S結構往往會被忽略
//否則會拋出異常:“沒有注冊類 (異常來自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))”
voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0); voice.Speak(textBox1.Text, flag);
(4)語言包的選擇(親測)
WindowsXP 中默認只安裝了Microsoft Sam,而且只能朗讀英文,不能讀中文,直接略過。(不推薦)
找了一個Microsoft_TTS_51_chs.msi安裝了以后多了一個Microsoft Simplified Chinese語音包,但只能讀中文,不能讀英文單詞,將單詞拆解為字母讀出(全中文可以)
Windows Vista/7中默認安裝Microsoft Lili,可以中英文混讀,但語音效果較好(推薦),但是XP系統無法安裝,Microsoft Anna 只能讀英文(不推薦)。
ScanSoft-MeiLing-ChineseMandarinVoice可以在XP下安裝,但是多音字識別不好,優點是比較小巧,40M左右。
NeoSpeech Lily,聲音的效果比 Microsoft Lili要好。推薦使用,但是比較大500M左右。
第二種方案:
System.Speech.Synthesis(語音合成器)
讓我們看一下關於如何從托管應用程序使用語音合成的示例。作為最典型的一個 UI 輸出示例,我將從只說出“Hello, world”的應用程序開始,如圖 5 所示。
<em>
using
System;
using
System.Speech.Synthesis;
namespace
TTS_Console_Sample_1
{
class
Program
{
static
void
Main(
string
[] args)
{
SpeechSynthesizer synth =
new
SpeechSynthesizer();
synth.SpeakText(
"Hello, world!"
);
}
}
}</em>
|
該示例是一個明顯的控制台應用程序,是最近使用 Visual C#® 創建的,其中添加了三行代碼。所添加的第一行只引入 System.Speech.Synthesis 命名空間。第二行聲明並實例化 SpeechSynthesizer 的實例,它准確表示了其名稱的含意:語音合成器。所添加的第三行是對 SpeakText 的調用。這是調用合成器所需的全部。
默認情況下,SpeechSynthesizer 類使用 Speech 控件面板中默認推薦的合成器。但是它可以使用任何與 SAPI DDI 兼容的合成器。