所有规格为“0”时的默认 WAV 描述
Default WAV description when all specs are "0"
我正在学习如何用C++读取WAV文件,并根据header提取数据。我周围有一些 WAV 文件。通过查看所有这些文件的 header,我发现它们都遵循 wave 文件的规则。然而,TeamSpeak 制作的文件录音很奇怪,但它们仍然可以在媒体播放器中播放。
所以看WAV文件的标准格式,是这样的:
所以在所有看起来正常的文件中,我得到了从 "AudioFormat" 到 "BitsPerSample"(来自图片)的所有值的合法值。但是,在 TeamSpeak 文件中,ALL 这些值恰好是 zero。
这个,但前3个值不为零。所以在第一个和第三个字符串中有 "RIFF" 和 "WAVE",并且 ChunkSize 似乎是合法的。
所以我的问题是: 播放器如何知道这样的文件并识别出该文件是单声道还是立体声?采样率?有什么事吗?当所有这些值都为零时,是否有一些标准可以假设?
更新
我用 MediaInfo 检查了文件并得到了这个:
General
Complete name : ts3_recording_16_10_02_17_53_54.wav
Format : Wave
File size : 2.45 MiB
Duration : 13 s 380 ms
Overall bit rate mode : Constant
Overall bit rate : 1 536 kb/s
Audio
Format : PCM
Format settings, Endianness : Little
Format settings, Sign : Signed
Codec ID : 1
Duration : 13 s 380 ms
Bit rate mode : Constant
Bit rate : 1 536 kb/s
Channel(s) : 2 channels
Sampling rate : 48.0 kHz
Bit depth : 16 bits
Stream size : 2.45 MiB (100%)
仍然不明白它是如何得出这些结论的。
在使用带有 WAV 二进制模板的十六进制编辑器检查您的文件后,很明显在 "fmt" 块之前还有一个额外的 "JUNK" 块(附有屏幕截图)。由于某些填充原因,JUNK 块可能存在,但它的所有值都是 0。您需要在代码中查找(可能是 fseek)第一次出现 "fmt" 字节的 wav 文件,并从那里解析 WAVEFORMATEX 信息。
我正在学习如何用C++读取WAV文件,并根据header提取数据。我周围有一些 WAV 文件。通过查看所有这些文件的 header,我发现它们都遵循 wave 文件的规则。然而,TeamSpeak 制作的文件录音很奇怪,但它们仍然可以在媒体播放器中播放。
所以看WAV文件的标准格式,是这样的:
所以在所有看起来正常的文件中,我得到了从 "AudioFormat" 到 "BitsPerSample"(来自图片)的所有值的合法值。但是,在 TeamSpeak 文件中,ALL 这些值恰好是 zero。
这个,但前3个值不为零。所以在第一个和第三个字符串中有 "RIFF" 和 "WAVE",并且 ChunkSize 似乎是合法的。
所以我的问题是: 播放器如何知道这样的文件并识别出该文件是单声道还是立体声?采样率?有什么事吗?当所有这些值都为零时,是否有一些标准可以假设?
更新 我用 MediaInfo 检查了文件并得到了这个:
General
Complete name : ts3_recording_16_10_02_17_53_54.wav
Format : Wave
File size : 2.45 MiB
Duration : 13 s 380 ms
Overall bit rate mode : Constant
Overall bit rate : 1 536 kb/s
Audio
Format : PCM
Format settings, Endianness : Little
Format settings, Sign : Signed
Codec ID : 1
Duration : 13 s 380 ms
Bit rate mode : Constant
Bit rate : 1 536 kb/s
Channel(s) : 2 channels
Sampling rate : 48.0 kHz
Bit depth : 16 bits
Stream size : 2.45 MiB (100%)
仍然不明白它是如何得出这些结论的。
在使用带有 WAV 二进制模板的十六进制编辑器检查您的文件后,很明显在 "fmt" 块之前还有一个额外的 "JUNK" 块(附有屏幕截图)。由于某些填充原因,JUNK 块可能存在,但它的所有值都是 0。您需要在代码中查找(可能是 fseek)第一次出现 "fmt" 字节的 wav 文件,并从那里解析 WAVEFORMATEX 信息。