2010-08-24 82 views
0

我希望你可以帮助我一个程序,我试图写在VB.NET中。如何检测WMA流缓冲区中的音频静音?

我有一个标准的WMA流,不断通过互联网流。我需要编写一个应用程序来传输这个音频,并寻找任何“沉默”时期。当它检测到沉默时,它会运行一个事件。

出于此目的,静音被定义为三秒的零级音频。从技术角度来看,这个流程仍在继续,但是没有可听见的噪音通过它传播。

但是,我希望程序在仍处于“缓冲区”时检测静音。也就是说,在程序检测到它在那里之前,用户不会听到这种沉默。

音频不应该停止,因为它正在分析这种沉默 - 它需要不断地向用户播放音频。

我愿意使用任何合适的API就在那里 - 如BASS,或内置于点网平台上的Windows媒体扩展。

谢谢!

回答

0

嗯,我正是这样做在我的产品:有多种网络音频流捕获和解码为PCM,然后各种分析对它们执行,其中一人beeing静音检测。

如果你想创造一些像它自己,使用Windows Media格式SDK用于.NET从这里:

http://windowsmedianet.sourceforge.net/

然后,使用IWMReader和它的OnSample回调,会为你提供PCM数据。

然后,计算最大输入电平小的缓冲区,看到3秒的水平,如果这是你的treshold下方,触发一个事件。

1

如果你有PCM数据,你可以只取几个样本的平均值,如果它低于阈值考虑沉默。我假设你正在播放音频,你可以访问未压缩的数据。

不幸的是,我不知道WMA编解码器的细节,但我认为最简单的方法是只需要几个样本的平均值。