語音報警.NET開發初探


最近在做安監局安全聯網系統,在系統中有會根據一定的條件報警(比如,瓦斯濃度超標),除了在系統中提示之外,客戶還提出需要語音報警。本篇文章主要是針對語音開發的一個前奏。

 
  語音方面的以前沒有接觸過,上網這方面的資料並不多。並且很多資料都是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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM