2013-07-27 38 views
7

Tôi đang cố gắng sử dụng tính năng nhận dạng giọng nói trong .net để nhận dạng bài phát biểu của podcast trong một tệp mp3 và nhận kết quả dưới dạng chuỗi. Tất cả các ví dụ tôi đã thấy có liên quan đến việc sử dụng micrô nhưng tôi không muốn sử dụng micrô và cung cấp tệp mp3 mẫu làm nguồn âm thanh của tôi. Bất cứ ai có thể chỉ cho tôi bất kỳ tài nguyên hoặc đăng một ví dụ.Sử dụng System.Speech để chuyển đổi tệp mp3 thành văn bản

EDIT -

tôi chuyển đổi các tập tin âm thanh để wav tập tin và cố gắng mã này vào nó. Nhưng nó chỉ trích xuất 68 từ đầu tiên.

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; 
    } 
} 

Trả lời

9

Hãy thử đọc nó trong vòng lặp.

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(); 

Nếu bạn có ứng dụng Windows Forms hoặc WPF, hãy chạy mã này theo chủ đề riêng biệt, nếu không sẽ chặn chuỗi giao diện người dùng.

+1

Có, tính năng này hoạt động. Tôi cũng đã chỉnh sửa câu trả lời của bạn và thêm rằng nếu OP sử dụng WinForms/WPF, anh ta nên chạy mã trong một chuỗi riêng biệt, bởi vì nếu không nó sẽ chặn chuỗi giao diện người dùng. – ProgramFOX

+0

+1 - Bổ sung tốt. – keyboardP

+0

Tôi nhận được lỗi này khi tôi sử dụng mã của bạn ở trên: 'MyProgram.vshost.exe Thông tin: 0: SAPI không thực hiện lựa chọn bảng chữ cái ngữ âm.' – Micro

0

tôi sẽ xem xét đầu tiên tại phương pháp ghi nhận ở đây: http://msdn.microsoft.com/en-us/library/system.speech.recognition.speechrecognitionengine.setinputtowavefile.aspx

Bạn nên có thể làm việc nó ra từ đây tôi nghĩ.

+1

Tệp MP3 KHÔNG PHẢI là tệp Wave (.wav) (và 'SetInputToWaveFile()' chỉ dành cho tệp Wave), vì vậy giải pháp của bạn sẽ không hoạt động. – ProgramFOX

+0

@Soham: Tại sao tôi nên đọc bài viết của mình? Tôi đã viết một cái gì đó không chính xác trong nó? – ProgramFOX

+0

Tôi đã nói tôi đã đọc bài viết của bạn. Nó tốt. Nhưng bạn có thể cung cấp bất kỳ giải pháp nào cho vấn đề của tôi không? –