wav pcm format初探

本文深入探讨了WAV文件格式,包括RIFF Chunk、fmt和data sub-chunks的结构。此外,讨论了8bit与16bit样值在二进制编码中的区别,并列举了WAV支持的音频压缩方法。还提到了使用MATLAB进行WAV文件采样率转换的方法。

一. WAV文件格式

WAV是一种文件格式,符合RIFF (Resource Interchange File Format) 规范。所有的WAV都有一个文件头,这个文件头包含了音频流的编码参数。
WAV格式大小 = 44.1KHz(采样率) X 16bit(采样精度) X(声道数) X 播放时间
这里写图片描述

1. RIFF Chunk
Offset Size Name Description
0 4 ChunkID RIFF标识符 包含ASCII格式的字母“RIFF”
4 4 ChunkSize 36 + SubChunk2Size,这是整个文件的大小,以字节为单位减去8个字节,不包括ChunkID和ChunkSize
8 4 Format WAVE标识符

一个WAVE文件包含两个subchunks,fmt和data

2. fmt sub-chunk
Offset Size Name Description
12 4 Subchunk1ID fmt标识符
16 4 Subchunk1Size
### FunASR 对 WAVPCM 音频的支持原因 FunASR 主要支持 WAV 格式的音频文件以及原始 PCM 数据的原因在于这两种格式具备简单性和高效性,适合用于语音识别任务。 #### 1. WAV 文件的特点 WAV 是一种无损存储音频的标准容器格式,广泛应用于 Windows 平台。其结构清晰明了,头部包含了详细的元数据描述,如采样率、位深等重要参数[^3]。这些特性使得解析和处理变得相对容易: - **易于解析**:由于 WAV 文件头包含完整的音频配置信息,读取器可以快速获取必要的解码细节。 - **兼容性强**:几乎所有主流操作系统都内置了对 WAV 的良好支持,这有助于提高跨平台应用的一致性和稳定性。 ```cpp // 解析WAV文件头的例子 struct WaveHeader { char riff[4]; // "RIFF" uint32_t fileSize; // 文件大小减去8字节 char wave[4]; // "WAVE" char fmtChunkMarker[4]; uint32_t fmtSize; uint16_t audioFormat; ... }; ``` #### 2. PCM 编码的优势 PCM(脉冲编码调制)是最基本的声音数字化方式之一,它直接表示声音波形样本值而不做任何压缩或变换。因此,在进行语音识别时,使用未经过额外编码的 PCM 数据能够提供最真实的音质还原,减少因编解码带来的误差[^1]。 - **高保真度**:未经压缩的数据保留了更多的细节,有利于提升识别精度。 - **低延迟**:不需要复杂的解码过程即可立即访问实际音频流,这对于实时应用场景尤为重要。 ```c++ // 获取PCM缓冲区中的单声道16bit线性样本 short* GetPcmBuffer(const unsigned char* data, size_t length) { short* samples = new short[length / sizeof(short)]; memcpy(samples, data, length); return samples; } ``` 综上所述,选择 WAV 及其内部承载的 PCM 数据作为输入源,不仅简化了开发流程,还确保了高质量的语音信号供给给后续的 ASR 处理模块。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值