获取 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 位录制流的音频电平的主要内容,如果未能解决你的问题,请参考以下文章
录制音频时如何将音频录制设置更改为 16Khz 和 16 位?