解码 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 文件头 的相关文章

  • Swift 5.4 十六进制转 NSColor

    我正在为 macOS 开发一个程序 我需要将十六进制颜色转换为 NSColor 我在这里查看了建议的解决方案 将十六进制颜色代码转换为 NSColor https stackoverflow com questions 8697205 co
  • 使用 Java 将十六进制转储的字符串表示形式转换为字节数组?

    我正在寻找一种将表示十六进制值的长字符串 来自转储 转换为字节数组的方法 我无法比发帖者更好地表达它同样的问题在这里 http www experts exchange com Programming Programming Languag
  • 传送 Wav 音频数据的 DirectShow 过滤器的媒体类型设置是否正确?

    我使用 Delphi 6 Pro 和 DSPACK DirectShow 组件库来创建一个 DirectShow 过滤器 该过滤器从自定义音频源提供 Wav 格式的数据 需要明确的是 我将原始 PCM 音频样本作为字节数据提供 不涉及 Wa
  • 如何在PHP中将大整数转换为十六进制?

    我怎样才能转换这个 93126606828970615947672892964530113131806047264927526149623497787359285987082123864065558768789161850941454200
  • 如何使用 python 连接多个 .wav 文件 [重复]

    这个问题在这里已经有答案了 我看到一篇文章将两个 wav 文件连接在一起 但我想知道如何使用 python 连接多个 wav 文件 我正在使用 python 3 6 0 如果有人有办法做到这一点 请教我 我看到另一篇文章要求加入 2 个 w
  • 创建 24 位 WAV 文件需要做什么特别的事情吗?

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

    我有一个从相机中提取的 u Law 压缩 PCM 数据流 我需要在扬声器上播放它吗 有人知道怎么做吗 我尝试过将 u Law 解码为普通的 WAV 数据 然后使用 SoundPlayer 但它似乎从来没有工作过 SoundPlayer 总是
  • 十六进制字符串到文本的转换 - swift 3

    我正在尝试将十六进制字符串转换为文本 这就是我所拥有的 Str to Hex func strToHex text String gt String let hexString text data using utf8 map String
  • 将十六进制字符串(hex)转换为二进制字符串

    我发现了以下十六进制到二进制转换的方法 String binAddr Integer toBinaryString Integer parseInt hexAddr 16 虽然此方法适用于较小的十六进制数字 但如下所示的十六进制数字 A14
  • EBCDIC 十六进制字符串的 Python 字节表示

    我有一个十六进制字符串 Hex E388854083969497A4A38599408881A2409985829696A38584408699969440814082A48783888583924B 作为字节对象 它看起来像这样 b xe
  • 十进制到十六进制转换C++内置函数

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

    我想在 python 2 7 中将 numpy 数组转换为字节串 比如说我的 numpy 数组a是一个简单的2x2数组 看起来像这样 1 10 16 255 我的问题是 如何将此数组转换为字节字符串或字节数组 输出如下 x01 x0A x1
  • 以编程方式变亮或变暗十六进制颜色(或 RGB 和混合颜色)

    这是我正在开发的一个函数 用于以编程方式使十六进制颜色变亮或变暗特定的量 只需传入一个字符串 例如 3F6D2A 对于颜色 col 和一个以 10 为基数的整数 amt 用于变亮或变暗的量 要变暗 请传入负数 即 20 我这样做的原因是因为
  • 如何使用 JavaSound (Java, Java Sound) 从 .wave 文件读取信息

    您好 我需要从 wave 文件中读取采样率 信号频率和幅度 我怎样才能使用 JavaSound 做到这一点 您可以通过获取句柄来获取采样率AudioFormat object AudioInputStream audioInputStrea
  • 在ESC/POS命令中选择字符代码表

    我需要在打印收据上打印非英文字符 使用热敏 POS 收据打印机 Xprinter XP 58III 热敏 POS 收据打印机支持通用 ESC POS 命令 据我所知 这应该通过设置字符代码表来完成 就我而言 目标代码页是 21 用于设置代码
  • Java Char 到其 unicode 十六进制字符串表示形式,反之亦然

    我需要将Java字符的十六进制代码生成为字符串 并稍后再次解析这些字符串 我发现here https stackoverflow com questions 2126378 java convert string uffff into ch
  • C 中的十六进制到字符数组

    Given a string of hex values i e e g 0011223344 so that s 0x00 0x11 etc 如何将这些值添加到 char 数组 相当于说 char array 4 0x00 0x11 您无
  • CSS Hex 到速记十六进制转换

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

    文件输入在 Chrome 或 Firefox 中为同一文件提供不同的 Mimetype 我有一个我想上传的 wav 文件 chrome 说是audio wav和火狐检测audio x wav 我知道这两个 mimetype 非常相似 x 代
  • 如何为十六进制颜色字符串创建独立类型?

    我正在尝试在 TypeScript 中创建一个独立类型 可用于将单个有效的十六进制颜色代码表示为完全类型安全的字符串 我的尝试如下 但由于实际上不是独立类型而未能实现 而这正是我希望实现的目标 type HexDigit

随机推荐

  • 的替代方案

    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