C#TTS语音播报带背景音乐
1、首先添加引用Microsoft Speech Object Library
2、然后在程序中以及声明一个对象
using System.Speech.Synthesis;
//提供对已安装的语音合成引擎访问对象
SpeechSynthesizer synth = new SpeechSynthesizer();
3、写两句柄函数,用于向控制接口发送控制命令和获得返回执行状态错误代码的描述 也就是用于播放背景音乐的方法
/// <summary>
/// 向媒体控制接口发送控制命令
/// </summary>
/// <param name="lpszCommand">命令,参见
/// http://msdn.microsoft.com/en-us/library/windows/desktop/dd743572(v=vs.85).aspx </param>
/// <param name="lpszReturnString">命令返回的信息,如果没有需要返回的信息可以为null</param>
/// <param name="cchReturn">指定返回信息的字符串大小</param>
/// <param name="hwndCallback">回调句柄,如果命令参数中没有指定notify标识,可以为new IntPtr(0)</param>
/// <returns>返回命令执行状态的错误代码</returns>
[DllImport("winmm.dll")]
static extern Int32 mciSendString(string lpszCommand, StringBuilder returnString, int bufferSize, IntPtr hwndCallback);
/// <summary>
/// 返回对执行状态错误代码的描述
/// </summary>
/// <param name="errorCode">mciSendCommand或者mciSendString返回的错误代码</param>
/// <param name="errorText">对错误代码的描述字符串</param>
/// <param name="errorTextSize">指定字符串的大小</param>
/// <returns>如果ERROR Code未知,返回false</returns>
[DllImport("winmm.dll")]
static extern bool mciGetErrorString(Int32 errorCode, StringBuilder errorText, Int32 errorTextSize);
4、然后写SpeechSynthesizer 对象的语音开始播放事件和结束播放事件,用于播放和停止背景音乐
synth.SpeakStarted += Synth_SpeakStarted;
synth.SpeakCompleted += Synth_SpeakCompleted;
#region 结束播放时停止背景音乐播放
private void Synth_SpeakCompleted(object sender, SpeakCompletedEventArgs e)
{
mciSendString("close myDivece", null, 0, new IntPtr(0)); //关闭
}
#endregion
#region 开始播放时同时播放背景音乐
private void Synth_SpeakStarted(object sender, SpeakStartedEventArgs e)
{
int error = mciSendString(@"open C:你的路径\背景音乐\1.wav alias myDivece", null, 0, new IntPtr(0));
if (error == 0)
{
mciSendString("play myDivece", null, 0, new IntPtr(0)); //播放
}
}
#endregion
5、下载几个背景音乐.wav格式的 自行下载即可,这里我是在包图网下载的
6、声明一个对象用于获得所有已安装的语音包
List<InstalledVoice> voiceList = synth.GetInstalledVoices().ToList<InstalledVoice>();
7、就可以调用TTS语音播放
for (int i = 0; i < voiceList.Count; i++)
{
string speakContent = "大家好 我是大帅哥";
string strTem2p = voiceList[i].VoiceInfo.Name.ToString();
synth.SelectVoice(strTem2p);
synth.SpeakAsync(speakContent);
}
8、以上就是调用语音合成引擎的主要细节内容,小项目,可以选择语音包,可以设置声音大小和语速,仅用于记录下日常笔记,需要的可以参考下
9、附上我某个小项目的需求功能截图
项目中1、使用到了Access数据库,用于记录下历史数据,2、使用到了Http服务端,用于接收外部传输进来的接口数据,3、使用到了并发队列,用于接收外部接口并发进来的数据处理