解码 WAV 文件头

2023-11-24

我正在尝试理解 WAV 文件的标头。我打开了一个示例文件并得到了这个:

5249 4646 e857 1400 5741 5645 666d 7420
1000 0000 0100 0200 44ac 0000 10b1 0200
0400 1000

我一直在读这个数据表示教程.

我明白那个52是一个字节,代表ASCII字母R。我了解直到1000 0000。为什么它代表十进制16?教程说该位置的值始终是0x10。如何1000 0000等于0x10.

另外,在读取文件时,程序是否知道需要数字还是 ASCII?想必它会检查已经存在的十六进制值?

Thanks


希望这对您有所帮助,我将提及所有内容以澄清:

一般用于十六进制的东西:我使用十六进制编辑器,dhex,你应该能够apt-get, yum, or brew安装在你最喜欢的类 UNIX 机器上。我将使用这个网站作为大部分材料的来源:

正如您提到的,十六进制的前 4 个字节表示 ASCII 字符。在这种情况下,这些字符始终是:

52 49 46 46 - RIFF

接下来的 4 个字节表示块大小,为小端字节序。在你的情况下是:

e8 57 14 00 - 1333224

接下来的 8 个字节再次代表 ASCII 字符。在你的情况下:

57 41 56 45 - WAVE
66 6d 74 20 - fmt.

接下来的 4 代表块大小,它是小尾数:

10 00 00 00 - 268435456

这个卡盘不代表十进制16,它代表16位的十进制268435456(4个字节,1个字节为4位)。至于“为什么”块是 16 位的原因,您可以阅读更多内容音频编程简介。这说明数据部分中的块将为 16 位。

01 00代表音频格式(小端),在本例中 1 代表 PCI。02 00表示通道数,在您的情况下为 2。

接下来的 4 个字节表示采样率(小端),或者

每秒数据存在的样本(帧)数量。该场以 Hz 表示。 - 取自here.

44 ac 00 00 - 44100

接下来的 4 个字节表示字节率(小端):

10 b1 02 00 - 1049265

接下来的 2 个字节表示块对齐:

这是帧中的字节数(小端)。这是通过将通道数乘以样本中的字节数(而不是位数)来计算的。你可以找到更详细的计算here

04 00 - 4 

接下来是表示每个样本位数(小端)的 2 个字节,在您的情况下为 16

10 00 - 16

数据部分:

您当前没有数据部分.wav文件中,为了启动数据部分,您首先要写入 ASCII 值data像这样(大端):

64 61 74 61 - data

之后,您需要 4 个字节来表示您的块 2 的大小,您应该可以开始了。在测试方面,我建议阅读本指南如果你还没有。我还会重新开始阅读这篇关于如何构建原始 wav 文件的文章数字音频 - 创建 WAV (RIFF) 文件,这也应该有助于理解如何“解码”它们。

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

