/// <summary> /// 合成语音到文件 /// </summary> /// <param name="txt">要合成的文本</param> /// <param name="fName">保存的文件</param> private async Task TTStoFile(string text, string fName) { await Task.Factory.StartNew(() => { if (!SDKRealize.GetInitialize().IsLogin) { SDKRealize.GetInitialize().MSPLogin(); } int eCode = -1; //错误码 var sessionId = SDKRealize.GetInitialize().TTSSessionBegin(ttsSessionParam, ref eCode); if (eCode == 0) { uint textLen = (uint)Encoding.Default.GetBytes(text).Length; bool isSuccess1 = SDKRealize.GetInitialize().TTSTextPut(sessionId, text, textLen, null); if (isSuccess1) { uint audioLen = 0; //返回的音频字节长度 int synthStatus = 0; //返回的合成状态 int eCode1 = -1; //返回的合成音频错误码 byte[] bytes = SDKRealize.GetInitialize().TTSAudioGet(sessionId, ref audioLen, ref synthStatus, ref eCode1); if (eCode1 == 0) { using (FileStream fs = new FileStream(fName, FileMode.Create, FileAccess.Write)) { fs.Write(bytes, 0, bytes.Length); } } } } SDKRealize.GetInitialize().TTSSessionEnd(sessionId, null); }); }
/// <summary> /// 合成到文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void button1_Click(object sender, EventArgs e) { string text = this.textBox1.Text; string fileName = SDKRealize.GetInitialize().TTSdir + this.textBox2.Text + ".wav"; await TTStoFile(text, fileName); }
/// <summary> /// 合成测试(不保存,合成完立即播放) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button4_Click(object sender, EventArgs e) { if (!SDKRealize.GetInitialize().IsLogin) { SDKRealize.GetInitialize().MSPLogin(); } int eCode = -1; //错误码 var sessionId = SDKRealize.GetInitialize().TTSSessionBegin(ttsSessionParam, ref eCode); if (eCode == 0) { string text = this.textBox4.Text; uint textLen = (uint)Encoding.Default.GetBytes(text).Length; bool isSuccess1 = SDKRealize.GetInitialize().TTSTextPut(sessionId, text, textLen, null); if (isSuccess1) { uint audioLen = 0; //返回的音频字节长度 int synthStatus = 0; //返回的合成状态 int eCode1 = -1; //返回的合成音频错误码 byte[] bytes = SDKRealize.GetInitialize().TTSAudioGet(sessionId, ref audioLen, ref synthStatus, ref eCode1); if (eCode1 == 0) { Naudio.GetInstance().PlayAsBytes(bytes); } } } SDKRealize.GetInitialize().TTSSessionEnd(sessionId, null); }
/// <summary> /// 批量语音合成 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void button3_Click(object sender, EventArgs e) { string txtFile = this.textBox3.Text; //文本文件路径 if (File.Exists(txtFile)) { string ttsDirPath = SDKRealize.GetInitialize().TTSdir + Path.GetFileNameWithoutExtension(txtFile) + "/"; if (!Directory.Exists(ttsDirPath)) { Directory.CreateDirectory(ttsDirPath); } using (StreamReader sr = new StreamReader(txtFile)) { var tempStr = string.Empty; while (!string.IsNullOrEmpty(tempStr = sr.ReadLine())) { var strArray = tempStr.Split(':'); await TTStoFile(strArray[1], ttsDirPath + strArray[0] + ".wav"); } } } }