日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

使用C#开发TTS应用

發(fā)布時間:2024/3/26 C# 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用C#开发TTS应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近項目需要,需要使用C#開發(fā)一個簡單的TTS服務(wù)器,用于響應(yīng)客戶端的tts請求。 本人對這塊也不熟悉,需要人頭開始搞,在網(wǎng)上找了一些資料,經(jīng)過幾天折騰終于搞出來了。
其實代碼本身非常簡單,核心代碼也就幾行而已,很多網(wǎng)站上都有貼出來,這里借花獻佛也貼出來一下,不過有部分小改動。


先貼出代碼吧: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Speech.Synthesis.TtsEngine; using System.Speech.Synthesis; using System.Speech.AudioFormat; using System.IO;namespace TTSServer {// 需要添加引用:System.Speechclass TTS{/// /// 獲取系統(tǒng)已安裝的聲音信息/// /// public static ListgetVoiceInfos(){ListvoiceList = new List();using (SpeechSynthesizer synth = new SpeechSynthesizer()){foreach (InstalledVoice voice in synth.GetInstalledVoices()){voiceList.Add(voice.VoiceInfo);}}return voiceList;}/// /// TTS/// /// public static void tts(TTSConf ttsConf){SpeechSynthesizer ss = new SpeechSynthesizer();PromptBuilder pb = new PromptBuilder();pb.StartStyle(ttsConf.style);pb.StartVoice(ttsConf.voice);pb.AppendText(ttsConf.text);pb.EndVoice();pb.EndStyle();// 將TTS結(jié)果保存到流中(可以從流中讀取byte并保存到byte[]中)MemoryStream ms = new MemoryStream();ss.SetOutputToWaveStream(ms);ss.Speak(pb);ss.SetOutputToNull();// 將TTS結(jié)果保存到wav文件中/*ss.SetOutputToWaveFile("D:\\a.wav");ss.Speak(pb);ss.SetOutputToNull();*/// 將TTS結(jié)果輸出到音頻設(shè)備(播放)/*ss.Speak(pb);ss.SetOutputToNull();*/// 釋放資源ss.Dispose();}/// /// TTS請求參數(shù)/// public class TTSConf{public TTSConf(string text){this.text = text;}public string text; // 內(nèi)容public string voice;// 聲音public PromptStyle style = new PromptStyle(); // 樣式public void setRate(String rateStr){if (rateStr != null && rateStr != ""){PromptRate rate = (PromptRate)Enum.Parse(typeof(PromptRate), rateStr);this.style.Rate = rate;}}public void setVolume(String volumeStr){if (volumeStr != null && volumeStr != ""){PromptVolume volume = (PromptVolume)Enum.Parse(typeof(PromptVolume), volumeStr);this.style.Volume = volume;}}public void setEmphasis(String emphasisStr){if (emphasisStr != null && emphasisStr != ""){PromptEmphasis emphasis = (PromptEmphasis)Enum.Parse(typeof(PromptEmphasis), emphasisStr);this.style.Emphasis = emphasis;}}}}

-----------------------下面寫下我在開發(fā)中遇到的問題----------------------

其實代碼本身并沒有什么好說的,網(wǎng)上一大堆,這里值得一說的是我在開發(fā)中遇到的問題,在這些問題上折騰了好久,希望大家看到這些問題后可以避免并能解決思路。


開發(fā)環(huán)境:Win7 64bit

開發(fā)工具:VS 2010

開發(fā)語言:C#


問題一、無法使用NeoSpeech語音包

說明:SAPI(Microsoft Speech API.)本身默認使用的是微軟系統(tǒng)自帶的語音包,所以在使用時如果選擇聲音(SpeechSynthesizer類的SelectVoice方法),將使用默認語音。當然,也可以引用系統(tǒng)上安裝的第三方語音包(可參考“朗讀女”軟件)。


由于NeoSpeech語音包的效果比較好,于是我在本機上安裝了NeoSpeech語音包(中文女聲_Lily,網(wǎng)上可下載),安裝后發(fā)現(xiàn)在控制面板中并沒有VW Lily選項(查看路徑:控制面板\輕松訪問\語音識別\文件到語音轉(zhuǎn)換):



當然也無法在C#中的使用該語音,運行時會報如下異常:

System.ArgumentException: 不能設(shè)置語音。未安裝匹配的語音,或語音被禁用。
? ?在 System.Speech.Synthesis.SpeechSynthesizer.SelectVoice(String name)


后來在網(wǎng)上查找資源才發(fā)現(xiàn),NeoSpeech語音包是32位的(不知道有沒有64位的),而我打開的是64位的控制面板(64位系統(tǒng)默認使用64位面板,也可以打開32位面板),C#也是使用64位編譯的,所以無法使用32位的語音包(按理說64應(yīng)該可以引用32的才是啊?具體原來我也不太清楚)。

后來打開32位的控制面板(C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl),終于在其中可以看到新安裝的NeoSpeech語音包了:



既然已經(jīng)安裝好了,并且似乎只能在32位下使用,那么我就把C#程序改為使用32位編譯,然后發(fā)現(xiàn)終于可以正常使用NeoSpeech的語音包了!


改32位編譯方法:

在VS中右擊項目->屬性,在Build中將Platform target(目標平臺)改為x86,如圖:




參考資料:

http://wenku.baidu.com/link?url=OU6fSEOYxFWNJyWRoxHYxXG4kym1-jJiIkCRqQ7WMpje3OHGVxRtrjJQgYdsJhZO9dQenkHI5yr0tI_FZ5ALWAt68iCFiE78S4T7EZdi6gO

總結(jié)

以上是生活随笔為你收集整理的使用C#开发TTS应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。