不久前,Joel on Software 上也有人问过类似的问题。您可以使用System.Speech.Recognition命名空间来执行此操作……但有一些限制。将 System.Speech(应该在 GAC 中)添加到您的项目中。这是 WinForms 应用程序的一些示例代码:
public partial class Form1 : Form
{
SpeechRecognizer rec = new SpeechRecognizer();
public Form1()
{
InitializeComponent();
rec.SpeechRecognized += rec_SpeechRecognized;
}
void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
lblLetter.Text = e.Result.Text;
}
void Form1_Load(object sender, EventArgs e)
{
var c = new Choices();
for (var i = 0; i <= 100; i++)
c.Add(i.ToString());
var gb = new GrammarBuilder(c);
var g = new Grammar(gb);
rec.LoadGrammar(g);
rec.Enabled = true;
}
这会识别从 1 到 100 的数字,并在表单上显示结果数字。您需要一个带有名为 lblLetter 的标签的表单。
System.Speech 仅适用于预定义的单词或短语列表;无论是在多功能性还是在识别质量方面,它都不完全是 NaturallySpeaking。但是你不必根据用户的声音来训练它,如果你只有一些用户可以说的不同的东西,它就可以很好地工作。而且它是免费的!(如果你有 Visual Studio)
如果您使用非常短的短语,它将无法正常工作;我为我的孩子制作了一个程序,让他们说出字母表中的字母并在屏幕上看到它们,但它做得并不好,因为许多字母听起来很相似(尤其是从一个四岁孩子的嘴里)。
至于更灵活的选择……嗯,有前面提到的 NaturallySpeaking,它有一个 SDK。但是您必须联系销售人员才能获得任何形式的访问权限,并且没有列出定价,因此它会作为“它的成本是多少?嗯,你有多少?”之一出现。之类的东西。似乎没有“下载并使用它”选项。:(
至于文本到语音,System.Speech.Synthesis 会这样做。它甚至比语音识别更容易。我写了一个小程序让我输入,按 Enter,然后大声朗读文本。我四岁的孩子被它迷住了。:) (“爸爸,我想和 da wobot 聊天。”)