|
|
@ -30,8 +30,31 @@ |
|
|
|
|
|
|
|
namespace iflytop { |
|
|
|
namespace core { |
|
|
|
/**
|
|
|
|
* @brief WAV 文件头部信息结构体 |
|
|
|
* |
|
|
|
* 该类包含了 WAV 文件的头部信息,即在 WAV 文件中固定的 44 字节的信息。 |
|
|
|
*/ |
|
|
|
class WAVHeader { |
|
|
|
public: |
|
|
|
/**
|
|
|
|
* @brief WAV 文件头部信息的二进制格式 |
|
|
|
* |
|
|
|
* WAV 文件头部信息包含了如下字段: |
|
|
|
* - 固定为 "RIFF" 的 4 字节 chunk_id |
|
|
|
* - 文件总大小 - 8 的 4 字节 chunk_size |
|
|
|
* - 固定为 "WAVE" 的 4 字节 format |
|
|
|
* - 固定为 "fmt " 的 4 字节 subchunk1_id |
|
|
|
* - 固定为 16 的 4 字节 subchunk1_size |
|
|
|
* - 编码格式,1 表示 PCM 编码的 2 字节 audio_format |
|
|
|
* - 声道数,1 为单声道,2 为立体声的 2 字节 num_channels |
|
|
|
* - 采样率,如 44100 的 4 字节 sample_rate |
|
|
|
* - 数据传输速率,即采样率 * 声道数 * 位数 / 8 的 4 字节 byte_rate |
|
|
|
* - 数据块对齐,即每个采样点占用的字节数,如 2 表示 16 位,即 2 字节的 2 字节 block_align |
|
|
|
* - 位数,如 8、16、24、32 的 2 字节 bits_per_sample |
|
|
|
* - 固定为 "data" 的 4 字节 subchunk2_id |
|
|
|
* - 数据长度,即文件总大小 - 44 的 4 字节 subchunk2_size |
|
|
|
*/ |
|
|
|
struct WAVHeaderBinary { |
|
|
|
char chunk_id[4]; // 固定为 "RIFF"
|
|
|
|
uint32_t chunk_size; // 文件总大小 - 8
|
|
|
|