我正在使用来自NAudio C#库的WasapiLoopbackCapture来捕获发送到我的计算机扬声器的音频。我的目标是获取样本并将其发送到FFT函数以获取频谱数据。
我正在试图找出如何准确地解析传入的音频数据,但似乎我的问题的答案分散并分散在几个博客帖子和Stack Overflow答案中,所以我想得到一个明确的回答我的情况。
我的waveIn.WaveFormat说我有32位/样本和2个通道。它还说编码是IeeeFloat
。
根据我收集的信息,左右声道样本是交错的(左,右,左,右等),如果有4个字节/样本,则缓冲区中的每4个字节组成一个样本(这对大多数人来说可能是显而易见的,但我想验证)。还有,数据是小端吗?并且BitConverter.ToSingle()
函数会处理这个吗?
这是我的代码:
static void Main(string[] args)
{
IWaveIn waveIn = new WasapiLoopbackCapture();
waveIn.DataAvailable += waveIn_DataAvailable;
waveIn.StartRecording();
}
static void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
for (int i = 0; i < e.BytesRecorded; i += 8)
{
float leftSample = BitConverter.ToSingle(e.Buffer, i);
float rightSample = BitConverter.ToSingle(e.Buffer, i + 4);
}
}
这是否能正确恢复样本?