我有一些 AudioSink
分配给了一些 CaptureSource
。
CaptureSource captureSource = new CaptureSource() {
VideoCaptureDevice = null,
AudioCaptureDevice = CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice()
};
SampleAudioSink audioSink = new SampleAudioSink() {
CaptureSource = captureSource
};
captureSource.Start();
AudioSink
实现只是记录被调用的函数以查看它是否正常工作。但是,OnSamples
方法在 37 个样本后停止调用。
- OnCaptureStarted
- OnFormatChange
- OnSamples (1)
- OnSamples (2)
- OnSamples (3)
- [...]
- OnSamples (35)
- OnSamples (36)
- OnSamples (37)
OnCaptureStopped
从未被调用; CaptureSource
应该连续调用这个函数。 CaptureSource
也不调用 CaptureFailed
事件。
什么会产生这种奇怪的行为,我可以采取什么措施来解决它?
我已将产生问题的完整源代码上传至Pastebin
最佳答案
问题是垃圾收集器在 18 秒后删除了 AudioSink
...
添加 AudioSink
作为类成员解决了这个问题。
[...]
TextBox log;
SampleAudioSink audioSink; // to prevent garbage collector from collection
private void Application_Startup (object sender, StartupEventArgs e) {
[...]
}
[...]
关于c# - 使用 Silverlight 捕获音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5489575/