【问题标题】:Writing contents of a DirectSound CaptureBuffer to a WAV file in C#将 DirectSound CaptureBuffer 的内容写入 C# 中的 WAV 文件
【发布时间】:2011-10-07 11:02:17
【问题描述】:

我已将音频录制到 CaptureBuffer,但我不知道如何将其保存到 wav 文件中。我试过这个(http://www.tek-tips.com/faqs.cfm?fid=4782),但是没有用,或者我没有正确使用它。有谁知道如何解决这个问题?示例代码将不胜感激。

【问题讨论】:

  • 该代码非常依赖于样本数据的 8 位单声道格式。您使用哪种采样率/位格式来记录数据?
  • 我不知道,我正在使用该链接中的 StartRecord() 函数。其实我以前从来没有用过声音,所以我在这里有点迷失方向。
  • 我刚刚将该链接中的代码复制到了一个新库中。然后从我的程序中添加对该库的引用。然后我声明了一个“SoundRec”类的对象并尝试使用它。但不知何故,每当我运行它时,程序就会冻结。
  • 嗯,你总是可以转换为字节并用 BinaryWriter 保存。
  • 到 Quantic Programming:我该怎么做?可以给一些示例代码吗?

标签: c# audio wav directsound


【解决方案1】:

WAV 文件是由两个主要“块”组成的 RIFF 文件。第一个是格式块,描述音频的格式。这将是您录制的采样率(例如 44.1kHz)、位深度(例如 16 位)和通道数(单声道或立体声)。 WAV 也支持压缩格式,但您不太可能录制压缩的音频,因此您的录制缓冲区将包含 PCM 音频。

然后是数据块。这是 WAV 文件的一部分,它包含捕获缓冲区中的实际音频数据。这必须是格式块中描述的格式。

作为NAudio 项目的一部分,我创建了一个WaveFileWriter 类来简化创建WAV 文件的过程。你传入一个 WaveFormat 来描述你捕获的音频的格式。然后,您可以简单地将原始捕获的数据写入其中。

这里有一些关于如何使用 WaveFileWriter 的简单示例代码:

WaveFormat format = new WaveFormat(16000, 16, 1); // for mono 16 bit audio captured at 16kHz
using (var writer = new WaveFileWriter("out.wav", format)
{
    writer.WriteData(captureBuffer, 0, captureBuffer.Length);
}

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 2015-08-20
    • 2015-07-20
    • 2013-08-01
    相关资源
    最近更新 更多