首页 > 解决方案 > 使用 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!");
            }
        }

标签: c#windows-forms-designer

解决方案


推荐阅读