<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C#實現文字轉語音的具體程式碼,供大家參考,具體內容如下
客戶提出要求,將文字內容轉為語音,因為內網環境,沒辦法採用聯網,線上這種方式,靈機一動,能否寫一個簡單的例子呢,搜尋相關資料還真行,話不多說,有圖有真相
關鍵是,c#有現成的一個參照
右鍵點選專案 > 新增參照 > .Net > 找到System.Speech點選確定
控制檯程式程式碼:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Speech.Synthesis; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TxtToVoice { class Program { [STAThread] //預設執行緒模型是單執行緒單元 (STA) 模式 static void Main(string[] args) { //Application.EnableVisualStyles(); //Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new Form1()); //return; OpenFileDialog open = new OpenFileDialog(); open.Title = "請選擇文字"; //開啟的檔案選擇對話方塊上的標題 open.Filter = "文字檔案(*.txt)|*.txt|所有檔案(*.*)|*.*";//設定檔案型別 open.InitialDirectory = @"D:project";//預設開啟目錄 open.FilterIndex = 1;//設定預設檔案型別顯示順序 open.RestoreDirectory = false;//是否記憶上次開啟的目錄 //open.Multiselect = true;//是否允許多選 string content=string.Empty; if (open.ShowDialog() == DialogResult.OK)//按下確定選擇的按鈕 { string[] filename = open.FileNames;//獲取多個檔案的路徑及檔名並存入陣列 MessageBox.Show(filename[0]); // MessageBox.Show(filename[1]); // MessageBox.Show(open.FileName); //獲取路徑及檔名 // MessageBox.Show(open.SafeFileName);//獲取檔名 content = ReadFile(filename[0]); } //-----------------------------------讀出檔案內容--------------------------------- SpeechSynthesizer voice = new SpeechSynthesizer(); //建立語音範例 voice.Rate = -1; //設定語速,[-10,10] voice.Volume = 100; //設定音量,[0,100] //voice.SpeakAsync("Hellow Word"); //播放指定的字串,這是非同步朗讀 //下面的程式碼為一些SpeechSynthesizer的屬性,看實際情況是否需要使用 voice.SpeakAsyncCancelAll(); //取消朗讀 voice.Speak(content); //同步朗讀 voice.Pause(); //暫停朗讀 voice.Resume(); //繼續朗讀 voice.Dispose(); //釋放所有語音資源 } /// <summary> /// 讀取檔案,返回相應字串 /// </summary> /// <param name="fileName">檔案路徑</param> /// <returns>返回檔案內容</returns> private static string ReadFile(string fileName) { StringBuilder str = new StringBuilder(); using (FileStream fs = File.OpenRead(fileName)) { long left = fs.Length; int maxLength = 100;//每次讀取的最大長度 int start = 0;//起始位置 int num = 0;//已讀取長度 while (left > 0) { byte[] buffer = new byte[maxLength];//快取讀取結果 char[] cbuffer = new char[maxLength]; fs.Position = start;//讀取開始的位置 num = 0; if (left < maxLength) { num = fs.Read(buffer, 0, Convert.ToInt32(left)); } else { num = fs.Read(buffer, 0, maxLength); } if (num == 0) { break; } start += num; left -= num; str = str.Append(Encoding.UTF8.GetString(buffer)); } } return str.ToString(); } } }
表單程式碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Speech.Synthesis; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace TxtToVoiceForm { public partial class Form2 : Form { private SpeechSynthesizer speech; /// <summary> /// 音量 /// </summary> private int value = 100; /// <summary> /// 語速 /// </summary> private int rate; public Form2() { InitializeComponent(); ReadlocalFile(); comboBox1.SelectedIndex = 0; } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { rate = Int32.Parse(comboBox1.Text); } //private void 開啟檔案ToolStripMenuItem_Click(object sender, EventArgs e) //{ // this.ReadlocalFile(); //} /// <summary> /// 讀取本地文字檔案的方法 /// </summary> private void ReadlocalFile() { var open = new OpenFileDialog(); open.ShowDialog(); //得到檔案路徑 string path = open.FileName; if (path.Trim().Length == 0) { return; } var os = new StreamReader(path, Encoding.UTF8); string str = os.ReadToEnd(); textBox1.Text = str; } private void 清空內容ToolStripMenuItem_Click(object sender, EventArgs e) { textBox1.Text = ""; } private void button1_Click(object sender, EventArgs e) { string text = textBox1.Text; if (text.Trim().Length == 0) { MessageBox.Show("不能閱讀空內容!", "錯誤提示"); return; } if (button1.Text == "語音試聽") { speech = new SpeechSynthesizer(); new Thread(Speak).Start(); button1.Text = "停止試聽"; } else if (button1.Text == "停止試聽") { speech.SpeakAsyncCancelAll();//停止閱讀 button1.Text = "語音試聽"; } } private void Speak() { speech.Rate = rate; //speech.SelectVoice("Microsoft Lili");//設定播音員(中文) //speech.SelectVoice("Microsoft Anna"); //英文 speech.Volume = value; speech.SpeakAsync(textBox1.Text);//語音閱讀方法 speech.SpeakCompleted += speech_SpeakCompleted;//繫結事件 } /// <summary> /// 語音閱讀完成觸發此事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void speech_SpeakCompleted(object sender, SpeakCompletedEventArgs e) { button1.Text = "語音試聽"; } /// <summary> /// 拖動進度條事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void trackBar1_Scroll(object sender, EventArgs e) { //因為trackBar1的值為(0-10)之間而音量值為(0-100)所以要乘10; value = trackBar1.Value * 10; } private void button2_Click(object sender, EventArgs e) { string text = textBox1.Text; if (text.Trim().Length == 0) { MessageBox.Show("空內容無法生成!", "錯誤提示"); return; } this.SaveFile(text); } /// <summary> /// 生成語音檔案的方法 /// </summary> /// <param name="text"></param> private void SaveFile(string text) { speech = new SpeechSynthesizer(); var dialog = new SaveFileDialog(); dialog.Filter = "*.wav|*.wav|*.mp3|*.mp3"; dialog.ShowDialog(); string path = dialog.FileName; if (path.Trim().Length == 0) { return; } speech.SetOutputToWaveFile(path); speech.Volume = value; speech.Rate = rate; speech.Speak(text); speech.SetOutputToNull(); MessageBox.Show("生成成功!在" + path + "路徑中!", "提示"); } private void label1_Click(object sender, EventArgs e) { } private void label3_Click(object sender, EventArgs e) { this.ReadlocalFile(); } } }
意外得知C#豐富的功能,還是自己動手,沒有想象的那麼難,希望能幫到有需要的小夥伴們!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45