2015-09-23 4 views
1

Я использую C# system.speech, и у меня ограниченное количество предложений, которые я хочу распознать. Вот кодSystem.Speech Распознавание голоса не работает

SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine(); 
    String[] Sentences = File.ReadAllLines(samplePath); 
    Choices sentences = new Choices(); 
    sentences.Add(Sentences); 
    GrammarBuilder gBuilder = new GrammarBuilder(sentences); 
    Grammar g = new Grammar(gBuilder); 
    g.Enabled = true; 
    recognizer.LoadGrammar(g); 

    try 
    { 
     recognizer.SetInputToWaveFile(filePath); 
     RecognitionResult result = recognizer.Recognize(); 
     String ret = result.Text; 
     recognizer.Dispose(); 
     return ret; 
    } 
    catch (InvalidOperationException exception) { } 
    return ""; 

Этот код генерирует исключение, когда я даю ему немного Wav файла и причину исключения является не может найти совпадение в типовых предложениях. Могу ли я заставить его так, чтобы он должен был выбрать предложение?

+0

Предоставление кода, включая ту часть, где вы предоставляете файл WAV в распознаватель, потому что для меня это всегда работает, даже когда звук файл полная тишина (она обеспечивает доверие%), не бросая исключений. –

+0

Также как вы инициализируете 'распознаватель'? –

+0

У меня есть весь код, я могу обновить код, но он не отправил% уверенности, кажется, что его не recongnizing –

ответ

1

Вы получаете NullReferenceException, потому что формат формата вашего .wav файла отличается, как System.Speech.Recognition.SpeechRecognitionEngine пытается анализировать .wav файлов по умолчанию при использовании метода SetInputToWaveFile.

Чтобы изменить формат чтения, вы должны использовать метод SetInputToAudioStream вместо:

using (FileStream stream = new FileStream("C:\\3.wav", FileMode.Open)) 
{ 
    recognizer.SetInputToAudioStream(stream, new SpeechAudioFormatInfo(5000, AudioBitsPerSample.Sixteen, AudioChannel.Stereo)); 
    RecognitionResult result = recognizer.Recognize(); 
    string ret = result.Text; 
} 

Таким образом, он читает ваш .wav файл как стерео файл, на 16bps и с 5000 образцов в секунду как ваш .wav файл действительно закодирован.

Примечание: это решило проблему для меня на файловом

+0

Спасибо за помощь, но она по-прежнему дает такое же исключение :( –