最近在做一个语音播报功能,开始是用Speech做的。感觉效果还不错,直接可以文字转语音,然后播报出来。但是后面再测试机器上,发现播放的是英语,搜索过后发现需要语音支持。还有可能有些系统整个语音功能都可能被阉割了,所以只能另外想办法了。
另起思路:其实只有数字变化的,其他语音文字一般是固定的。那么我们可以把0-9单独录制为10个wav文件,然后把金额数字拆分为char,播放对应的文件不就OK了吗!说干就干:
先把需要的文件录制出来,具体实现代码如下:
Task.Run(() =>
{
decimal payAmt = 123.56M;
string payString = payAmt.ToString("F2");
//播放固定的前缀语音“龙支付收款”
using (SoundPlayer simpleSound = new SoundPlayer($"{Application.StartupPath}\\auido\\ccb.wav"))
{
simpleSound.Play();
//这里需要等待,具体时间为语音文件的长度
System.Threading.Thread.Sleep(1450);
foreach (var item in payString.ToArray())
{
//播放具体数字
simpleSound.SoundLocation = $"{Application.StartupPath}\\auido\\{item}.wav";
simpleSound.Play();
System.Threading.Thread.Sleep(400);
}
//播放元
simpleSound.SoundLocation = $"{Application.StartupPath}\\auido\\yuan.wav";
simpleSound.Play();
}
});
看起来功能已经实现了,只是听起来感觉有点迟钝的样纸,但是先这样吧。提交给测试