最近突發奇想 想玩玩 文字轉語音的東東 Google了一下 發現微軟有一個TTS 的SDK 查了查相關資料 發現 還真不錯 然後就開始玩玩Microsoft Speech SDK的 DEMO了
現在網上最新版好像是Microsoft Speech SDK Version 5.1 先下載下來
是 http://www.52z.com/soft/22068.html
要先安裝第一個SDK 然後安裝語言套件 只有安裝了語言套件 語言套件是用來支援中文翻讀的
然後開始我們的C#文字轉語音小程式
1、開啟VS 建立一個表單項目
2、添加引用:在COM選項卡裡面的Microsoft Speech object library引用
並在代碼區添加引用
using SpeechLib;
using System.Threading;//這個引用是用來儲存語音檔案用的線程類
3、添加一個文字框 兩個按鈕
4、在一個按鈕下輸入如下代碼
SpeechVoiceSpeakFlags flag = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice voice = new SpVoice();
voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(3);
//Item(0)單詞男聲Sam
//Item(1)單詞男聲Mike
//Item(2)單詞女聲Mary
//Item(3)中文發音,如果是英文,就依單詞字母一個一個發音
voice.Speak(textBox1.Text, flag);
代碼解釋 :其中最重要的是SPVoice類 他是這個DEMO的核心 ;然後就是Item(3)選項 下面注釋已經很清楚了 說明是什麼意思。後面還有一個SPEAK方法 不用我說也知道是什麼意思吧 !當然關於SpVoice對象還有很多方法 查了一下Microsoft Speech的API 還有pause\ Resume SetVoice\GetVoice SetRate|SetRate SetVolume\GetVolume 這些方法根據他的意思就知道 是關於暫停 繼續 設定聲音 設定讀取速度 聲音大小的 更多的對象 方法 請參考他的API
5、在另一個按鈕輸入如下代碼
SpeechVoiceSpeakFlags flag = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice voice = new SpVoice();
voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(3);
SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite;
SpFileStream SpFileStream = new SpFileStream();
SpFileStream.Open(@"C:\test.wav", SpFileMode, false);
voice.AudioOutputStream = SpFileStream;//設定voice的輸出為Stream
voice.Speak(textBox1.Text.Trim(), flag);
voice.WaitUntilDone(Timeout.Infinite);//Using System.Threading;
SpFileStream.Close();
其實這段代碼跟前一個代碼差不多 只不過是通過流把聲音儲存為語音檔案而已
簡單吧 現在就可以好好玩玩你的這個DEMO了 你還可以添加很多功能的 可以做成SDK裡面的幾個例子一樣的程式 !
Ps 感覺微軟的這個聲音好不柔和 我在網上見到幾個 比較好的線上文字轉聲音系統 不錯 分享給大家
http://ecl.iflytek.com/ListenToThis/