NAudio преобразует входной байтовый массив в массив двойников - PullRequest
3 голосов
/ 14 октября 2010

Я очень новичок в NAudio, и мне нужно преобразовать буфер входных выборок из устройства ввода в массив значений типа double с диапазоном от -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 Ответ

3 голосов
/ 14 октября 2010

буфер, который вы получите, будет содержать 16-битные короткие значения. Вы можете использовать класс WaveBuffer из NAudio, который облегчит считывание значений примеров в виде шортов. Разделите на 32768, чтобы получить значение сэмпла double / float.

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