2011-10-20 39 views
15

Làm thế nào để thực sự nói sự im lặng cho X # của mili giây và không phải bằng cách sử dụng Thread.Sleep(). Tôi đang cố gắng sử dụng hàm .Speak() trong thư viện SpeechLib của biến SpVoice để nói một khoảng thời gian im lặng cụ thể theo một số mili giây được chỉ định. Đặc biệt, ở đầu ra của một tệp .wav trong đó tôi chèn khoảng thời gian im lặng giữa các dòng văn bản được nói. Sử dụng Thread.Sleep() sẽ mất một lượng thời gian khiêu dâm để nói hoặc lưu, vì tôi đang lên kế hoạch lưu gần 5000 dòng văn bản nói thành .wav với tạm dừng ở giữa các dòng.Làm thế nào để nói mili giây im lặng trong C# bằng cách sử dụng SpVoice?

Đây là giải pháp tôi có cho đến nay:

 int pauseA = (int)(22050.0 * ((double)pauseTargetToSource.Value/1000.0) * 2.0); 
     int pauseB = (int)(22050.0 * ((double)pauseLineBreak.Value/1000.0) * 2.0); 
     while (
      (lineSource = srSource.ReadLine()) != null && 
      (lineTarget = srTarget.ReadLine()) != null) 
     { 
      voiceSource.Speak(lineSource, SpeechVoiceSpeakFlags.SVSFlagsAsync); 
      voiceSource.WaitUntilDone(Timeout.Infinite); 
      voiceSource.AudioOutputStream.Write(new byte[pauseA]); 
      voiceTarget.Speak(lineTarget, SpeechVoiceSpeakFlags.SVSFlagsAsync); 
      voiceTarget.WaitUntilDone(Timeout.Infinite); 
      voiceSource.AudioOutputStream.Write(new byte[pauseB]); 
     } 

đâu 22.050,0 là tỷ lệ mẫu và pauseLineBreak.Value là # mili giây. Hệ số 2.0 là cho độ dài 2 byte của một đoạn ngắn trong dữ liệu .wav.

AudioOutputStream.Write chỉ cần viết đúng số 00 vào tệp để tắt tiếng.

+1

Sự cố khi viết 0 là gì? –

Trả lời

0

Một vài lựa chọn:

  • Bạn có thể quay lên thread khác để thực hiện hoạt động
  • Bạn chỉ có thể tìm ra bao nhiêu byte phải mất một giây và ghi chúng vào ra dòng đầu ra.
1

Đây không phải là một giải pháp lý tưởng nhưng ...

Bạn có thể sử dụng một số lượng nhất định "im lặng" âm vị, tức là '_' (nhấn mạnh) (xem http://msdn.microsoft.com/en-us/library/ms717239(v=vs.85).aspx) sau khi kiểm tra có bao nhiêu ms nó kéo dài . Bạn có thể phải điều chỉnh số lượng các khoảng im lặng tùy thuộc vào Tỷ lệ bạn đã đặt.

Các vấn đề liên quan