Frage

Ich bin sehr neu zu NAudio und ich brauche den Puffer von Eingangsabtastwerten von einem Eingabegerät auf ein Array von Doppel zu konvertieren, die von reichen -1 bis 1.

ich das Eingabegerät wie folgt an:

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();

Nun, wenn der Rückruf ‚inputDevice_DataAvailable‘ aufgerufen wird, bekomme ich einen Puffer von Audiodaten. Ich brauche diese Daten und Array von Double zu konvertieren, die Lautstärke zwischen repräsentieren -1 und 1. Wenn jemand mir helfen kann, dass groß sein würde.

War es hilfreich?

Lösung

puffern die Sie zurück erhalten 16-Bit-Kurz Werte enthalten. Sie können die wavebuffer Klasse von NAudio verwenden, die es leicht machen, die Beispielwerte, wie Shorts zu lesen. Divide by 32768 Ihre Doppel / float Probenwert zu erhalten.

    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;                
        }
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top