创建 24 位 WAV 文件需要做什么特别的事情吗?

2024-03-14

我可以成功创建 16 位 wav 文件,但创建 24 位文件时,我听到的只是白噪声。我正在设置 24 位有符号整数数据块。我是否必须在 wav 文件头的第 20 字节处设置一些特殊的音频格式?我目前使用的是格式1。

Edit #1

The wBitsPerSample字段设置为 24。wAvgBytesPerSec(字节率)字段设置为

// 44100 * (2 * 3)
sampleRate * blockAlign

and wBlockAlign被设定为

// 2 * 3
numChannels * bytesPerSampe

假设您已经这样做了,数据本身需要是 24 位对接(需要位移位和屏蔽,除非数据已经来自 24 位字节源)。或者换句话说:每个样本将占用 3 个字节。与 16 位一样,字节顺序很重要。

不过,我不知道这部分我是否正确。

我的数据采用 Float32 形式,从 -1 到 1 (AudioBuffer.getChannelData())。然后我将其转换为 Int24:

function floatTo24BitPCM(output, offset, input) {
  for (var i = 0; i < input.length; i++, offset += 3) {
    var s = Math.floor(input[i] * 8388608 + 0.5)
    output.setInt24(offset, s, true)
  }
}

and

DataView.prototype.setInt24 = function(pos, val, littleEndian) {
    this.setInt16(pos, val >> 8, littleEndian);
    this.setInt8(pos+2, val & ~4294967040, littleEndian); // this "magic number" masks off the first 16 bits
}

这个过程是否尊重规范(看起来我正在做位移和屏蔽)setInt24)?

Edit #2

修改

DataView.prototype.setInt24 = function(pos, val, littleEndian) {
    this.setInt16(pos, val >> 8, littleEndian);
    this.setInt8(pos+2, val & ~4294967040, littleEndian); // this "magic number" masks off the first 16 bits
}

to

DataView.prototype.setUint24 = function(pos, val, littleEndian) {
    this.setUint8(pos, val & ~4294967040, littleEndian); // this "magic number" masks off the first 16 bits
    this.setUint16(pos + 1, val >> 8, littleEndian);
}

成功了。我认为字节顺序不正确?我很困惑为什么取出最后一个字节并将其放在前两个字节之前是正确的顺序。

我还建议重新提出这个问题,因为它已经足够狭窄,不再被视为“广泛”。


从帖子中有限的上下文来看——

wBitsPerSample(里面fmt->fmt-ck格式化特定块,使用 1 (PCM)wFormatTag很好)必须反映每个样本的位数,即。在本例中为 24。

假设您已经这样做了,数据本身需要是 24 位对接(需要位移位和屏蔽,除非数据已经来自 24 位字节源)。或者换句话说:每个样本将占用 3 个字节。与 16 位一样,字节顺序很重要。

wAvgBytesPerSec and wBlockAlign与以前一样仅使用新的位大小进行计算。

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

