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

Posted

技术标签:

【中文标题】将nAudio录音存储在变量而不是c#中的文件中【英文标题】:Storing a nAudio recording in a variable instead of a file in c# 【发布时间】:2015-09-19 18:06:17 【问题描述】:

我正在使用 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 文件,将文件读取到字节数组,然后写入在加载文件进行播放之前将数组返回到文件?

记录将非常小,因此性能不是问题,只是写入磁盘只是为了在内存中读取它两次,这很困难。

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于将nAudio录音存储在变量而不是c#中的文件中的主要内容,如果未能解决你的问题,请参考以下文章

枚举 NAudio 中的录音设备

C# NAudio 自动录制

使用 C# 中的 NAudio 将 M4A 音频文件转换为 MP3 的问题/错误

Naudio BadDeviceId 在 C# 中调用 waveInOpen 错误

如何同时使用 NAudio 生成信号和录音?

C# NAudio 音量