2011-03-30 128 views
2

我有一些AudioSink,它被分配到一些CaptureSource使用Silverlight捕獲音頻

CaptureSource captureSource = new CaptureSource() { 
    VideoCaptureDevice = null, 
    AudioCaptureDevice = CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice() 
}; 
SampleAudioSink audioSink = new SampleAudioSink() { 
    CaptureSource = captureSource 
}; 
captureSource.Start(); 

AudioSink執行簡單地記錄被調用函數,看它是否正常工作。但是,在37個樣本之後,將停止調用OnSamples方法。

  • OnCaptureStarted
  • OnFormatChange
  • OnSamples(1)
  • OnSamples(2)
  • OnSamples(3)
  • [...]
  • OnSamples(35)
  • OnSamples(36)
  • OnSamples(37)

OnCaptureStopped從不叫; CaptureSource應該不斷地調用這個函數。 CaptureSource也不會調用CaptureFailed事件。

什麼會產生這種奇怪的行爲,我可以採取什麼措施來解決它?

我已上載其產生問題Pastebin

+0

在第36次和第37次呼叫中,「CaptureSource」的「狀態」是什麼?它改變了嗎? – 2011-04-13 08:51:45

+0

'State' =='Started'爲所有呼叫。此外,還有一個事件處理程序附加到'CaptureFailed',它永遠不會被調用。 – Etan 2011-04-13 09:33:56

+0

我讀到了,我只是想確保我們沒有處理這個阻止它提高事件的錯誤:) – 2011-04-13 09:37:45

回答

2

的問題是垃圾收集器刪除的AudioSink 18秒後一個完整的源代碼...
添加AudioSink作爲一類部件解決了問題。

[...] 
TextBox log; 
SampleAudioSink audioSink; // to prevent garbage collector from collection 
private void Application_Startup (object sender, StartupEventArgs e) { 
    [...] 
} 
[...]