c++ - 所有规范均为 "0"时的默认 WAV 描述

标签 c++ audio wav lame lamemp3

我正在学习如何用 C++ 读取 WAV 文件,并根据文件头提取数据。我周围有一些 WAV 文件。通过查看所有文件的标题,我发现它们都遵循 wave 文件的规则。但是,TeamSpeak 产生的文件记录很奇怪,但它们仍然可以在媒体播放器中播放。

所以看WAV文件的标准格式,是这样的:

enter image description here

因此,在所有看起来正常的文件中,我获得了从“AudioFormat”到“BitsPerSample”(来自图片)的所有值的合法值。但是,在 TeamSpeak 文件中,ALL 这些值恰好是

这个,但是前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” block 之前有一个额外的“JUNK” block (附上屏幕截图)。由于某些填充原因,JUNK block 可能存在,但它的所有值都是 0。您需要在代码中查找(可能是 fseek)第一次出现“fmt”字节的 wav 文件,并从那里解析 WAVEFORMATEX 信息。

enter image description here

关于c++ - 所有规范均为 "0"时的默认 WAV 描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39819024/

相关文章:

c++ - 我如何编写一个程序来读取一个整数方阵并确定它是否是幻方?

iphone - 检测每秒音频文件的幅度?

c# - 实现带有声音文件预览的 OpenFileDialog

c - 应用程序崩溃,但我不明白原因

c# - 不支持的sourceStream NAUDIO

c++ - 关于 COM/ActiveX 对象的问题

c++ - 回收释放的对象

c++ - 如何在 C++ 中将数组中的所有数字相加?

javascript - 如何用d3 js解析网页音频数据

python - wave.Error : unknown format: 3 arises when trying to convert a wav file into text in Python