使用 SAPI 将语音转换为文本

Posted

技术标签:

【中文标题】使用 SAPI 将语音转换为文本【英文标题】:Converting Speech-To-Text using SAPI 【发布时间】:2013-10-13 12:51:55 【问题描述】:

有没有人知道如何使用 Microsoft 的 Speech Recognition API for Windows Form Application 进行 STT?

【问题讨论】:

【参考方案1】:

.NET 包含一个用于语音识别的程序集。 您需要添加对

的引用

系统.语音

并添加命名空间

using System.Speech.Recognition;

以下代码将分析您的语音并将文本添加到文本框:

private void startRecognition()
    
        SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine(); //default culture
        //SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine(new CultureInfo("de-DE"));
        //With specified culture | Could cause an CultureNotFoundException
        Grammar dictationGrammar = new DictationGrammar();
        recognizer.LoadGrammar(dictationGrammar);
        try
        
            recognizer.SetInputToDefaultAudioDevice();
            RecognitionResult result = recognizer.Recognize();
            if(result != null)
                result_textBox.Text += result.Text + "\r\n"; 
        
        catch (InvalidOperationException exception)
        
            MessageBox.Show(exception.Message,exception.Source);
        
        finally
        
            recognizer.UnloadAllGrammars();
                        
    

要更改识别超时的时间,请更改以下属性:

    recognizer.InitialSilenceTimeout = TimeSpan.FromSeconds(3);
    recognizer.BabbleTimeout = TimeSpan.FromSeconds(2);
    recognizer.EndSilenceTimeout = TimeSpan.FromSeconds(1);
    recognizer.EndSilenceTimeoutAmbiguous = TimeSpan.FromSeconds(1.5);

来源:

http://msdn.microsoft.com/en-us/magazine/cc163663.aspx | http://msdn.microsoft.com/en-us/library/system.speech.recognition.speechrecognitionengine.aspx

【讨论】:

不客气,只是发现了一些需要改进的地方。如果我们开始识别但不说话,结果将为空,将结果的文本添加到文本框将导致 NullReferenceException。为避免这种情况:if(result != null)result_textBox.Text += result.Text + "\r\n";

以上是关于使用 SAPI 将语音转换为文本的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Speech API (SAPI) UserTraining 语法

十九语音识别

使用其他语音时的文本到语音 SAPI5 AccessViolationException

C++ —— 调用微软语音接口(SAPI),实现文字转语音播放

sapi语音朗读的简单用法(Unity中)

SAPI 和 Windows 7 问题