3

我对 NAudio 很陌生,我需要将输入样本的缓冲区从输入设备转换为范围从 -1 到 1 的双精度数组。

我按如下方式创建输入设备:

WaveIn inputDevice = new WaveIn();

//change the input device to the one i want to receive audio from  
inputDevice.DeviceNumber = 1;

//change the wave format to what i want it to be.  
inputDevice.WaveFormat = new WaveFormat(24000, 16, 2);

//set up the event handlers  
inputDevice.DataAvailable += 
   new EventHandler<WaveInEventArgs>(inputDevice_DataAvailable);
inputDevice.RecordingStopped += 
   new EventHandler(inputDevice_RecordingStopped);  

//start the device recording  
inputDevice.StartRecording();

现在,当调用“inputDevice_DataAvailable”回调时,我得到了一个音频数据缓冲区。我需要将此数据转换为代表 -1 到 1 之间音量级别的双精度数组。如果有人可以帮助我,那就太好了。

4

1 回答 1

4

您返回的缓冲区将包含 16 位短值。您可以使用 NAudio 中的 WaveBuffer 类,这样可以轻松地将样本值作为短裤读取。除以 32768 以获得双精度/浮点样本值。

    void waveIn_DataAvailable(object sender, WaveInEventArgs e)
    {
        byte[] buffer = e.Buffer;

        for (int index = 0; index < e.BytesRecorded; index += 2)
        {
            short sample = (short)((buffer[index + 1] << 8) |
                                    buffer[index]);
            float sample32 = sample / 32768f;                
        }
    }
于 2010-10-14T13:46:30.187 回答