使用 Silverlight 捕获音频

Posted

技术标签:

【中文标题】使用 Silverlight 捕获音频【英文标题】:Capturing audio using Silverlight 【发布时间】:2011-03-30 17:03:15 【问题描述】:

我有一些Audiosink 分配给了一些CaptureSource

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

AudioSink 实现只是记录调用的函数以查看它是否正常工作。但是,OnSamples 方法会在 37 个样本后停止调用。

OnCaptureStarted OnFormatChange 上样例 (1) 上样例 (2) 样本 (3) [...] 上样例 (35) 上样例 (36) 上样例 (37)

OnCaptureStopped 永远不会被调用; CaptureSource 应该不断地调用这个函数。 CaptureSource 也不会调用 CaptureFailed 事件。

什么会导致这种奇怪的行为,我可以采取什么措施来解决它?

我已将产生问题的完整源代码上传到Pastebin

【问题讨论】:

第 36 次和第 37 次通话时 CaptureSourceState 是什么?变了吗? State == Started 用于所有呼叫。此外,还有一个附加到 CaptureFailed 的事件处理程序,它永远不会被调用。 我读到了,我只是想确保我们没有在这里处理阻止它引发事件的错误 :) 现在我在尝试读取第 37 次通话的状态时收到 InvalidOperationException 【参考方案1】:

问题是垃圾收集器在 18 秒后删除了 AudioSink... 将AudioSink 添加为类成员解决了这个问题。

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

[...]

【讨论】:

以上是关于使用 Silverlight 捕获音频的主要内容,如果未能解决你的问题,请参考以下文章

Silverlight 图像编辑器控件 [关闭]

什么音频格式适用于 Silverlight + WPF?

在 Asp.Net 解决方案中集成 silverlight 控件的最佳实践

Silverlight,鼠标单击路径中的间隙

如何使用 WCF 调用从客户端 windows phone 8.0 silverlight 返回对象的方法

Expression Blend实例中文教程 - 界面快速入门