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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

HTML5文字转语音源码,微软TTS语音源码(将文本转为语音并播放)

發(fā)布時間:2023/12/20 HTML 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTML5文字转语音源码,微软TTS语音源码(将文本转为语音并播放) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【實例簡介】利用微軟TTS語音,字符串轉(zhuǎn)語音播放,或者保存為語音文件。 語音庫需自行下載,推薦Hui 發(fā)音人 微軟TTS文字轉(zhuǎn)語音發(fā)音人修復

微軟TTS語音 Win7修復 發(fā)音人

【實例截圖】

【核心代碼】

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 SpeechLib;

namespace TextToVoice

{

public partial class Form1 : Form

{

//private ISpeechObjectTokens ist=null;

private SpVoice voice = new SpVoice();

//SpeechVoiceSpeakFlags svs = SpeechVoiceSpeakFlags.SVSFDefault;

SpeechVoiceSpeakFlags svs=SpeechVoiceSpeakFlags.SVSFlagsAsync;//異步朗讀模式

string strVoiceName = string.Empty;

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

try

{

if (this.comboBox1.SelectedIndex > -1)

{

SpeechSynthesizer synth = new SpeechSynthesizer();

string voiceName = comboBox1.Text.Substring(0, comboBox1.Text.IndexOf('-') - 1);

synth.SelectVoice(voiceName);

synth.SpeakAsync(textBox1.Text);

}

}

catch (System.Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void Form1_Load(object sender, EventArgs e)

{

tbRate.Minimum = -10;

tbRate.Maximum = 10;

tbRate.SmallChange = 1;

tbRate.Value = 0;

tbVolume.Minimum = 0;

tbVolume.Maximum = 100;

tbVolume.SmallChange = 1;

tbVolume.Value = 20;

ISpeechObjectTokens ist = voice.GetVoices(string.Empty, string.Empty);

foreach (SpObjectToken sjt in ist)

{

//string name = sjt.GetAttribute("name");

string vn = sjt.GetAttribute("name"); //sjt.GetDescription();

if (vn.IndexOf('-')>1)

{

this.comboBox1.Items.Add(vn);

//this.comboBox1.Items.Add(vn.Substring(0, vn.IndexOf('-') - 1));

}

else

{

this.comboBox1.Items.Add(vn.Trim());

}

}

if (this.comboBox1.Items.Count>0)

{

this.comboBox1.SelectedIndex = 0;

}

}

private void btnSpeak_Click(object sender, EventArgs e)

{

if (this.comboBox1.SelectedIndex >-1)

{

if (voice.GetVoices("name=" strVoiceName, string.Empty).Count==0)

{

MessageBox.Show("未找到相應的發(fā)音人!");

return;

}

voice.Voice = voice.GetVoices("name=" strVoiceName, string.Empty).Item(0);

voice.Volume = tbVolume.Value;

voice.Rate = tbRate.Value;

try

{

voice.Speak(textBox1.Text, svs);

}

catch (System.Exception ex)

{

MessageBox.Show("此發(fā)音人存在異常:" ex.Message);

}

}

}

private void btnSave_Click(object sender, EventArgs e)

{

try

{

SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;

SpVoice Voice1 = new SpVoice();

//輸出到語音文件

SaveFileDialog dialog = new SaveFileDialog();

dialog.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";

dialog.Title = "Save to a wave file";

dialog.FilterIndex = 2;

dialog.RestoreDirectory = true;

if (dialog.ShowDialog() == DialogResult.OK)

{

if (voice.GetVoices("name=" strVoiceName, string.Empty).Count == 0)

{

MessageBox.Show("未找到相應的發(fā)音人!");

return;

}

Voice1.Voice = Voice1.GetVoices("name=" strVoiceName, string.Empty).Item(0);

Voice1.Volume = tbVolume.Value;

Voice1.Rate = tbRate.Value;

SpeechStreamFileMode spFileMode = SpeechStreamFileMode.SSFMCreateForWrite;//寫模式

SpFileStream spFileStream = new SpFileStream();//文件流

spFileStream.Open(dialog.FileName, spFileMode, false);

Voice1.AudioOutputStream = spFileStream;//voice設置輸出對象為文件流

Voice1.Speak(textBox1.Text.Trim(), SpFlags);//speak到文件流中,這時音頻不會有聲音發(fā)出

Voice1.WaitUntilDone(5000);//直到輸出完成或者超時

spFileStream.Close();

MessageBox.Show("導出語音成功!");

}

}

catch (System.Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void tbVolume_ValueChanged(object sender, EventArgs e)

{

voice.Volume = tbVolume.Value;

}

private void tbRate_ValueChanged(object sender, EventArgs e)

{

voice.Rate = tbRate.Value;

}

private void btnPause_Click(object sender, EventArgs e)

{

voice.Pause();

}

private void btnResume_Click(object sender, EventArgs e)

{

voice.Resume();

}

private void btnStop_Click(object sender, EventArgs e)

{

voice.Resume();

voice.Speak(string.Empty, SpeechLib.SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak);

}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

if (comboBox1.SelectedIndex>-1)

{

strVoiceName = comboBox1.Text.Trim();

}

}

}

}

總結(jié)

以上是生活随笔為你收集整理的HTML5文字转语音源码,微软TTS语音源码(将文本转为语音并播放)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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