首先要求百度这个网站注册一个账号,申请TTS的使用权限:https://ai.baidu.com/tech/speech/tts
点击立即使用,一系列操作之后可以领取免费试用的资格
创建相关应用就可以获取到程序里面要用的key了
最后程序里还要引用两个nuget包,一个是百度的AI包另外一个是NAudio包(相关介绍可以看:https://blog.csdn.net/u011614610/article/details/103718563)
最后懒得记录了:
#region 播放代码 /// <summary> /// 音频播放接口 /// </summary> IWavePlayer iPlayer = new WaveOutEvent(); /// <summary> /// 音频读取器 /// </summary> AudioFileReader AudioFileReader = null; /// <summary> /// Mp3读取器,支持文件和内存流 /// </summary> Mp3FileReader Mp3FileReader = null; /// <summary> /// 内存流操作对象 /// </summary> MemoryStream memoryStream = null; /// <summary> /// 构造函数,音频处理帮助对象 /// </summary> public NAduioHelper() { ///为Player增加一个播放完成事件,释放占用资源 iPlayer.PlaybackStopped += (sender, e) => { if (AudioFileReader != null) { AudioFileReader.Close(); } if (Mp3FileReader != null) { Mp3FileReader.Close(); } if (memoryStream != null) { memoryStream.Close(); } }; } /// <summary> /// 播放音乐的功能 /// </summary> /// <param name="filename">需要播放的文件名</param> public void Play(string filename) { //首先停止之前的播放,确保播放器空闲 iPlayer.Stop(); //创建音频文件读取对象 AudioFileReader = new AudioFileReader(filename); //把音频文件读取对象加载到播放设备 iPlayer.Init(AudioFileReader); //对音量进行调节 iPlayer.Volume = 1f; //开始播放 iPlayer.Play(); } /// <summary> /// 播放流媒体音频功能 /// </summary> /// <param name="mp3data"></param> public void Play(byte[] mp3data) { //首先停止之前的播放,确保播放器空闲 iPlayer.Stop(); //用字节数组设置mp3内存流 memoryStream = new MemoryStream(mp3data); //使用内存流创建一个MP3读取器 Mp3FileReader = new Mp3FileReader(memoryStream); //把MP3读取器加载到播放设备 iPlayer.Init(Mp3FileReader); //开始播放 iPlayer.Play(); } /// <summary> /// 停止播放 /// </summary> public void Stop() { iPlayer.Stop(); } #endregion
百度TTS的调用:
public class TTSHelper { /// <summary> /// 百度AI文本转语音客户端对象 /// </summary> Baidu.Aip.Speech.Tts client; /// <summary> /// 语音合成参数设置 /// </summary> Dictionary<string, object> option; /// <summary> /// 构造函数--对百度TTS进行实例化 /// </summary> public TTSHelper(string API_KEY,string SECRET_KEY) { //构造函数中对百度文本转语音客户端进行实例化,KEY是应用列表的API Key,SECRET是Secret Key client = new Baidu.Aip.Speech.Tts(API_KEY, SECRET_KEY); //设置超时时间 client.Timeout = 60000; //对语言信息进行配置 option = new Dictionary<string, object>() { {"spd",5 },//语速,取值0-15 {"pit",5 },//音调,取值0-15 {"vol",7 },//音量,取值0-15 {"per",0 },//角色,度小美0,度小宇1,度逍遥3,丫丫4 {"aue",3 }//输出格式3为MP3,4为pcm-16k,5为pcm-8k,6为wav }; } /// <summary> /// 使用存储为临时文件的方法播放 /// </summary> /// <param name="txt"></param> /// <param name="filename"></param> /// <param name="playon"></param> /// <exception cref="Exception"></exception> public void TtsPlay(string txt,string filename="",bool playon = true) { //是否有指定文件名 if (string.IsNullOrEmpty(filename)) { //没有就创建一个临时文件 filename = Path.GetTempFileName().Replace(".tmp", ".mp3"); } //调用客户端API获取结果 var result = client.Synthesis(txt, option); //判断是否成功 if (result.ErrorCode == 0) { //将比特数组形式的音频文件存储到指定文件内 File.WriteAllBytes(filename, result.Data); if (playon) { //播放 new NAduioHelper().Play(filename); } } else { throw new Exception(result.ErrorMsg); } } /// <summary> /// 使用音频文件流形式播放 /// </summary> /// <param name="txt"></param> /// <exception cref="Exception"></exception> public void TtsPlayMemory(string txt) { //调用客户端API获取结果 var result = client.Synthesis(txt, option); //判断是否成功 if (result.ErrorCode == 0) { //直接调用方法将比特数组传参进去 new NAduioHelper().Play(result.Data); } else { throw new Exception(result.ErrorMsg); } } }
调用方法也很简单:
private void button3_Click(object sender, EventArgs e) { TTSHelper tts = new TTSHelper("CEFAdyHh9psS6suNgKx0NYHU", "MM5GA51nH1lD3XfpxYBvHILAXyGSVzB5"); string readtext = this.textBox1.Text; tts.TtsPlay(readtext, "", true); } private void button4_Click(object sender, EventArgs e) { TTSHelper tts = new TTSHelper("CEFAdyHh9psS6suNgKx0NYHU", "MM5GA51nH1lD3XfpxYBvHILAXyGSVzB5"); string readtext = this.textBox1.Text; tts.TtsPlay(readtext); }