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