将 nAudio 录音存储在变量而不是 c# 中的文件中

Storing a nAudio recording in a variable instead of a file in c#

我正在使用 nAudio 录制声音字节,我想将这些直接存储到对象内的变量中,而不是将它们写入文件。

目前我正在记录数据如下:

internal void start_recording(int device_number, string recording_file)
{
   recording_file_name = recording_file;
   mic_source_stream = new WaveIn();
   mic_source_stream.DeviceNumber = device_number;
   mic_source_stream.WaveFormat = new WaveFormat(44100, WaveIn.GetCapabilities(device_number).Channels);
   mic_source_stream.DataAvailable += new EventHandler<WaveInEventArgs>(mic_source_stream_DataAvailable);
   wave_writer = new WaveFileWriter(recording_file, mic_source_stream.WaveFormat);
   mic_source_stream.StartRecording();
}
internal void mic_source_stream_DataAvailable(object sender, WaveInEventArgs e)
{
   if (wave_writer == null) return;
   wave_writer.Write(e.Buffer, 0, e.BytesRecorded);
   wave_writer.Flush();
}

这将创建一个包含录音的 *.wav 文件。

相反,我想将音频数据保存在变量中,将所有相关录音保存到一个对象中,而不是文件系统中的多个 *.wav 文件,但 nAudio 似乎适合直接录制到文件中并从文件中播放。

如果有一种简单的方法可以将音频录制到一个变量并从该变量播放它,或者我应该采用愚蠢但简单的方法录制到 *.wav 文件,然后将文件读取到字节数组,那么在加载数组进行播放之前将数组写回文件?

记录会非常小,所以性能不是问题,只是写入磁盘只是为了在内存中将其读回两次,这很麻烦。

WaveFileWriter 具有接受任意 Stream 的构造函数 - 只需将 MemoryStream 传递到那里。这位作家的名字当然有点混乱。

我建议直接将录制的音频写入 MemoryStream。然后当你想播放的时候,用一个RawSourceWavestream传入你正在录音的MemoryStreamWaveFormat。根本不需要涉及WAV文件格式。