【问题标题】:WAV file headers reporting incorrect sizeWAV 文件头报告大小不正确
【发布时间】: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

,它的头是相同的

【问题讨论】:

    标签: audio wav openal


    【解决方案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 就足以处理这些文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    相关资源
    最近更新 更多