在 C# 中将 DirectSound CaptureBuffer 的内容写入 WAV 文件

2024-01-10

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


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

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

作为NAudio http://naudio.codeplex.com/我创建了一个项目波形文件写入器 http://naudio.codeplex.com/SourceControl/changeset/view/76093#7823类来简化 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中将 DirectSound CaptureBuffer 的内容写入 WAV 文件 的相关文章

  • 更新面板工作速度非常慢

    我正在编写一个用户可以注册的应用程序 注册时 可以选择多个选项 并根据这些注册字段可见或不可见以及是否必需 我想出了一个想法 所有字段都将位于 updatePanel 中 当用户更改注册选项时 我将在服务器端设置这些字段的可见性 它可以工作
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 处理右值时的 insert 与 emplace

    std string myString std unordered set
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 播放没有音频标签的音频

    是否可以在没有音频标签的情况下仅使用 javascript 播放音频 我通过 tinyMce 编辑器注入脚本 因为我无权访问网站的后端 并且它不支持客户端的音频标签 她只想要当您将鼠标悬停在图像上时发出简单的声音 我已经完成了所有设置 但是
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR

随机推荐

  • 动态禁用和启用单选按钮

    我正在创建一个简单的 DISC 配置文件测试 其中每个问题都有 8 个单选按钮 如果我选中伟大的 M 单选按钮 伟大的 L 单选按钮将被禁用并且无法选择 您必须选择其他类似的强大 善良或勇敢 表格看起来像这样 我正在尝试使用 jQuery
  • 使用 do-while 循环测试输入是否为整数且大于(两个条件) - Java

    我需要用户输入大于 10 的整数 这是我的代码 import java util program uses class Scanner public class Tests public static void main String ar
  • 为 4.70 或 5.0 组件配置 Blackberry Eclipse 插件

    我正在寻求配置 Blackberry 开发环境的帮助 事实上 这是一个相当令人沮丧的过程 黑莓网站没什么用 事实证明 在已移动的链接 假定的细节和过时的文档之间 黑莓的开发很难取得任何进展 唷 现在我的咆哮结束了 这是我的问题 我终于让 E
  • 使用父级获取可绘制资源

    当我定义样式时 它可以从父样式继承 例如 现在我想对可绘制资源执行相同的操作 如下所示
  • Qt 样式表。背景颜色,是的。背景图像,NO

    这是样式表的一个奇怪问题 我有一个窗口 QWidget 类的子窗口 我对其应用样式表 以理想地将整个窗口的背景更改为带有重复 x 和重复 y 的图像 并将其平铺 样式表 管道 有效 如果我使用 背景颜色 并将其设置为红色 则整个窗口将被漆成
  • 使用robotframework-selenium时如何测试空白文本字段?

    将 robotsframework seleniumlibrary 与 TSV 文件一起使用时 如何为文本字段指定空白 空值 例如 我有以下内容 Textfield Value Should Be identifier name1 Chri
  • MySQL 行校验和

    是否可以选择表中的整行并获取校验和 我正在寻找一种方法来告诉我的代码仅在至少一条记录已更改时才更新数据 从数据更改跟踪的角度来看 它将帮助我缩小历史表中记录的许多更改的规模 您可以结合MD5 https dev mysql com doc
  • 如何在 JSP 中绑定动态字段列表

    我正在构建一个用于输入足球比赛结果的 JSP 页面 我得到了一份未解决的游戏列表 我想将它们列出如下 team1 vs team4 hidden field game id input field for home goals input
  • 从资产文件夹复制数据库[重复]

    这个问题在这里已经有答案了 我正在创建一个使用现有 sqlite 数据库的字典应用程序 我已将数据库放置在资产文件夹中 并在应用程序首次启动时使用以下代码来复制数据库 我借用了这个想法this http www reigndesign co
  • Android 拒绝来电

    在我的android项目 目标sdk版本23 中 我想拒绝来电 我知道对此有很多疑问 特别是 1 如何将 com android internal telephony ITelephony 导入到 Android 应用程序 https st
  • 找出给定数据集中每列缺失值的百分比

    import pandas as pd df pd read csv https query data world s Hfu PsEuD1Z yJHmGaxWTxvkz7W b0 percent 100 len df loc df isn
  • 将 JavaScript 转换为 Java [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 有没有好的方法将JavaScript
  • 如何使用 jQuery 检查单选按钮?

    我尝试使用 jQuery 检查单选按钮 这是我的代码
  • 如何解决 SystemError: _internal 初始化失败而不引发异常?

    Problem 我编写了一个代码 将一些历史数据作为输入 假设数据集有一个timeseries格式 我正在尝试进行回归并找到预测变量 Code 对于我的项目 我有四个文件 my project py utilities py plotter
  • require.js POST 请求 spotify Web api 返回“解析 json 时出错”

    根据Spotify Web API 创建播放列表 https developer spotify com web api create playlist 一旦授权成功 带有 access token 和一些其他参数的 POST 应该为用户创
  • 多次检测到碰撞。

    我正在制作一个飞扬的小鸟游戏 当我的鸟经过每堵墙 收集一枚硬币时 我似乎遇到了问题 有2个问题 1 收集后游戏会滞后一毫秒 2 我的鸟似乎每次都会发生 2 次甚至 3 次碰撞 得分为 2 或 3 我无法理解这一点 我的鸟是一个 5 纹理动画
  • 使用shared_ptr和glutInit会导致分段错误

    经询问this https stackoverflow com questions 33855611 defining shared ptr causes segfault cmake在我尝试了很多东西并发现问题与 glutInit 有关之
  • 在使用 Material-UI 的 React 中复选框无法切换

    所以我有一个 React 代码 其中当我单击它时复选框不会切换 这是codesandbox链接 https codesandbox io s inspiring kirch q6p4h https codesandbox io s insp
  • 如何在所有处理程序之前运行函数?

    是否可以使用 net http 包或任何 gorilla 库在 Web 应用程序中的任何处理程序之前执行函数 例如 这对于在处理实际请求处理程序之前检查传入请求是否来自列入黑名单的 IP 地址非常有用 创建一个处理程序 在检查 IP 地址后
  • 在 C# 中将 DirectSound CaptureBuffer 的内容写入 WAV 文件

    我已将音频录制到 CaptureBuffer 但我不知道如何将其保存到 wav 文件中 我已经尝试过这个 http www tek tips com faqs cfm fid 4782 http www tek tips com faqs