1.下面介紹三種對comboBox繫結的方式,分別是泛型中IList和Dictionary,還有資料集DataTable ----->>>>>飛機票

2. 簡單的語音播報系統

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech;
using System.Speech.Synthesis; namespace 語音功能1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SpeechSynthesizer voice = new SpeechSynthesizer(); //建立語音例項
private void Form1_Load(object sender, EventArgs e)
{ voice.Rate = -; //設定語速,[-10,10]
voice.Volume = ; //設定音量,[0,100]
// voice.SpeakAsync("Hellow Word"); //播放指定的字串,這是非同步朗讀 //下面的程式碼為一些SpeechSynthesizer的屬性,看實際情況是否需要使用
//voice.Dispose(); //釋放所有語音資源
// voice.SpeakAsyncCancelAll(); //取消朗讀
voice.Speak("你好! Word"); //同步朗讀
//voice.Pause(); //暫停朗讀
// voice.Resume(); //繼續朗讀
} private void button1_Click(object sender, EventArgs e)
{ voice.Speak(textBox1.Text); } private void button2_Click(object sender, EventArgs e)
{
voice.Pause(); //暫停朗讀
} private void button3_Click(object sender, EventArgs e)
{
voice.Resume(); //繼續朗讀
}
}
}

需要新增引用:引用--新增引用--.NET--Speech引用  新增即可;

暫停說明:不會像播放器一樣,點選暫停立即暫停,會播放完當前的語音,下次播放則不能正常播放

繼續播放:在暫停後需要點選,這樣才會正常的播放

可以每次播放完,釋放語音資源,這樣會減少效能消耗。 釋放是把當前物件釋放了,下次播放要重新例項物件

切記不能死迴圈播放,這個不能立即停止,所有這樣記憶體會一直佔用的。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech.Synthesis; namespace 語音功能1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
SpeechSynthesizer speech;
private void button2_Click(object sender, EventArgs e)
{
try
{
speech = new SpeechSynthesizer();
//同步朗讀文字
//speech.Speak(richTextBox1.Text);
//非同步朗讀文字
speech.SpeakAsync(textBox1.Text);
speech.Volume = ; //設定音量
speech.Rate =-; //設定朗讀速度
//輸出檔案
// speech.SetOutputToWaveFile(CheckPathTruth(textBox2.Text.Trim()));//輸出語言檔案
}
catch (Exception ex)
{ MessageBox.Show(ex.Message); return; } } private void button3_Click(object sender, EventArgs e)
{
if (button3.Text == "暫停")
{
speech.Pause();//暫停
button3.Text = "繼續";
} else if (button3.Text == "繼續")
{
speech.Resume();//繼續
button3.Text = "暫停";
}
} private void button4_Click(object sender, EventArgs e)
{
//停止朗讀
speech.SpeakAsyncCancelAll();
//釋放資源!
speech.Dispose(); } }
}

上面是我下午寫的,發現:非同步朗讀文字可以用暫停、繼續、停止功能,同步朗讀是不能的, 想好好理解的,可以看看非同步同步問題;

上面可以去除vs中的多餘空格  非常實用的哈

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech.Synthesis;
using System.IO;
namespace 語音功能1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
SpeechSynthesizer speech;
private void Form2_Load(object sender, EventArgs e)
{
//textBox2.Text = Environment.CurrentDirectory;
button4.Enabled = false;
button3.Enabled = false;
}
//開始朗讀
private void button2_Click(object sender, EventArgs e)
{
if (richTextBox1.Text.Trim() == "")
{ return; } try
{
speech = new SpeechSynthesizer();
//輸出檔案
//speech.SetOutputToWaveFile(CheckPathTruth(textBox2.Text.Trim()));//輸出語言檔案
//同步朗讀文字
//speech.Speak(richTextBox1.Text);
//非同步朗讀文字
speech.SpeakAsync(richTextBox1.Text);
speech.Volume = (int)num_yl.Value; //設定音量
speech.Rate = (int)num_speed.Value; //設定朗讀速度
button3.Enabled = true; button4.Enabled = true;
}
catch (Exception ex)
{ MessageBox.Show(ex.Message); return; } }
//暫停 和繼續
private void button3_Click(object sender, EventArgs e)
{
if (button3.Text == "暫停")
{
speech.Pause();//暫停
button3.Text = "繼續";
}
else if (button3.Text == "繼續")
{
speech.Resume();//繼續
button3.Text = "暫停";
}
button2.Enabled = false;
}
//停止
private void button4_Click(object sender, EventArgs e)
{
button2.Enabled = true;
button3.Enabled = false;
//停止朗讀
speech.SpeakAsyncCancelAll();
//釋放資源!
speech.Dispose();
button4.Enabled = false;
}
//讀取檔案
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.InitialDirectory = "c:\\"; //設定初始目錄
open.Multiselect = false; //設定是否可以選擇多個檔案
open.DefaultExt = ".txt"; //設定預設檔案拓展名
open.Filter = "txt文字|*.txt|所以檔案|*.*";
open.ShowHelp = true; //是否顯示幫助按鈕
//判斷是否點選了取消或關閉按鈕
//如果不判斷,會出現異常
if (open.ShowDialog() != DialogResult.Cancel)
{
string str = open.FileName;
textBox3.Text = str;
}
else
{ return; }
//獲取檔案內容,放到 richTextBox1 裡
richTextBox1.Text = GetFileStreamOrReadToEnd(textBox3.Text.Trim());
}
//儲存按鈕
private void button6_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Title = "儲存文件";
saveFileDialog.Filter = "*.wav|*.wav|*.mp3|*.mp3";
saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
DialogResult saveDialog = saveFileDialog.ShowDialog();
try
{
if (saveDialog == System.Windows.Forms.DialogResult.OK)
{
textBox1.Text = saveFileDialog.FileName.ToString();
SpeechSynthesizer speechSyn = new SpeechSynthesizer();
speechSyn.Volume = (int)num_yl.Value; //音量
speechSyn.Rate = (int)num_speed.Value; //朗讀速度
speechSyn.SetOutputToWaveFile(CheckPathTruth(textBox1.Text));
speechSyn.Speak(richTextBox1.Text);
speechSyn.SetOutputToDefaultAudioDevice();
MessageBox.Show("保存錄音檔案成功,儲存路徑:" + textBox1.Text + "!");
speechSyn.Dispose();
}
}
catch (Exception er)
{
MessageBox.Show(er.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 判斷檔案路徑是否正確
/// </summary>
/// <param name="path"></param>
/// <returns>返回正確的檔案路徑</returns>
public string CheckPathTruth(string path)
{
if (!path.Contains(".wav"))
{
MessageBox.Show("輸出檔案有誤!");
return null;
}
else
{
return path;
}
}
/// <summary>
/// 獲取檔案內容
/// </summary>
/// <param name="filepath"></param>
/// <returns></returns>
public string GetFileStreamOrReadToEnd(string filepath)
{
FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate);
StreamReader sr = new StreamReader(fs, Encoding.Default);
//獲取所以文字
string str = sr.ReadToEnd();
//要關閉!
fs.Close(); sr.Close();
return str;
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
button2.Enabled = true;
button6.Enabled = true;
}
}
}
//System.Diagnostics.Process.Start("Explorer.exe", string.Format(@"/select,{0}", saveFileDialog.FileName));//開啟wav目錄並選中檔案

上面是完整的文字轉換為語音軟體程式碼:從播放到儲存的,利用的都是系統的speech