【问题标题】:Volume from byte array来自字节数组的卷
【发布时间】:2010-12-06 03:17:48
【问题描述】:

我是音频分析的新手,但需要执行一项(看似)简单的任务。我有一个包含 16 位录音(单通道)和 44100 采样率的字节数组。如何执行快速分析以在任何给定时刻获取音量?我需要计算一个阈值,所以如果它高于某个幅度(音量)则返回 true,否则返回 false。我以为我可以遍历字节数组并检查它的值,其中 255 是最响亮的,但这似乎不起作用,因为即使我不记录任何东西,背景噪音进入并且一些数组充满了255. 任何建议都会很棒。 谢谢

【问题讨论】:

  • 如果是16位数据,需要检查字节对。
  • 我尝试将其转换为一系列短裤。我开始得到负值和大于 255 的值。这正常吗?如果是这样,负值在单个通道中代表什么,最大音量值是多少?谢谢

标签: c# .net audio volume audio-analysis


【解决方案1】:

由于您有 16 位数据,您应该期望信号在 -32768 和 +32767 之间变化。 要计算音量,您可以间隔 1000 个样本,然后计算它们的 RMS 值。将平方样本值相加除以 1000 并取平方根。根据您的阈值检查此数字。

【讨论】:

    【解决方案2】:

    通常使用root mean square 测量波的能量。

    如果您想在感知上更准确,您可以通过discrete fourier transform 将时域信号转换为频域信号,并使用一些加权函数对幅度进行积分(因为低频波在感知上比相同能量的高频波)。

    但我也不懂音频,所以我只是在编造一些东西。 ☺

    【讨论】:

    • 谢谢。 RMS 很有趣。我不需要准确,只是一个粗略的近似。我基本上只需要在用户说话超过某个阈值时调用一个事件。因此,最快的方法就是我所需要的。
    【解决方案3】:

    我可能会尝试应用标准差滑动窗口。 OTOH,我不会假设 255 = 最大声。可能是,但我想知道正在使用什么编码。如果存在任何压缩,那么我怀疑 255 是“最响亮的”。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多