0

我希望你能帮助我编写一个我正在尝试用 VB.NET 编写的程序。

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

为此,静音被定义为三秒的零级音频。从技术意义上讲,流一直在继续,但没有声音通过它。

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

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

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

谢谢!!

4

2 回答 2

1

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

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

于 2010-08-24T07:16:40.477 回答
0

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

如果您想自己创建类似的东西,请从此处使用适用于 .net 的 Windows Media Format SDK:

http://windowsmedianet.sourceforge.net/

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

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

于 2010-09-02T09:36:26.813 回答