【问题标题】:Record audio into memorystream then save it into a file将音频录制到内存流中,然后将其保存到文件中
【发布时间】:2018-10-17 21:53:53
【问题描述】:

我正在使用 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 秒的音频保存到一个文件中。

现在,我的问题是我应该如何将音频存储在内存中,然后将其写入文件?

【问题讨论】:

  • 这是您要找的吗? stackoverflow.com/questions/19722028/…
  • 如果不是,这个问题可能是因为 WAV 和 MP3 不同,一个是无损的,另一个是压缩的,如果我没记错的话,我在修补 mp3 时可能会有标题数据文件也是如此。可能是 1!=1 兼容性问题。
  • 我的意思是写 wav 而不是 mp3。但这不是问题。
  • 不,不幸的是,这不是我想要的。

标签: c# .net file audio naudio


【解决方案1】:

试试这个:

using(var fileWriter = new WaveFileWriter("yourOutputFile", SampleProvider.WaveFormat)
{
    ResourceWaveStream.CopyTo(fileWriter);
}

顺便说一句,这里的“使用”块对你有好处,因为它会自动释放写入器,允许 WaveFileWriter 将标题写入文件。

【讨论】:

  • 我创建了一个 WaveFileWriter(new WaveFileWriter(new IgnoreDisposeStream(ms), voiceCapturer.WaveFormat)) 并将声音数据写入其中。之后我将内存流复制到适当的 WaveFileWriter,但它没有用。
  • 修改答案,试试这个?
  • 等等,在将内存流复制到文件写入器之前,是否需要将其传递给 ResourceWaveStream?
  • 是的,如果您使用 ResourseWaveStream,您需要从 memoryStream 转换为它,我假设添加了 Wave 类型的格式,我认为您应该这样做。您也可以尝试直接将 MemoryStream 复制到 WaveFileWriter(跳过新的 RawSourceWaveStream() 部分),但我不确定 WaveWriter 是否会喜欢。如果您想尝试将 MemoryStream 直接复制到 writer,请务必在复制之前回退流(查找 0)。
【解决方案2】:

好的,我终于有了解决方案。首先,我将声音数据直接复制到内存流中。然后当我需要它时,我将整个内存流读入RawSourceWaveStream,然后将其传递给最终的WaveFileWriter。如果有人对我的具体做法感兴趣,请给我留言。

谢谢。

【讨论】:

  • 当然,你帮了我很多。(那不是讽刺)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多