最近收到一個需求,朋友診室需要做到門診叫號,流程如下:病人選擇醫生-刷身份證排隊-醫生點擊病人姓名叫號。
經過團隊的努力,一個簡易的門診叫號系統已經完成。現在把各個功能記錄下來,方便以后查看。
1.語音叫號
叫號的DLL:DotNetSpeech.dll
測試代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using DotNetSpeech;
namespace voice
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 語音列表
/// </summary>
List<SpVoice> _voice = new List<SpVoice>();
private void btnSound_Click(object sender, EventArgs e)
{
this.AddVoice(txtVoice1.Text, int.Parse(txtVolume1.Text), int.Parse(txtRate1.Text));
this.AddVoice(txtVoice2.Text, int.Parse(txtVolume2.Text), int.Parse(txtRate2.Text));
for (int i = 0; i < _voice.Count(); i++)
{
try
{
//根據文本叫號
_voice[i].Speak(this.txtVoiceText.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync);
}
catch (Exception ex)
{
txtError.Text = DateTime.Now.ToString() + ex.ToString() + " " + txtError.Text;
}
}
}
/// <summary>
/// 增加語音庫
/// </summary>
/// <param name="p_Name">語音庫名稱</param>
/// <param name="p_Volume">音量</param>
/// <param name="p_Rate">音速</param>
public void AddVoice(string p_Name, int? p_Volume, int? p_Rate)
{
try
{
for (int i = 0; i < _voice.Count(); i++)
{
if (_voice[i].Voice.GetAttribute("name") == p_Name)
{
_voice[i].Rate = p_Rate == null ? -3 : p_Rate.Value;
if (p_Volume != null) _voice[i].Volume = p_Volume.Value;
return;
}
}
SpVoice voice = new SpVoice();
voice.Voice = voice.GetVoices(string.Format("name={0}", p_Name), "").Item(0);
voice.Rate = p_Rate == null ? -3 : p_Rate.Value;
if (p_Volume != null) voice.Volume = p_Volume.Value;
_voice.Add(voice);
}
catch(Exception ex) {
txtError.Text = DateTime.Now.ToString()+ex.ToString() + " " + txtError.Text;
}
}
}
}
測試界面如下:

注意事項:采用DotNetSpeech.dll 是不支持64位的,啟動的程序要編譯為X86,DLL編譯需要ANYCPU,很奇怪,這個找不到原因
