从多个 WAV 文件中删除标头,然后将剩余数据连接到一个 RAW 文件中

2023-12-25

我有一个 RAW 音频文件,它由几个串联的较小 WAV 文件组成。我可以在 Sound Forge 中以 48,000、8 位 PCM、签名、单声道格式打开并播放此文件。

我想做的是,在 C# 中,以编程方式用相等或更短长度的新数据覆盖文件中的每个单独的 WAV,我认为我已经非常接近能够做到这一点。我可以对 RAW 文件执行 File.ReadAllBytes,循环遍历字节数组,并确定每个 WAV 的开始和结束位置。然后,我在 PC 上选择新的 WAV 文件,删除标头,并将剩余数据写入 RAW 文件。如果新的 WAV 小于其目标,我会用 0 填充差异。

然而,当我按照上述设置在 Sound Forge 中打开新文件时,我的所有 WAV 看起来都更像实心块,而不是正常的“圣诞树”形状,而且它们都播放得很大声且失真。第一次体验后,我突然意识到我所有的新源 WAV 都是 41,000、16 位 PCM、带签名的立体声格式。我以这种格式打开了新创建的 RAW 文件,它看起来和播放都很好。

我想我必须首先将所有新的 WAV 转换为 48,000、8 位 PCM、签名、单声道,然后运行应用程序将它们复制到 RAW 文件中。在将数据复制到 RAW 文件之前,我使用 NAudio 编写了一些代码来对文件进行转换,但仍然遇到同样的问题。我还尝试先在 Sound Forge 中手动转换每个新的 WAV,但仍然遇到同样的问题。

我在这里缺少什么?谢谢。


该代码执行您所描述的操作(没有填充)。它打开 mainFile,然后在指定位置插入另一个文件。如果两个文件具有相同的格式,则可以正常工作。

public void InsertWave(string mainFile, string insertFile, long position)
{
    byte[] data = File.ReadAllBytes(insertFile);

    using (FileStream main = File.OpenWrite(mainFile))
    {
        main.Seek(position, SeekOrigin.Begin);
        main.Write(data, 0, data.Length);
        main.Close();
    }
}

如果两个文件都是 48,000 Hz、8 位 PCM、有符号、单声道,那么您就不会做任何错事。 但是,如果一个文件是单声道而另一个是立体声,或者一个文件是 8 位而另一个文件是 16 位,则您的输出将会失真。

文件实际使用的格式甚至并不重要。只要两者具有相同的格式并且您的位置是样本大小的倍数,您总是会得到一个有效的波形文件。

因此,如果您的输出失真,则文件很可能具有不同的格式。 如果将立体声转换为单声道,您还必须意识到不能只混合两个通道。您必须将电平降低 6dB 才能保持相同的音量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从多个 WAV 文件中删除标头,然后将剩余数据连接到一个 RAW 文件中 的相关文章

