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

本文关键字:文件 存储 中将 nAudio 记录 变量 | 更新日期: 2023-09-27 18:13:45

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

此刻,我正在记录如下数据:

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文件的愚蠢但简单的路线,读取文件到字节数组,然后写入数组回文件之前加载它播放?

记录将非常小,所以性能不是问题,只是写入磁盘只是为了在内存中读取它两次,这是令人讨厌的。

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

我建议简单地将录制的音频写入MemoryStream。然后当你想要回放时,使用RawSourceWavestreamMemoryStreamWaveFormat中传递,你正在录制。完全不需要涉及WAV文件格式

WaveFileWriter有一个接受任意流的构造函数-只需将MemoryStream传递到那里。这个作者的名字当然有点令人困惑