获取 16 位和 32 位录制流的音频电平

Posted

技术标签:

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

我一直在用this

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

【问题讨论】:

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

以上是关于获取 16 位和 32 位录制流的音频电平的主要内容,如果未能解决你的问题,请参考以下文章

在java中录制流式音频?

录制音频时如何将音频录制设置更改为 16Khz 和 16 位?

Android 开发 AudioRecord音频录制

使用android AudioRecord获得32位样本吗?

iPhone 4,录音后的音频电平问题

在 html5 应用上录制音频