将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
传入你正在录制的MemoryStream
和WaveFormat
。根本不需要涉及WAV 文件格式。
【讨论】:
【参考方案2】:WaveFileWriter 具有接受任意 Stream 的构造函数 - 只需将 MemoryStream 传递到那里。这个作者的名字当然有点混乱。
【讨论】:
以上是关于将nAudio录音存储在变量而不是c#中的文件中的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# 中的 NAudio 将 M4A 音频文件转换为 MP3 的问题/错误