解码 WAV 文件头 的相关文章

  • EBCDIC 十六进制字符串的 Python 字节表示

    我有一个十六进制字符串 Hex E388854083969497A4A38599408881A2409985829696A38584408699969440814082A48783888583924B 作为字节对象 它看起来像这样 b xe
  • 改变 #RGB 颜色的饱和度:这里缺少什么?

    下面是亮度 饱和度改变程序的概念brightness and saturation function brightness colorstr steps return sprintf 02x 02x 02x r g b function s
  • 十进制到十六进制转换C++内置函数

    C 中是否有内置函数可以获取用户的十进制输入并将其转换为十六进制 反之亦然 我已经使用我编写的函数进行了尝试 但我想知道是否有一个内置函数可以稍微减少代码 提前致谢 十进制转十六进制 std stringstream ss ss lt lt
  • java中两个十六进制值相减或相加的方法

    有没有一种方法可以计算两个十六进制值而不将其转换为int 例如 String sHex f7c0 String bHex 040000000 十六进制值是整数 只是以十六进制而不是十进制表示 你就不能这样做吗 int sHex 0xf7c0
  • java中2的十六进制数到十进制的补码

    我有一个表示 2 的补码数的十六进制字符串 有没有一种简单的方法 库 函数 可以将十六进制转换为十进制而不直接使用其位 例如 这是左边十六进制的预期输出 0000 gt 0 7FFF gt 32767 max positive number
  • 尝试在Python中将wav文件转换为文本时出现wave.Error:known format:3

    我需要从麦克风录制音频并将其转换为文本 我已经使用从网上下载的几个音频剪辑尝试了此转换过程 效果很好 但是 当我尝试转换从麦克风录制的音频剪辑时 出现以下错误 回溯 最近一次调用最后一次 文件 C Users HP AppData Loca
  • 将字符串 ascii 转换为字符串 Hex

    假设我有这个字符串 string str 1234 我需要一个函数将该字符串转换为该字符串 0x31 0x32 0x33 0x34 我在网上搜索了很多类似的东西 但没有找到这个问题的答案 string str 1234 char charV
  • QSpinBox 具有用于十六进制输入的 Unsigned Int

    这里写了很多关于 QSpinBox 使用 int 作为其数据类型的限制的问题 人们通常希望显示更大的数字 就我而言 我希望能够以十六进制显示无符号 32 位整数 这意味着我希望我的范围为 0x0 0xFFFFFFFF 正常的 QSpinBo
  • 0x0A 和 0x0D 之间的区别

    我正在研究蓝牙 我试图编写代码以在连接时继续监听输入流 我遇到了以下代码片段 int data mmInStream read if data 0x0A else if data 0x0D buffer new byte arr byte
  • CSS Hex 到速记十六进制转换

    将十六进制转换为速记十六进制的正确算法是什么 例如 996633很容易被转换为 963 但如果是这样怎么办 F362C3 我的第一个猜测是我只取每种颜色的第一个值并使用它 所以 F362C3变成 F6C 但我不知道如何从数学上证明这种方法的
  • 为什么WAV格式在不同的浏览器中没有相同的mimetype?

    文件输入在 Chrome 或 Firefox 中为同一文件提供不同的 Mimetype 我有一个我想上传的 wav 文件 chrome 说是audio wav和火狐检测audio x wav 我知道这两个 mimetype 非常相似 x 代
  • 为什么十六进制数要加上 0x 前缀?

    为什么十六进制数字前缀为0x 我理解前缀的用法 但不明白为什么的意义0x被选中 短篇故事 The 0告诉解析器它正在处理一个常量 而不是标识符 保留字 仍然需要一些东西来指定数基 x是任意选择 很长的故事 在 60 年代 流行的编程数字系统
  • 如何将十进制整数转换为十六进制整数? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions cout lt
  • 十六进制数的按位异或

    我们如何在 Python 中对十六进制数进行异或 例如 我想要异或 ABCD and 12EF 答案应该是 B922 我使用了下面的代码 但它给出了错误的结果 xor two strings of different lengths def
  • 在两种颜色之间进行插值的最有效方法是什么? (预计有伪代码和按位运算)

    制作一个黑莓应用程序 想要一个渐变类 插入两种颜色的最有效方法 例如速度和电池寿命 是什么 请具体说明 Java of course int c1 0xFFAA0055 color 1 ARGB int c2 0xFF00CCFF colo
  • 如何在Java媒体框架中学习.wav持续时间?

    我正在尝试使用 java 媒体框架将 mov 文件与 wav 文件合并 因此我需要知道它们的持续时间 我怎样才能做到这一点 任何想法 将不胜感激 您可以使用以下方式了解声音文件的持续时间 即 VitalyVal 的第二种方式 import
  • 如何将十六进制颜色字符串解析为整数

    我正在 Robolectric 中编写一些代码 即IntegerResourceLoader 下面的方法抛出一个RuntimeException when rawValue是诸如0xFFFF0000 Override public Obje
  • 在 R 中读入原始二进制数据并将其转换为整数

    我有一个二进制文件 其中包含编码为不同长度 主要是 2 4 字节 的有符号或无符号整数的数值 为了处理这些数据 我将文件的所需部分读取为raw向量与readBin 然后尝试将其转换为十进制 问题是 R的内置函数有限制 我不太明白 比如没有l
  • 如何通过 Python socket.send() 发送字符串以外的任何内容

    我对 Python 编程非常陌生 但出于必要 我必须快速地将一些东西组合在一起 我正在尝试通过 UDP 发送一些数据 除了当我执行 socket send 时 我必须以字符串形式输入数据之外 一切都正常 这是我的程序 这样你就可以看到我在做
  • 在 C# 中将字符串转换为等效的字节十六进制

    我有一个传入的字符串68016101061B4A60193390662046804020422044204000420040402060226024676DB16我想转换成0x68 0x01 0x61 0x01 0x06 0x1B 0x4A

