2013-07-27 13 views
7

Próbuję użyć rozpoznawania mowy w .net, aby rozpoznać mowę podcastu w pliku mp3 i uzyskać wynik jako ciąg. Wszystkie przykłady, które widziałem, są związane z używaniem mikrofonu, ale nie chcę używać mikrofonu i dostarczać przykładowy plik mp3 jako moje źródło dźwięku. Czy ktoś może wskazać mi dowolny zasób lub opublikować przykład.Używanie System.Speech do konwersji pliku mp3 na tekst

EDIT -

I przekształcony plik audio do wav pliku i próbował ten kod na nim. Ale wyodrębnia tylko pierwszych 68 słów.

public class MyRecognizer { 
    public string ReadAudio() { 
     SpeechRecognitionEngine sre = new SpeechRecognitionEngine(); 
     Grammar gr = new DictationGrammar(); 
     sre.LoadGrammar(gr); 
     sre.SetInputToWaveFile("C:\\Users\\Soham Dasgupta\\Downloads\\Podcasts\\Engadget_Podcast_353.wav"); 
     sre.BabbleTimeout = new TimeSpan(Int32.MaxValue); 
     sre.InitialSilenceTimeout = new TimeSpan(Int32.MaxValue); 
     sre.EndSilenceTimeout = new TimeSpan(100000000); 
     sre.EndSilenceTimeoutAmbiguous = new TimeSpan(100000000); 
     RecognitionResult result = sre.Recognize(new TimeSpan(Int32.MaxValue)); 
     return result.Text; 
    } 
} 

Odpowiedz

9

Spróbuj odczytać w pętli.

SpeechRecognitionEngine sre = new SpeechRecognitionEngine(); 
Grammar gr = new DictationGrammar(); 
sre.LoadGrammar(gr); 
sre.SetInputToWaveFile("C:\\Users\\Soham Dasgupta\\Downloads\\Podcasts\\Engadget_Podcast_353.wav"); 
sre.BabbleTimeout = new TimeSpan(Int32.MaxValue); 
sre.InitialSilenceTimeout = new TimeSpan(Int32.MaxValue); 
sre.EndSilenceTimeout = new TimeSpan(100000000); 
sre.EndSilenceTimeoutAmbiguous = new TimeSpan(100000000); 

StringBuilder sb = new StringBuilder(); 
while (true) 
{ 
    try 
    { 
     var recText = sre.Recognize(); 
     if (recText == null) 
     {    
      break; 
     } 

     sb.Append(recText.Text); 
    } 
    catch (Exception ex) 
    { 
     //handle exception  
     //... 

     break; 
    } 
} 
return sb.ToString(); 

Jeśli masz Windows Forms lub aplikacji WPF uruchomić ten kod w oddzielnym wątku, inaczej bloki wątku UI.

+1

Tak, to działa. Zmieniłem również twoją odpowiedź i dodałem, że jeśli OP używa WinForm/WPF, powinien uruchomić kod w oddzielnym wątku, ponieważ w przeciwnym razie blokuje wątek UI. – ProgramFOX

+0

+1 - Dobry dodatek. – keyboardP

+0

Otrzymuję ten błąd, gdy używam twojego kodu powyżej: 'MyProgram.vshost.exe Informacja: 0: SAPI nie implementuje wyboru alfabetu fonetycznego. – Micro

0

Chciałbym spojrzeć najpierw w sposób udokumentowany tutaj: http://msdn.microsoft.com/en-us/library/system.speech.recognition.speechrecognitionengine.setinputtowavefile.aspx

powinien być w stanie się dogadać stąd myślę.

+1

Plik MP3 NIE jest plikiem Wave (.wav) (a "SetInputToWaveFile()" dotyczy tylko plików Wave), więc Twoje rozwiązanie nie będzie działać. – ProgramFOX

+0

@Soham: Dlaczego powinienem przeczytać mój artykuł? Czy napisałem w nim coś niepoprawnego? – ProgramFOX

+0

Powiedziałem, że czytałem twój artykuł. To było dobre. Ale czy możesz podać jakieś rozwiązanie mojego problemu? –

Powiązane problemy