0

我从下面将音频文件保存为 test.wav

        SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
        SpVoice Voice = new SpVoice();

        SaveFileDialog sfd = new SaveFileDialog();

        sfd.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";
        sfd.Title = "Save to a wave file";
        sfd.FilterIndex = 2;
        sfd.RestoreDirectory = true;

        SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite;

        SpFileStream SpFileStream = new SpFileStream();
        SpFileStream.Open(sfd.FileName, SpFileMode, false);

        Voice.AudioOutputStream = SpFileStream;
        Voice.Speak(txtSpeakText.Text, SpFlags);
        Voice.WaitUntilDone(Timeout.Infinite);
        SpFileStream.Close();            

当我尝试重新获取文件并转换为不同的文本时

        SpeechRecognitionEngine RecognitionEngine = new SpeechRecognitionEngine(new CultureInfo("en-US", true));
        RecognitionEngine.LoadGrammar(new DictationGrammar());
        RecognitionEngine.SetInputToWaveFile("test.wav");
        RecognitionResult result = RecognitionEngine.Recognize();
        Grammar g = result.Grammar;
        txt_vtc.Text = result.Text;   

为什么会变成这样?

4

1 回答 1

0

这个答案不是您的问题的原因,但我想建议您使用SpeechSynthesizer 类,如下面的代码。

        using (var speechSynthesizer = new SpeechSynthesizer())
        {
            speechSynthesizer.SelectVoice("Please enter your TTS engine name...");
            speechSynthesizer.SetOutputToWaveFile("test.wav");
            speechSynthesizer.Speak("test");
        }

对于使用SpeechSynthesizer Class,您将有两个优点。

  1. 由于Speech Sdk 5.1已经包含在.net framework(4, 3.5, 3.0).
  2. 比你提到的更容易达到目标。
于 2011-06-20T07:34:48.270 回答