如何检测WMA流缓冲区中的音频静音?

时间:2010-08-24 07:10:48

标签: vb.net audio-streaming

我希望你能帮助我学习我想用VB.NET编写的程序。

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

出于此目的,静音被定义为零级音频的三秒。流在技术意义上继续发展,但没有可听见的噪音。

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

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

我愿意使用任何合适的API - 例如BASS,或点网平台内置的Windows Media扩展。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您有PCM数据,您可以平均取几个样本,如果它低于阈值,则认为它是静音。我假设如果您正在播放音频,则可以访问未压缩的数据。

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

答案 1 :(得分:0)

好吧,我正在我的产品中做到这一点:将多个互联网音频流捕获并解码为PCM,然后对它们进行各种分析,其中一个是静音检测。

如果您想自己创建类似的内容,请从此处使用Windows Media Format SDK for .net:

http://windowsmedianet.sourceforge.net/

然后,使用IWMReader和OnSample回调,它将为您提供PCM数据。

然后,计算小缓冲区的最大输入电平,查看该级别3秒,如果它低于阈值,则触发事件。