最近在做安監局安全聯網系統,在系統中有會根據一定的條件報警(比如,瓦斯濃度超標),除了在系統中提示之外,客戶還提出需要語音報警。本篇文章主要是針對語音開發的一個前奏。
語音方面的以前沒有接觸過,上網這方面的資料並不多。並且很多資料都是Speech SDK相關的,Windows平台下的SAPI 5.1開發。后來查資料,這個主要是針對vc等com組建開發,如果在dotnet平台下開發,直接使用“System.Speech 命名空間”。這個命名空間提供了足夠的類和方法,做語音方面的開發。
命名空間
|
說明
|
System.Speech.AudioFormat 命名空間包含一個類, SpeechAudioFormatInfo,它包含有關格式的音頻輸入語音識別引擎,或從語音合成引擎被輸出的信息。
|
|
System.Speech.Recognition 命名空間包含用於實現語音識別的 Windows 桌面語音技術類型。
|
|
成員的System.Speech.Recogntion.SRGSGrammar命名空間,您可以以編程方式創建語法符合 W3C 語音識別語法規范版本 1.0 (SRGS)。
|
|
N:System.Speech.Synthesis命名空間包含用於初始化和配置語音合成引擎,用於創建提示,用於生成響應的事件,以及修改聲音特性的語音。
|
|
支持語音合成標記語言 (SSML) 創建基於自定義呈現文本到語音轉換 (TTS) 引擎。
|
下面簡單介紹一下:
using System.Speech.Synthesis;
即:
N:System.Speech.Synthesis命名空間包含用於初始化和配置語音合成引擎,用於創建提示,用於生成響應的事件,以及修改聲音特性的語音。說明白點就是,可以完成文本和語音之間的轉化,並且可以設置轉化過程中的事件,修改轉化語音的音量、聲音緩急等聲音的特性。
SpeechSynthesizer 類可以用來生命聲音對象,該對象可以設置音量聲音緩急等等聲音屬性。
SpeakAsync(String) | 異步使用字符串內容的語言。即:將字符串轉化成語音讀出。看下面這個例子:在文本中輸入字符(中文、英文、字母、數字都可) |
SpeechSynthesizer reader; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { reader = new SpeechSynthesizer(); button2.Enabled = false; button3.Enabled = false; button4.Enabled = false; textBox1.ScrollBars = ScrollBars.Both; } /// <summary> /// 從文本中讀取信息,並閱讀 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { //在讀取文本前,先釋放之前的資源 reader.Dispose(); if (textBox1.Text != "") { reader = new SpeechSynthesizer(); reader.SpeakAsync(textBox1.Text); label2.Text = "正在說話"; button2.Enabled = true; button4.Enabled = true; //當 SpeechSynthesizer 完成提示的講話的時候引發。 講話完成時,將狀態改為完成 reader.SpeakCompleted += new EventHandler<SpeakCompletedEventArgs>(reader_SpeakCompleted); } else { MessageBox.Show("請在文本中輸入將要讀取的信息!", "Message", MessageBoxButtons.OK); } } void reader_SpeakCompleted(object sender, SpeakCompletedEventArgs e) { label2.Text = "完成"; }
最終效果如下:
這個是MSDN代碼庫中的例子,源碼在這里:http://code.msdn.microsoft.com/Text-to-Speech-Converter-0ed77dd5
