我正在使用NAudio捕获15秒的音频。像这样:
MemoryStream bufferedVoice = new MemoryStream();
voiceCapturer = new WasapiLoopbackCapture(OutputDevice);
voiceCapturer.DataAvailable += onVoiceOutputReceived;
voiceCapturer.StartRecording();
private void onVoiceOutputReceived(object sender, WaveInEventArgs e)
{
bufferedVoice.Write(e.Buffer, 0, e.BytesRecorded);
}
15秒后,我想将其保存到文件中,然后退出。我试过这样但它不起作用:
var ResourceWaveStream = new RawSourceWaveStream(bufferedVoice, voiceCapturer.WaveFormat);
var SampleProvider = new WaveToSampleProvider(ResourceWaveStream).ToWaveProvider16();
var fileWriter = new WaveFileWriter("output.mp3", SampleProvider.WaveFormat);
byte[] buf = new byte[8192];
while(SampleProvider.Read(buf, 0, buf.Length) > 0)
{
fileWriter.Write(buf, 0, buf.Length);
}
fileWriter.Dispose();
如何将内存流保存到文件中?
澄清:我只想在内存中存储x秒的音频。因此,当达到最大尺寸时,将移除一些最旧的部分。然后,如果我按下一个按钮,我想将15秒的音频保存到文件中。
现在,我的问题是如何将音频存储在内存中,然后将其写入文件?
答案 0 :(得分:1)
试试这个:
using(var fileWriter = new WaveFileWriter("yourOutputFile", SampleProvider.WaveFormat)
{
ResourceWaveStream.CopyTo(fileWriter);
}
顺便说一下,“using”块对你有好处,因为它会自动处理编写器,允许WaveFileWriter将头文件写入文件。
答案 1 :(得分:0)
好的,我终于有了解决方案。首先,我将声音数据直接复制到内存流中。然后当我需要它时,我将整个内存流读入RawSourceWaveStream
,然后将其传递给最终WaveFileWriter
。如果有人对我的确切方式感兴趣,请给我留言。
感谢。