C# 获取16位和32位录制流的音频级别

C# 获取16位和32位录制流的音频级别,c#,naudio,C#,Naudio,我一直在使用 我尝试了第二个使用浮点缓冲区的示例,但无法使其按原样工作。我确实尝试了短缓冲区,然后除以最大短缓冲区,结果成功了。所以我试着用一个浮点缓冲区除以max float,但没有用。这是我的麦克风功能吗?我的除法是否正确(因为它不在示例中)?您不需要使用浮动缓冲区,如您发布的链接所示: void OnDataAvailable(object sender, WaveInEventArgs args) { ... var buffer = new WaveBuffer(arg

我一直在使用


我尝试了第二个使用浮点缓冲区的示例,但无法使其按原样工作。我确实尝试了短缓冲区,然后除以最大短缓冲区,结果成功了。所以我试着用一个浮点缓冲区除以max float,但没有用。这是我的麦克风功能吗?我的除法是否正确(因为它不在示例中)?

您不需要使用浮动缓冲区,如您发布的链接所示:

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];
        ...
    }
}

如果您能向我们提供您尝试使用的代码,我们将能更好地帮助您:)“无法使其按原样工作”-在OnDataAvailable处理程序上,没有被命中,或者它是但您没有得到数据,或者您得到了数据但得到了错误的音频级结果?感谢您的回复!所以我得到的样本(假设使用短缓冲区的16位)大约是300-1500,具体取决于输入。那么,为了得到最大百分比,我想我需要以某种方式除以?要获得0-1.0范围?是的。您需要除以短的MaxValue
var sample = buffer.IntBuffer[index] / 4294967296f;