NAudio将输入字节数组转换为双精度数组

时间:2010-10-14 01:22:52

标签: c# naudio

我是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之间音量级别的双精度数组。如果有人能帮助我,那就太棒了。

1 个答案:

答案 0 :(得分:3)

您获得的缓冲区将包含16位短值。您可以使用NAudio中的WaveBuffer类,这样可以轻松地将样本值读取为short。除以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;                
        }
    }