之前用WinForm實現tts已經成功,就調用了下系統的類庫。但我把相同的代碼搬到asp.net上時卻碰到了許多問題,查了好多網站、試過了很多方法,到現在算是做出了一部分吧。
之前調用微軟的TTS是用的這個代碼
1 SpeechSynthesizer speech = new SpeechSynthesizer();2 public void Speak(string text, int rate)3 {4 speech.Rate = rate;5 speech.Speak(text);6 speech.Dispose();7 }
在網頁上,我把這個方法賦給了button的click事件。按第一次是有聲音的,但聲音播放完后后網頁卻仍在不停的載入,再按button也沒反應了。跟著調試過了一遍,也發現事件明明都結束了。感覺很凌亂,然后想用Ajax讓它后臺自己執行并生成音頻文件,第一次點擊按鈕時生成很順利,但點擊第二時就出現問題了,它過了好久才生成出來,就像卡住了,一小伙伴也遇到了同樣的問題。先上Ajax代碼:
1 <script type="text/javascript"> 2 $(document).ready(function() { 3 $("#bt_read").click(function () { 4 var url = window.location.href + "/TextSpeak"; 5 $.ajax({ 6 type: "POST", 7 url: url, 8 data: "{'text':'hello'}", 9 contentType: "application/json;charset=utf-8",10 dataType: "json",11 error: function() {12 alert("error");13 }14 });15 });16 })17 </script>
這是后臺的代碼:
1 [WebMethod]2 public static void TextSpeak(string text)3 {4 TextToSpeak ttSpeak = new TextToSpeak();5 string x = DateTime.Now.ToString("yyyyMMddHHmmss");6 ttSpeak.SaveWaveFile("d:/" + x + ".wav", text, 1, "male");7 }
(類TextToSpeak的代碼在上一篇里)
希望有大神能看到幫我解決這個問題(若大神看不到,就只能自己慢慢糾結了>_<)-----如果想看解決方法的小伙伴,可以忽略上面的代碼。。
嘗試了好多方法,就這個能行(還要添加一個DotNetSpeech.dll類庫):
/// <summary> /// 網頁上使用TTS /// </summary> /// <param name="path">路徑</param> /// <param name="text">文本</param> /// <param name="rate">語速</param> /// <param name="gender">性別</param> public void SaveWaveFile(string path,string text,int rate,string gender) { Type type = Type.GetTypeFrom為啥我沒寫speak的方法呢。。要在網頁客戶端上播放音頻,讓服務器speak有啥用。服務器喊啞了,客戶端也是聽不到的哦~~只能生成音頻文件傳到網頁上用插件播放。為啥我說是半成品呢,因為我試過很多方法了,總找不到合適的插件解決播放的問題.
突然才發現原來它可以直接生成.MP3,網上都說要生成wav格式的,自己也沒試試,直到看到小伙伴直接把路徑寫成*.MP3,并且能生成出來才知道原來是可以直接輸出MP3哇。。那這樣問題就不大了,找個插件把路徑附進去就行啦~~
插件要滿足這兩個條件:
1.能動態添加鏈接。
2.能播放.wav格式。
我試過用自定義控件編寫的mediaPlayer插件來播放 參考:http://www.companysz.com/insus/archive/2009/05/03/1448097.html
其實這個能把問題都解決了。。就是只有在ie上有效果,其他瀏覽器上都不行。。看了網頁代碼,音頻鏈接都讀取到了但就是不能播放~~
還有一個結果方法,就是讓swf播放器能播放tts生成的wav文件,或者把wav轉換成MP3。。這個我還沒能實現。
先到這了,我還在慢慢調試,等搞出來了,立馬發出來。。也希望有大神幫我解決下哇~~
新聞熱點
疑難解答