先把需要的文件錄製出來, 可以去百度上錄製一下
可以使用百度語音合成: https://developer.baidu.com/vcast
然後把需要轉換的數字Tostring(“F2”),這裏不要轉N2,不然會有逗號分隔的,我這裏設計只支持到小於一億元的播報。直接上代碼
public void PayAuido(decimal payMoney)
{
if (payMoney >= 100000000 || payMoney == 0)
{
return;
}
Task.Run(() =>
{
List<string> payAuidoUrls = new List<string>();
string payString = payMoney.ToString("F2");
//如果小於11位,則補零
if (payString.Length < 11)
{
payString = payString.PadLeft(11, '0');
}
string payWan = payString.Substring(0, 4);//取得'萬'單元
string payYuan = payString.Substring(4, 4);//取得'元'單元
string payNum = payString.Substring(9, 2);//取得小數部分
//判斷請付
List<string> payAuidoUrlsFK = Converts(payWan);
if (this.lblPay.Text == "還應支付")
{
payAuidoUrlsFK.Add($"{Application.StartupPath}\\auido\\qf.wav");
}
else
{
payAuidoUrlsFK.Add($"{Application.StartupPath}\\auido\\zl.wav");
}
//處理萬
List<string> payAuidoUrlsWan = Converts(payWan);
if (payAuidoUrlsWan.Count > 0)
{
payAuidoUrlsWan.Add($"{Application.StartupPath}\\auido\\wan.wav");
}
//處理元
List<string> payAuidoUrlsYuan = Converts(payYuan);
//元第一個字符是否爲‘零’
if (payAuidoUrlsWan.Count > 0 && payAuidoUrlsYuan.Count > 0 && payString[4] == '0')
{
payAuidoUrlsWan.Add($"{Application.StartupPath}\\auido\\yuan.wav");
}
payAuidoUrls.AddRange(payAuidoUrlsFK);
payAuidoUrls.AddRange(payAuidoUrlsWan);
payAuidoUrls.AddRange(payAuidoUrlsYuan);
//處理小數位
if (payNum != "00")
{
//如果只有小數,則添加‘零’
if (payAuidoUrls.Count == 0)
{
payAuidoUrls.Add($"{Application.StartupPath}\\auido\\0.wav");
}
payAuidoUrls.Add($"{Application.StartupPath}\\auido\\yuan.wav");
payAuidoUrls.Add($"{Application.StartupPath}\\auido\\{payNum[0]}.wav");
//如果最後一位爲‘零’,則不需要播報
payAuidoUrls.Add($"{Application.StartupPath}\\auido\\jiao.wav");
if (payNum[1] != '0')
{
payAuidoUrls.Add($"{Application.StartupPath}\\auido\\{payNum[1]}.wav");
}
}
else
{
payAuidoUrls.Add($"{Application.StartupPath}\\auido\\yuan.wav");
}
//播放“龍支付收款”
using (SoundPlayer simpleSound = new SoundPlayer($"{Application.StartupPath}\\auido\\tc.wav"))
{
simpleSound.Play();
System.Threading.Thread.Sleep(1250);
int counts = 0;
foreach (string payAuidoUrl in payAuidoUrls)
{
if(counts==0)
{
//播放每個數字
simpleSound.SoundLocation = payAuidoUrl;
simpleSound.Play();
System.Threading.Thread.Sleep(620);
counts++;
}
else
{
//播放每個數字
simpleSound.SoundLocation = payAuidoUrl;
simpleSound.Play();
System.Threading.Thread.Sleep(400);
}
}
}
});
}
/// <summary>
/// 每四位數轉換一次
/// </summary>
/// <param name="payValue">當前轉換的金額</param>
/// <returns></returns>
public List<string> Converts(string payValue)
{
List<string> payAuidos = new List<string>();
//如果爲四個零,則不需要播報
if (payValue == "0000")
{
return payAuidos;
}
char tmp0 = payValue[0];
char tmp1 = payValue[1];
char tmp2 = payValue[2];
char tmp3 = payValue[3];
//千位
if (tmp0 != '0')
{
payAuidos.Add($"{Application.StartupPath}\\auido\\{tmp0}.wav");
payAuidos.Add($"{Application.StartupPath}\\auido\\qian.wav");
}
else
{
payAuidos.Add($"{Application.StartupPath}\\auido\\0.wav");
}
//百位
if (tmp1 != '0')
{
payAuidos.Add($"{Application.StartupPath}\\auido\\{tmp1}.wav");
payAuidos.Add($"{Application.StartupPath}\\auido\\bai.wav");
}
else
{
//只添加一個零
if (tmp0 != '0')
{
payAuidos.Add($"{Application.StartupPath}\\auido\\0.wav");
}
}
//十位
if (tmp2 != '0')
{
payAuidos.Add($"{Application.StartupPath}\\auido\\{tmp2}.wav");
payAuidos.Add($"{Application.StartupPath}\\auido\\shi.wav");
}
else
{
//只添加一個零
if (tmp1 != '0')
{
payAuidos.Add($"{Application.StartupPath}\\auido\\0.wav");
}
}
//個位
if (tmp3 != '0')
{
payAuidos.Add($"{Application.StartupPath}\\auido\\{tmp3}.wav");
}
//如果第一個音頻爲零,則去掉
if (payAuidos[0].Contains("0.wav"))
{
payAuidos.RemoveAt(0);
}
//如果最後一個音頻爲零,則去掉
if (payAuidos[payAuidos.Count - 1].Contains("0.wav"))
{
payAuidos.RemoveAt(payAuidos.Count - 1);
}
return payAuidos;
}
需要調用時,直接調用傳值即可
//語音播報
PayAuido(Convert.ToDecimal(123.4));
希望可以幫助到大家!