2017-06-19 95 views
1

当解码WAV文件我可以从标题阅读下列值(格式整齐):WAV文件头报告不正确的大小

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

当我加载到OpenAL的这个缓冲区,并尝试玩它回来了,声音不起作用。然而,经过大量调整后,当我将FileSize硬编码为907300时,我能够播放声音。

这让我觉得OpenAL很可能需要我在开始加载示例数据时抵消标题。但是WAV文件的标题大小只有44个字节。我还假设仅仅抵消46个字节并不是真正的长期解决方案。那么额外的2个字节来自哪里呢?

更新:

我测试,我在网上下载,而不是从LMMS保存的其他文件。它甚至在抵消了44或46字节后根本不能播放。它的头部是相同的,除了FileSize: 1242448

回答

2

它使LMMS决定它不想以它们应该的方式保存.wav文件头。用dhex快速浏览.wav文件,并且标题包含不需要的信息。整个头看起来是这样的:

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

我最终与bfxr测试,博斯卡Ceoil和他们所有的声音都打和头好看整洁。

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

+0

LMMS *会*正确保存.wav文件。问题在于它向他们添加了描述部分,其中说文件是用LMMS或类似的东西创建的。无论你用什么来分析.wav,似乎都不会起作用。解决方法是找到一个更好的解析器或使用Audacity之类的音频编辑器来编辑描述。 – HolyBlackCat

+0

关键是除了LMMS之外的其他所有东西似乎都很好解析。所以我将LMMS支持添加到解析器的功能积压中。 @HolyBlackCat任何你知道如何解析这个LMMS wav头文件的机会? –

+0

它可能适用于大多数.wav文件,因为大多数应用程序不费心写入任何其他信息。根据规范解析.vaw应该足以处理这些文件。 – HolyBlackCat