创建 24 位 WAV 文件需要做什么特别的事情吗? 的相关文章

  • 使用 setAttribute() 添加“onclick”函数

    为什么以下不起作用 显然该功能尚未添加 function activatetypeinput event devtype The function is called but it doesn t set the attribute var
  • 如何获取对象的所有属性?

    如何在 JavaScript 中使用反射获取对象的所有属性 循环遍历对象并获取属于该对象且不属于该对象的每个键 一个函数 var properties for var key in obj if obj hasOwnProperty key
  • 在 JavaScript 中生成 RSA 密钥对

    我最近发现了这个 RSA JavaScript 库 http www ohdave com rsa http www ohdave com rsa 但是 它要求预先生成密钥 这是我的问题 问题 我想在 JavaScript 中生成 RSA
  • Jasmine-jQuery loadFixtures 未定义

    我对整个茉莉花的事情仍然很陌生 在过去的几个小时里我陷入了这个问题 我尝试使用 loadFixture 加载外部夹具文件 我使用 Jasmine 2 0 0 和 Jasmine jQuery 2 0 5 ReferenceError loa
  • 定义 js-xlsx 单元格范围

    我正在尝试使用 js xlsx 读取 Excel 值 我可以使用以下代码从工作簿工作表中获取单元格值 if typeof require undefined XLSX require xlsx var workbook XLSX readF
  • html 表格单元格的条件格式

    是否有现成的解决方案可以对 HTML 表格进行条件格式设置 通过条件格式 我更感兴趣的是根据该列或其他列 在同一个表中 的值 数字 将不同的颜色作为单元格背景 类似于我们在 Excel 条件格式 gt 色阶 gt 红黄绿中的内容 我想在通过
  • window.onbeforeunload 在 Android Chrome 上不会触发 [alt.解决方案?]

    我开发了一个简单的聊天应用程序 我正在使用 window onbeforeunload当有人关闭选项卡 浏览器时 基本上是当用户离开房间时 通知其他用户 这是我的代码 scope onExit function scope chatstat
  • 在鼠标光标位置添加 cytoscape 节点

    我想在画布上的单击事件上的鼠标箭头位置添加一个 cytoscape 节点 我怎样才能做到这一点 我的方法 效果不太好 我可以通过单击创建一个节点 但无法确保创建的节点的位置位于我单击的位置 使用这样的东西 cy click function
  • Web 组件 - 服务/非 html 组件

    所以我来自 Angular 想看看如何创建vanilla Web components 现在 从 Angular 开始 我们倾向于将事物分开 组件 充当 HTML CSS 和一些 javascript 然后是 服务 主要负责收集数据和执行不
  • 如何从 JSON 响应重定向?

    所以我尝试使用 Flask 和 Javascript 上传器 Dropzone 上传文件并在上传完成后重定向 文件上传正常 但在烧瓶中使用传统的重定向 return redirect http somesite com 不执行任何操作 页面
  • 如何更改自动完成中的结果过滤器?

    我不想进行字面匹配 而是想通过正则表达式选择结果 我可以覆盖自动完成的默认行为来完成此任务还是需要替代结构 有一个内置的方法可以做到这一点 只需提供一个函数source http jqueryui com demos autocomplet
  • JavaScript 测验在提出所有问题之前结束

    我现在正在学习 JavaScript 并且正在创建一个测验 我的测验运行正常 控制台中没有任何错误 但它会跳过问题 有时会在回答所有问题之前结束测验 即使给出正确答案 也会减少时间 我不太确定为什么它会这样做 因为在我看来它的编码是正确的
  • 如何在 ASP.NET MVC 3 的 Razor 视图中编码嵌入的 javascript?

    如何在以下上下文中正确编码 JavaScript 我的 JSON 对象中的值是由应用程序管理员设置的 因此我假设它们需要正确编码 对于 HTML 和 JavaScript 都是如此 我在用着System Web Script Seriali
  • 禁用特定 div 上的 Tab 键

    我有以下结构 div div Some content div div Some content div div 我想 禁用 div2 上的 tab 键 我的意思是按下 tab 键时 div2 的元素不会获得焦点 有没有简单的方法可以使用
  • 如何处理requireJs超时错误?

    我正在使用 require js 作为加载框架编写一个移动混合应用程序 我遇到加载错误的问题 我想做的是在设备离线且无法下载在屏幕上显示地图所需的 google 地图 API 脚本时设置后备解决方案 我得到的只是 Uncaught Erro
  • Knockout.js 安全绑定

    我想使用带有淘汰赛的安全绑定 为此我使用敲除安全绑定 js https github com brianmhunt knockout secure binding 谁能解释一下为什么下面的代码不起作用 它会抛出一个错误 未捕获 淘汰 安全
  • mozilla pdf.js 没有全视图

    我喜欢这个 pdf 查看器https github com mozilla pdf js https github com mozilla pdf js Demo http mozilla github com pdf js web vie
  • 如何使用 jQuery 或 JavaScript 聚焦 或 标签?

    for var i 0 i
  • 将 RequireJS 与遗留代码结合使用

    我正在处理一个非常大的项目 该项目使用 包含带有脚本标记的 javascript 文件的旧版 JSP 页面 使用其他 javascript 模块而不使用 RequireJS 的骨干模型和视图 现在 我们希望开始将 RequireJS 与 j
  • 强制输入数字小数位

    我想强制

随机推荐