随机推荐

  • 的替代方案

    The tag从来都不是官方标准 现在已被所有浏览器完全放弃 是否有符合标准的方法使文本闪烁 blink text animation 1s blinker linear infinite webkit animation 1s blink
  • 当 php 脚本仍在执行时回显消息

    我有一个使用 cURL 的 php 脚本 执行大约需要 10 15 分钟 它的作用是 它解析大约 1000 个页面以查找特定的匹配项 并且在整个脚本中我都会回显诊断消息 例如 转到下一页 找到匹配项 加载页面时出错 它现在的工作方式 也是正
  • 如何修复尝试通过改造抛出 OutOfMemoryError 时抛出的 OutOfMemoryError

    我正在使用 Retrofit 在我的应用程序中下载一些媒体文件 如视频 mp3 jpg pdf 当我想下载 55MB 的 mp4 格式的大文件时 这是一个问题 当我想下载这个文件时 我收到如下错误 OutOfMemoryError thre
  • 如何在 C# 中使用 REST,包括 PUT、POST 和 DELETE?

    我有一个 REST Web 服务 需要在 C 中使用 不过 我需要的支持不仅仅是 GET 请求 我需要 REST 完成的所有操作 包括 GET PUT POST 和 DELETE 与之交互的最佳方式是什么 我没有看到 HTTPRequest
  • 使用 Angular.js 和 Node.js 构建实时应用程序哪种更好?

    我是 Angular js 和 Node js 的初学者 但我意识到有两种可能的方法来制作实时应用程序 第一个是使用 Socket io 另一个是使用带有 setInterval 函数的 RESTful 作为客户端解决方案 我使用两种替代方
  • PHP 与 Apple 通知网关的套接字连接失败

    免责声明 所以我发现了很多类似的问题和一些答案 但没有解决我的问题 我有这个简单的 PHP 代码
  • 拦截来电ios sdk(非越狱)

    您好 我尝试了很多次 发现由于安全原因 iOS SDK 不允许我们访问以下数据 拦截来电 从来电中获取电话号码 读取通话记录 拦截短信 从收到的短信中获取电话号码并读取其内容 阻止来电 etc 以下是我搜索有关此问题的一些链接 如何从 iP
  • SQL ' ' 不会被转义

    我正在尝试通过执行以下操作在 SQL 2008 中运行查询 query varchar max SET query SELECT FROM Table WHERE Name Karl EXEC query 问题是由于某种原因周围的撇号 Ka
  • Web Api 错误地反序列化枚举列表

    因此 我使用 Web API 控制器来接受 JSON 请求 它映射到包含枚举列表的模型对象 我遇到的问题是 如果 JSON 包含无效值 它似乎无法正确反序列化 我希望将无效值映射到枚举列表中的 0 值类型 但这并没有发生 我隔离了 3 种主
  • Android模拟器:设置移动设备号码?

    有谁知道是否可以设置模拟器的手机号码 我无法在任何地方找到有关此的信息 谢谢 基本上完全控制本博客末尾详细介绍的电话号码 http blog talosintel com 2013 04 changing imei provider mod
  • ggplot2:如何为由不同颜色的线连接的点指定多种填充颜色

    I am new to ggplot2 I would like to create a line plot that has points on them where the points are filled with differen
  • fopen 函数中的 a 和 a+ 选项有什么区别?

    我无法理解C fopen api文档中 a 和 a 选项的描述 a 中的选项是追加和更新 这里的 更新 一词是什么意思 这是手册页的内容 man fopen say a 打开以追加 写在文件末尾 如果满足则创建该文件 不存在 该流位于文件末
  • 在 Swing GUI 中嵌入视频的简单方法

    我一直在寻找一种将视频嵌入到我的 Java Swing GUI 中的极其简单的方法 我在追风吗 理想情况下 我希望有这样的东西 VideoPlayer video new VideoPlayer filename frame getCont
  • 我们应该密封单身人士吗?我们应该首先尝试从单例继承吗?

    是否应该允许 Singleton 类有孩子 我们应该密封它吗 优缺点都有什么 为了能够从 Singleton 类继承 我们必须将构造函数设置为受保护的而不是私有的 现在 这在 c 中没问题 但 java 中的 protected 字允许子类
  • 手动获取 AuthenticationManager 实例

    我正在尝试实现以下内容 但我的authenticationManager 实例抛出以下异常并且未自动装配 如何从 Spring 手动获取它的实例 我没有使用 Spring 控制器 而是使用 JSF 请求作用域 bean 当容器尝试自动装配a
  • 在 Play 2 路由中处理自由格式 GET URL 参数

    假设我有一个可以选择接受两个参数的操作 def foo name String age Integer Action name age can both be null if not passed 我如何设置我的route文件以使用以下任何
  • Seaborn 箱线图:类型错误:/ 不支持的操作数类型:“str”和“int”

    我尝试像这样制作垂直的seaborn箱线图 import pandas as pd df pd DataFrame a a b b a b 5 6 4 3 import seaborn as sns import matplotlib py
  • 聚合、关联和组合[重复]

    这个问题在这里已经有答案了 我有一个这样简单的例子 public class Order private ArrayList
  • 关于 iPhone 中的环境光传感器

    提前致谢 我从以下网站获得了有关 iphone 传感器的信息http ipod about com od ipodiphonehardwareterms qt iphone sensors htm 但我没有得到有关如何在 iPhone 中使
  • 解码 WAV 文件头

    我正在尝试理解 WAV 文件的标头 我打开了一个示例文件并得到了这个 5249 4646 e857 1400 5741 5645 666d 7420 1000 0000 0100 0200 44ac 0000 10b1 0200 0400