【问题标题】:How to detect silence of audio in buffer of WMA stream?如何检测 WMA 流缓冲区中的音频静音?
【发布时间】:2010-08-24 07:10:47
【问题描述】:

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

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

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

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

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

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

谢谢!!

【问题讨论】:

    标签: vb.net audio-streaming


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      http://windowsmedianet.sourceforge.net/

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-19
        • 2014-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多