Попытка понять буферы относительно NAudio в C #
Я студент химии, пытаюсь использовать NAudio в C # для сбора данных с микрофона моего компьютера (планирую переключиться на аудиопорт позже, на случай, если уместно, как на это ответят). Я понимаю, что такое исходные потоки и как NAudio использует обработчик событий, чтобы узнать, стоит ли начинать чтение информации из указанного потока, но я озадачен, когда дело доходит до работы с данными, считанными из потока. Насколько я понимаю, буферный массив заполняется в байтовом или WAV-формате из исходного потока (с помощью команды AddSamples). Пока все, что я пытаюсь сделать, это заполнить буфер и записать его содержимое в консоль или сделать простую визуализацию. Кажется, я не могу вывести свои значения из буфера, и я пытался рассматривать его как WAV и байтовый массив. Может ли кто-нибудь помочь мне понять, как работает NAudio с нуля, и как извлечь данные из буфера и сохранить их в более полезном формате (т.е. удваивает)? Вот код, который у меня есть для обработки NAudio и всего, что с ним идет:
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;
}