【问题标题】:Get Audio levels for 16 and 32 bit recording streams获取 16 位和 32 位录制流的音频电平
【发布时间】:2019-10-24 14:22:24
【问题描述】:

我一直在用this

我已经尝试了使用浮动缓冲区的第二个示例,但无法使其按原样工作。我确实尝试了短缓冲区并除以最大短并且有效。所以我尝试用浮点缓冲区除以最大浮点数,但没有用。是我的麦克风能力吗?我的划分是否正确(因为它不在示例中)?

【问题讨论】:

  • 如果您能向我们提供您尝试过的代码,这将很有帮助,以便我们更好地帮助您:)
  • "cannot get that to work as is" - 在 OnDataAvailable 处理程序上没有被命中,或者它是但你没有获取数据,或者你正在获取数据但你正在获取错误的音频电平结果?

标签: c# naudio


【解决方案1】:

您不需要对浮动缓冲区执行任何操作,如您发布的链接所示:

void OnDataAvailable(object sender, WaveInEventArgs args)
{
    ...
    var buffer = new WaveBuffer(args.Buffer);
    // interpret as 32 bit floating point audio
    for (int index = 0; index < args.BytesRecorded / 4; index++)
    {
        var sample = buffer.FloatBuffer[index];
        ...
    }
}

如果您需要的是 32 位整数样本,则需要访问 IntBuffer 字段并除以 max int。

var sample = buffer.IntBuffer[index] / 4294967296f;

【讨论】:

  • 感谢您的回复!所以我得到的样本(假设使用短缓冲区的 16 位)在 300-1500 左右,具体取决于输入。那么为了获得最大百分比我想我需要以某种方式划分?获得 0-1.0 范围?
  • 是的。你想除以短 MaxValue
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
相关资源
最近更新 更多