语音信号处理复习:WAV文件格式

本文详细介绍了WAV文件的结构,包括采样率、采样值和声道信息,并提供了如何从WAV文件中精确计算播放长度的方法。通过解析文件头和子区块,特别是'fmt'和'data'区块,可以抽取并解析PCM波形数据。WAV文件基于RIFF格式,其内部由多个Chunk组成,包括RIFFWAVE、Format、Fact(可选)和Data Chunk。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
音频简介
WAV即WAVE,是经典的Windows音频数 据封装格式,由Microsoft开发。
44100HZ 16bit stereo  22050HZ 8bit mono

采样率:声音信号在“模数转换”过程中单 位时间内采样的次数。 :
采样值:每一次采样周期内声音模拟信号的 积分值。
单声道:11.025 KHz 采样值,8 Bit 采样值 (0x00 - 0xFF)。
双声道 :44.1 KHz 采样值,16 Bits 采样值。 高八位表示左声道,低八位表示右声道。

我们就可以根据一个 wav 文件 的大小、采样频率和采样大小 估算出一个 wav 文件的播放长 度。
譬如 “Windows XP 启动.wav” 的文件长度是 424,644 字节, 它是 “22050HZ / 16bit / 立 体声” 格式(这可以从其 “属 性->摘要” 里看到)
但是这还不够精确, 包装标准的 PCM 格式的 WAVE 文件(*.wav)中至少带有 42 个字节的头信息, 在计算播放时间 时应该将其去掉: 所以就有:(424644-42) / (22050162/8) ≈ 4.8140816(秒). 这样 就比较精确了

WAVE文件是以RIFF(Resource Interchange File Format, “资源 交互文件格式”)格式来组织内部 结构的
RIFF文件结构可以看作是树状结构, 其基本构成是称为"块"(Chunk)的单 元,最顶端是一个“RIFF”块, 下面的每个块有“类型块标识(可选)”、 “标志符”、“数据大小”及“数据” 等项所组成

WAVE文件是由若干个Chunk组成的。 按照在文件中的出现位置包括: RIFF WAVE Chunk, Format Chunk, Fact Chunk(可选), Data Chunk。每个chunk 由“标志符”、“数据大小”及“数据” 所组成

每个Chunk有各自的ID, 位于Chunk最开始位置作为标示,而 且均为4个字节。 并且紧跟在ID后面的是Chunk大小(去 除ID和Size所占的字节数后剩下的其他 字节目),4个字节表示
在这里插入图片描述
文件头 RIFF/WAV 文件标识段 声音数据格式说明段
数据体:由 PCM(脉冲编码调制)格式表示的 样本组成。 单声道 WAV 文件中,声道0代表左声道,声道1 代表右声道;多声道 WAV 文件中,左右声道的 样本是交替出现的在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
As an example, here are the opening 72 bytes of a WAVE file with bytes shown as hexadecimal numbers: 52 49 46 46 24 08 00 00 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 02 00 22 56 00 00 88 58 01 00 04 00 10 00 64 61 74 61 00 08 00 00 00 00 00 00 24 17 1e f3 3c 13 3c 14 16 f9 18 f9 34 e7 23 a6 3c f2 24 f2 11 ce 1a 0d …在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上面的WAV文件为例,要抽取出声音的PCM波形 时,先要找到标示为「fmt」的子区块(sub_ chunk), 知道所存的波形是PCM格式,它有两个声道,取样 频率为44,100 Hz,每个取样为16位。 接下去找到标示为「data」的子区块,知道后面 接着的是24,877,696个byte的左右两声道波形数 据。在这里插入图片描述
在这里插入图片描述

### MATLAB 中语音信号处理课程设计示例 #### 一、简介 语音信号处理作为数字信号处理的一个重要领域,在现代科技中有广泛应用。MATLAB 提供了强大的工具箱来支持语音信号的研究与开发工作[^2]。 #### 二、所需工具包安装 为了更好地完成语音信号处理项目,建议先确认已安装 Signal Processing Toolbox 和 Audio System Toolbox 这两个官方提供的附加产品[^1]。 #### 三、基础理论复习 在动手实践之前,应该熟悉一些基本概念和技术方法,比如采样定理、傅里叶变换等基础知识;短时能量、过零率等特征参数提取技术;线性预测编码(LPC),梅尔频率倒谱系数(MFCC)等经典算法。 #### 四、具体案例分享 下面给出一个简单的例子——基于MFCC的人声识别: ```matlab % 加载音频文件并播放 [audioIn,fs]=audioread('example.wav'); sound(audioIn, fs); % 计算 MFCC 特征向量 winLength = round(0.025*fs); % 设置窗口长度为25ms hopLength = round(winLength/2); mfccFeatures=mfcc(audioIn,fs,'Window',hamming(winLength),'OverlapLength',hopLength-1); % 可视化显示前几帧的结果 figure; plot(mfccFeatures(:,1:8)); title('First Eight Frames of MFCC Coefficients'); xlabel('Coefficient Index'); ylabel('Value'); % 使用 k-means 对说话者聚类 (简化版) numSpeakers=3; % 假设有三个不同说话者的样本数据集 [idx,Centers] = kmeans(mfccFeatures,numSpeakers,'Distance','cityblock',... 'Replicates',3,... 'Options',statset('UseParallel',true)); disp(['The audio belongs to speaker ', num2str(idx(end))]); ``` 此段代码实现了从读取声音片段到计算其对应的 Mel 频率倒谱系数量化的全过程,并尝试通过 K-Means 方法区分不同的讲话个体。当然实际应用场景下还需要考虑更多因素,如噪声抑制、端点检测等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

位沁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值