语音播放方式有很多种,但是这里主要介绍的调用百度sdk实现语音播放,需要在百度AII开放平台下载C# SDK压缩工具包
解压后,将 AipSdk.dll
和 Newtonsoft.Json.dll
中添加为引用。还需要用到BASS音频处理类库,主要是对合成的语音进行输出。
百度语音:https://ai.baidu.com
BASS.NET类库下载:http://www.bass.radio42.com/index.html
直接进代码讲解(这里主要按最简单的方式实现,其它用户可以根据自己的需求进行扩展)
拖入一个button按钮,点击进入事件,主要代码如下,注意bass需要添加Bass.Net.dll引用
int BASS_Stream=0; // BASS音频流
private void button10_Click(object sender, EventArgs e)
{
// 将机器人回复的消息合成语音
BaiduSpeech.Tts("众里寻他千百度", @".\resource\sound\temp_voice.mp3", speed, volume, person);
Bass.BASS_StreamFree(BASS_Stream);
Bass.BASS_Stop();
Bass.BASS_Start();
// 载入音频
BASS_Stream = Bass.BASS_StreamCreateFile(@".\resource\sound\temp_voice.mp3", 0L, 0L, BASSFlag.BASS_SAMPLE_FLOAT);
// 设置音量
Bass.BASS_ChannelSetAttribute(BASS_Stream, BASSAttribute.BASS_ATTRIB_VOL, (float)trackBar2.Value / 100);
// 播放音频
Bass.BASS_ChannelPlay(BASS_Stream, true);
}
BaiduSpeech是一个自定义的交互类,如下
class BaiduSpeech
{
// 合成方法
public static void Tts(string message,string savePath,int speed = 5, int volume = 7, int person = 4)
{
// 可选参数
var option = new Dictionary<string, object>()
{
{"spd", speed }, // speed语速
{"vol", volume }, // volume音量
{"per", person } //person 发音人4:情感度丫丫童声
};
var API_KEY = "你的 Api Key";//百度云控制台中创
var SECRET_KEY = "你的 Secret Key";
var client = new Baidu.Aip.Speech.Tts(API_KEY, SECRET_KEY);//Tts需要添加AipSdk.dll引用
var result = client.Synthesis(message, option);
if (result.ErrorCode == 0) // 或 result.Success
{
File.WriteAllBytes(savePath, result.Data);//savePath语音合成存的地址
}
}
}
Tts方法各参数说明,参数一为需要合成的语音的文字,参数二为语音合成后存的地址,参数三为语速,参数四为音量,参数五为发音人。
如需要更加详细请参考百度sdk文档:https://ai.baidu.com/docs#/TTS-Online-Csharp-SDK/top
基本上已经完成了,但是测试的时候,可能测试的时候还是会出现各种异常。
提供两种异常处理方式:第一:Bass类型初始化,第二:需要将bass.dll放在\bin\Debug文件夹中
// 初始化BASS
Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_CPSPEAKERS, this.Handle);
//注意bass.dll是添加不了引用的,一写要确保将BASS库和所需的附加库放在项目可执行目录中。
(例如将bass.dll放在 。\ bin \ Debug文件夹中)
下载Bass.dll库文件本体可以在查找下载
也可以直接上百度网盘下载
链接:https://pan.baidu.com/s/1r_vuiKz8PVjzqTGQC6aD2g
提取码:f81u