【问题标题】:NAudio - Record audio to memory, make changes to it, then save to diskNAudio - 将音频录制到内存,对其进行更改,然后保存到磁盘
【发布时间】:2016-10-14 05:05:19
【问题描述】:

我会按照以下顺序进行:

  1. 使用WaveIn 将音频录制到内存中。
  2. 以 IEEE 32 位样本数组的形式从内存中获取内容。
  3. 对示例进行一些修改。
  4. 保存回磁盘。

我知道如何使用WaveIn 进行录音,以及如何使用WaveFileReaderWaveFileWriter。但是这里还需要其他的类,我不知道怎么用。

【问题讨论】:

    标签: naudio


    【解决方案1】:
    1. 将您使用WaveIn 收到的所有音频写入MemoryStream
    2. 完成录制后,将MemoryStream.Position 重置为0。然后使用WaveInWaveFormat 将其传递到RawSourceWaveStream
    3. 使用RawSourceWaveStream 上的ToSampleProvider 转至IEEE 32 位
    4. 从您的示例提供程序一次将音频读取到 float[] 中。
    5. 执行您需要的任何 DSP
    6. 将其写入WaveFileWriter

    如果您将 DSP 实现为自定义 ISampleProvider,您可以进一步简化您的管道,并使用 WaveFileWriter.CreateWaveFile 自动将所有数据从 MemoryStream 拉到您的 WAV 文件中

    【讨论】:

    • 非常感谢马克。只有一个问题 - 使用 ISampleProvider.Read 时,是否有理由一次读取一个块而不是一次读取所有内容?
    • 鉴于它直接来自内存缓冲区,一次读取所有内容是非常安全的。如果你是通过编解码器等来拉它,那么通常建议阅读更小的块
    • 我刚刚注意到最后一步有问题:我有一个'float[]',但我想用WaveFileWriter.Write将文件保存为16位PCM
    • 这就是为什么我说要创建一个ISampleProvider。然后你可以使用WaveFileWriter.CreateWaveFile16,或者通过SampleToWaveProvider16
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2013-04-28
    相关资源
    最近更新 更多