c# - 使用 filestream 读取 WAV 文件并输出文本
问题描述
我正在使用 system.speech 创建语法,并使用麦克风作为输入来工作。所以附加的代码是一个 Windows 窗体应用程序。使用麦克风的工作代码如下:
private void button3_Click(object sender, EventArgs e)
{
SpeechRecognitionEngine sr = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US"));
Grammar word = new DictationGrammar();
sr.LoadGrammar(word);
try
{
richTextBox1.Text = "Listening Now...";
////////////////////////////////////////////////
//////////////////////////////////////////////// NEED TO OPEN WAV FILE N LISTEN TO BE ACCEPTED AS INPUT!!!!!!!!!!///
sr.SetInputToDefaultAudioDevice();
RecognitionResult result = sr.Recognize();
richTextBox1.Clear();
richTextBox1.Text = result.Text;
sr.SpeechRecognized +=
new EventHandler<SpeechRecognizedEventArgs>(sr_SpeechRecognized);
sr.RecognizeCompleted +=
new EventHandler<RecognizeCompletedEventArgs>(sr_RecognizeCompleted);
/*
*/
}
catch
{
richTextBox1.Text = "";
MessageBox.Show("Mic not found");
}
finally
{
sr.UnloadAllGrammars();
}
}
现在,当我尝试将其设置为 wav 文件时。我不断得到一个单词的输出,甚至都不正确。我试图理解为什么。
private void button2_Click(object sender, EventArgs e)
{
SpeechRecognitionEngine sr = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US"));
Grammar word = new DictationGrammar();
sr.LoadGrammar(word);
try
{
richTextBox1.Text = "Listening Now...";
////////////////////////////////////////////////
//////////////////////////////////////////////// NEED TO OPEN WAV FILE N LISTEN TO BE ACCEPTED AS INPUT!!!!!!!!!!///
using (FileStream stream = new FileStream(path, FileMode.Open))
{
sr.SetInputToAudioStream(stream, new SpeechAudioFormatInfo(5000, AudioBitsPerSample.Sixteen, AudioChannel.Stereo));
RecognitionResult result = sr.Recognize();
richTextBox1.Clear();
richTextBox1.Text = result.Text;
sr.SpeechRecognized +=
new EventHandler<SpeechRecognizedEventArgs>(sr_SpeechRecognized);
sr.RecognizeCompleted +=
new EventHandler<RecognizeCompletedEventArgs>(sr_RecognizeCompleted);
}
}
catch
{
richTextBox1.Text = "";
MessageBox.Show("Error");
}
finally
{
sr.UnloadAllGrammars();
}
}
还添加了语音识别、语音完成功能和以下设置路径功能:
// Handle the RecognizeCompleted event.
private void sr_RecognizeCompleted(object sender, RecognizeCompletedEventArgs e)
{
if (e.Error != null)
{
richTextBox1.Text = " Error encountered, {0}: {1}" +
e.Error.GetType().Name + e.Error.Message;
}
if (e.Cancelled)
{
richTextBox1.Text = " Operation cancelled.";
}
if (e.InputStreamEnded)
{
richTextBox1.Text = " End of stream encountered.";
}
completed = true;
}
private void sr_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result != null && e.Result.Text != null)
{
richTextBox1.Text = " Recognized text = {0}";
richTextBox1.Text = e.Result.Text;
}
else
{
richTextBox1.Text = " Recognized text not available.";
}
}
//OPEN FILE DIALOG (SET PATH BUTTON)
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openfileDialog = new OpenFileDialog();
openfileDialog.InitialDirectory = Environment.CurrentDirectory;
openfileDialog.Filter = "WAV files (*.wav)|*.wav";
openfileDialog.DefaultExt = ".wav";
openfileDialog.FilterIndex = 0;
openfileDialog.RestoreDirectory = true;
if (openfileDialog.ShowDialog() == DialogResult.OK)
{
string selectedFileName = openfileDialog.FileName;
path = openfileDialog.FileName;
//path = string.Concat(path, ".wav"); // was supposed to add ext to end but i think it does auto
MessageBox.Show(path + " selected!");
}
}
解决方案
推荐阅读
- python - 如何编写同步和异步代码的类实例化形式?
- python - 在 tensorflow 中使用迭代器生成特征和标签
- python - 为什么我会在时间序列分析中得到如此奇怪的结果?
- python - 当我使用 python3 时出现 ModuleNotFoundError
- android - 是否可以通过 WebUSB 访问 android 配件?
- c# - 如何在 C# 中修复“不仅选定的项目进入集合”
- google-cloud-platform - Google Cloud Build 不会在 Github 推送时触发,手动触发时会构建旧提交
- android - 如何在 react-native 中从文档硬拷贝中检测和提取手写签名?
- java - Json数据如何使用Jsp传入DataTable
- c# - (统一)销毁当前场景中的游戏对象并在加载当前场景后使其永久销毁?