随机推荐

  • 使用插入单元格到表中时,UITableViewCell 不使用自动布局高度

    背景 我按照说明使用 purelayout 以编程方式创建 UITableViewCellshere https stackoverflow com a 18746930 766570 它基本上表明您必须在单元格上设置顶部 底部约束 然后使
  • 命令参数字符串未计算

    我在 aspx 页面内有一个命令参数 设置为 for 循环内的对象变量 如下所示
  • 将 Monolog WebProcessor 与 Laravel 5.6 结合使用

    我发现新的日志堆栈 通道提供了一种方法tap或定义handlers 但是 我正在努力获得WebProcessor已加载 但似乎不起作用 这个应该被挖掘吗 或者有其他方法来加载它吗 这是 Laravel 5 6 特有的 这是我在使用 Lara
  • 如何使用 JAXB 从 Java 中的 XSD 获取 minOccurs / maxOccurs 值?

    我的应用程序正在调用 Web 服务 并且我已使用 maven jaxb2 plugin 从 WSDL XSD 生成了 Java 类 Web 服务调用在一段时间内工作得很好 但最近我在将对象编组到 XML 时遇到了问题 org xml sax
  • amqp 或 xmpp 用于实时在线游戏[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 以下哪些技术套件适用于多用户在线游戏项目 项目要求 能够在任何给定时间处理 2k 5k 用户 适用于
  • CleanWPPAllFilesInSingleFolder 错误使我的项目不再加载

    我使用 VS2012 创建了一个动态数据项目 一切顺利 然后我开始配置 Web 部署设置 我不确定我到底更改了什么设置 因为没有错误 但是 当我尝试加载解决方案时 我收到该项目的以下错误 并且它将不再加载 Specified conditi
  • 为什么我会收到此 LineUnavailableException?

    我在代码的第 34 行不断收到 LineUnavailableException https www refheap com 21223 https www refheap com 21223 错误读取为javax sound sample
  • 使用 ConstraintLayout 的展开链元素组

    我在使用约束布局传播 2 组元素时遇到问题 我知道这个新布局的目标是使用平面层次结构 因此我想避免将我的元素放入子布局中 我查看了一些很棒的资源 例如constraintlayout com 但无法弄清楚如何使其适用于我的特定案例 我认为这
  • 协会类别的独特性

    我很难理解 UML 2 5 规范中解释的关联类的概念 最让我困惑的是下面这句话 摘自199页 笔记 即使当 AssociationClass 的所有末端都具有 isUnique true 时 也可能有多个实例关联末端类的同一组实例 正如这里
  • 如何能够显示没有文本的表 TD

    我的问题 如何让表格的 TD 不带有文本 而不使其消失 我使用这个 HTML 代码 div div div table cellpadding 0 cellspacing 0 border 0 tr td td td td td td tr
  • 如何在 Windows 上集成 PHP 和 R?

    集成 PHP 和 R 时遇到一些问题 我正在研究这篇文章 http www r bloggers com integrating php and r http www r bloggers com integrating php and r
  • CSS 类align-self-end 不起作用

    div class col md 3 div class card bg dark text white img class card img src http via placeholder com 300x340 alt Card im
  • Laravel proc_open():分叉失败

    我在 laravel 后出现此错误composer update 未捕获的ErrorException proc open fork失败 资源在vendor symfony console Terminal php中暂时不可用 127 pr
  • Zend 捕获布局并将内容视为变量

    我有一个控制器 My Controller 带有简单的示例操作 public function exempleAction Using layout mail this gt helper gt layout gt setLayout ma
  • 非规范化:多少才算太多?

    我已经为我正在 按书本 构建的网络应用程序设计了数据库 也就是说 我已经 创建了包含应用程序的实体 属性和关系的 E R 图 将 E R 图转换为模式 将架构转换为 无架构 形式以对数据库进行建模 该数据库是 Cassandra NoSQL
  • 使用 POST 参数压缩 HTTP 文本

    我正在编写客户端软件 该软件使用大量文本 实际上是 JSON 对象 作为 POST 参数来启动 HTTP 请求 我想在发送之前压缩此文本并在服务器上解压缩该文本 Gzip 生成二进制文件 我认为我无法将其作为 POST 参数发送 存在哪些选
  • 尝试安装 JDK8 U11 OSX 10.10 Yosemite 时出错

    今天是 Oracle JDK8 U11 的发布 当我尝试在 OSX yosemite 10 10 中安装 pkg 时 出现此错误并且无法继续 OSX版本存储在 System Library CoreServices SystemVersio
  • 数据上下文注册为瞬态,但内存使用量不断增长。我的 DI 配置有问题吗?

    我在用着EF Core和 一起Postgres 可能并不重要 在一个 NET Core 3 1 控制台应用程序 该程序使用一个共享项目 以及解决方案的其他组件 所有业务逻辑均使用简单的 CQRS 类型模式和 Mediator 来实现 在一处
  • 将哈希值从 php script() 移植到 python

    我想知道是否有与 PHP 同源的 pythoncrypt 函数以类似的方式执行 生成随机盐并将其嵌入到保存的字符串中 我有一个使用创建的哈希密码表 5 用于设置基于 SHA256 的加盐密码的字符串密钥 这些哈希值在两端以固定的间隔附加了一
  • 从多个 WAV 文件中删除标头,然后将剩余数据连接到一个 RAW 文件中

    我有一个 RAW 音频文件 它由几个串联的较小 WAV 文件组成 我可以在 Sound Forge 中以 48 000 8 位 PCM 签名 单声道格式打开并播放此文件 我想做的是 在 C 中 以编程方式用相等或更短长度的新数据覆盖文件中的