Versuche Puffer in Bezug auf NAudio in C # zu verstehen

Ich bin Chemiestudent und versuche, mit NAudio in C # Daten vom Mikrofon meines Computers zu erfassen (ich plane, später auf einen Audioanschluss umzuschalten, falls dies für die Beantwortung relevant ist). Ich verstehe, was Quellstreams sind und wie NAudio mithilfe eines Ereignishandlers weiß, ob Informationen aus diesem Stream gelesen werden sollen oder nicht, aber ich bin ratlos, wenn es darum geht, mit den Daten zu arbeiten, die aus dem Stream gelesen wurden. Soweit ich weiß, wird ein Pufferarray entweder im Byte- oder im WAV-Format aus dem Quelldatenstrom (mit dem Befehl AddSamples) gefüllt. Im Moment versuche ich nur, den Puffer zu füllen und seinen Inhalt auf die Konsole zu schreiben oder eine einfache Visualisierung zu erstellen. Ich kann nicht scheinen, meine Werte aus dem Puffer heraus zu erhalten, und ich habe versucht, es als ein WAV- und ein Bytearray zu behandeln. Kann mir jemand helfen, zu verstehen, wie NAudio von Grund auf funktioniert und wie die Daten aus dem Puffer extrahiert und in einem nützlicheren Format gespeichert werden (d. H. Doppelt)? Hier ist der Code, den ich bisher für den Umgang mit NAudio habe, und alles, was damit verbunden ist:

public NAudio.Wave.BufferedWaveProvider waveBuffer = null; // clears buffer 

NAudio.Wave.WaveIn sourceStream = null; // clears source stream

public void startRecording(int samplingFrequency, int deviceNumber, string fileName)
{       
    sourceStream = new NAudio.Wave.WaveIn(); // initializes incoming audio stream
    sourceStream.DeviceNumber = deviceNumber; // specifies microphone device number 
    sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(samplingFrequency, NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels); // specifies sampling frequency, channels

    waveBuffer = new NAudio.Wave.BufferedWaveProvider(sourceStream.WaveFormat); // initializes buffer

    sourceStream.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(sourceStream_DataAvailable); // event handler for when incoming audio is available

    sourceStream.StartRecording();

    PauseForMilliSeconds(500); // delay before recording is stopped          

    sourceStream.StopRecording(); // terminates recording
    sourceStream.Dispose();
    sourceStream = null;
}

void sourceStream_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e)
{
    waveBuffer.AddSamples(e.Buffer, 0, e.BytesRecorded); // populate buffer with audio stream
    waveBuffer.DiscardOnBufferOverflow = true;
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage