WAV 文件头报告大小不正确

Posted

技术标签:

【中文标题】WAV 文件头报告大小不正确【英文标题】:WAV file headers reporting incorrect size 【发布时间】:2017-06-19 20:00:29 【问题描述】:

解码 WAV 文件时,我可以从标题中读取以下值(格式整齐):

Channels: 2
BitDepth: 16
SampleRate: 44100
FileSize: 907346
FileType: RIFF
AudioFileType: WAVE
data: [...]
PCM: 0

当我将它加载到 OpenAL 缓冲区并尝试播放时,声音不会播放。然而,经过大量调整,当我将 FileSize 硬编码为 907300 时,我能够播放声音。

这让我想到,当我开始加载示例数据时,OpenAL 很可能需要我偏移标题。然而,WAV 文件的标头大小仅为 44 字节。我还假设仅偏移 46 个字节并不是真正的长期解决方案。那么额外的 2 个字节是从哪里来的呢?

更新:

我测试了另一个从 Internet 下载的文件,而不是从 LMMS 保存的文件。即使偏移了 44 或 46 个字节,它也根本不播放。除了FileSize: 1242448

,它的头是相同的

【问题讨论】:

【参考方案1】:

结果 LMMS 决定不按应有的方式保存 .wav 文件头。使用 dhex 快速查看了 .wav 文件,并且标题包含不需要的信息。整个标题如下所示:

RIFFR...WAVEfmt ........D...........LIST&...INFO
ISFT....LMMS (libsndfile-1.0.27)..data..........

我最终用 bfxr 和 Bosca Ceoil 进行了测试,它们的所有声音都在播放,标题看起来很整洁。

希望这些信息对某人有用。

【讨论】:

LMMS 确实正确保存 .wav 文件。问题是它向它们添加了描述部分,这表明该文件是使用 LMMS 或类似的东西创建的。无论您使用什么来解析 .wav 似乎都不适用于该附加部分。解决方案是找到更好的解析器或使用 Audacity 之类的音频编辑器来编辑描述。 关键是除了 LMMS 之外的所有其他东西似乎都可以很好地解析。因此,我将 LMMS 支持添加到解析器的功能积压中。 @HolyBlackCat 你知道如何解析这个 LMMS wav 头吗? 它可能适用于大多数 .wav 文件,因为大多数应用程序不会费心向其中写入任何附加信息。只需根据规范解析 .vaw 就足以处理这些文件。

以上是关于WAV 文件头报告大小不正确的主要内容,如果未能解决你的问题,请参考以下文章

WAV格式文件头解析

wav音频文件头解析

音频处理WAV 文件格式分析 ( 逐个字节解析文件头 | 相关字段的计算公式 )

android音频学习笔记之wav头文件

[概念]PCM文件&WAV文件头

Qt ------ WAV 音频文件介绍