一、WAV格式简介 WaveformAudio File Format(WAVE,又因为WAV后缀而被大众所知),它采用RIFF(ResourceInterchange File Format)文件格式结构,文件是由一个一个的chunk组成的,并且chunk之间可以嵌套。通常用来保存PCM格式的原始音频数据,所以通常被称为无损音频。其文件扩展名为WAV,是Wave Form的简写,也称为波形文件,可直接存储声音波形。
二、WAV格式结构 1.wav结构图 WAV文件以chunk为最小存储单位。一般由三个区块组成: RIFFchunk Formatchunk Datachunk 此外,部分文件中还包含一些可选的区块,如Factchunk、Cuepoints chunk、Playlistchunk、Associateddata list chunk等。
2.wav文件格式表 字段 | 长度(bytes) | 端序 | 字段描述 |
chunk1
| 标识符 Chunk ID
| 4 | 大 |
第一个chunk的标识始终是"RIFF",表明该文件为有效的 RIFF 格式文档。
|
数据长度
Chunk Size
| 4 | 小 |
该chunk的数据大小,包括chunkType。从下一个字段首地址开始到文件末尾的总字节数。该字段的数值加 8 为当前文件的实际长度。
|
格式类型
Chunk Type
| 4 | 大 |
对于Wave文件chunk的类型为"WAVE"。
|
data
|
Chunk2
|
格式块标识
Chunk ID
| 4 | 大 |
Wave文件的第二个chunk标识为"fmt"。
|
格式块长度
Chunk Size
| 4 | 小 |
该chunk的数据大小,其数值取决于编码格式,可以是 16、 18 、20、40 等。也有超过 40 字节的情况,如果不知道后面部分的含义,直接跳过即可,超过 16 字节部分为扩展块。
|
data
|
编码格式代码
Format Tag
| 2 | 小 | 音频数据格式,0x0001表示PCM数据。常见的 WAV 文件使用 PCM 脉冲编码调制格式,该数值通常为 1。
|
声道个数
Channels
| 2 | 小 |
声道数,单声道为 1,立体声或双声道为 2。
|
采样频率
Samples Per Sec
| 4 | 小 | 采样率,每秒采样次数。每个声道单位时间采样次数。常用的采样频率有8/11.025/12/16/22.05/24/32/44.1/48/64/88.2/96/176.4/192 kHZ
|
数据传输速率
Avg Bytes Per Sec
| 4 | 小 |
传输速率,每秒的字节数,每秒的音频数据大小。
公式:传输速率=声道数*采样率*每个采样点的比特数/8
|
数据块对齐单位
Block Align
| 2 | 小 |
每个时刻的音频数据块大小,告知播放软件一次性需处理多少字节。公式:数据块=声道数*每个采样点的比特数/8
|
采样位数
Bits Per Sample
| 2 | 小 |
存储每个采样值所用的二进制数位数。常见的位数有 4、8、12、16、24、32。值越大,对声音的还原度越高。
|
Chunk3
|
格式块标识
Chunk ID
| 4 | 大 |
Wave文件的第三个chunk的标识为"data"。
|
格式块长度
Chunk Size
| 4 | 小 |
该chunk的数据大小。
|
data
|
PCM数据
data
| Chunk Size | 小 |
PCM数据。
|
从上表可以看出:
(1) Wave文件最外层是一个标识为“RIFF”的类型块chunk1; (2) 在chunk1的data部分嵌套了2个chunk,即chunk2和chunk3; (3) chunk2的标识为“fmt”,在它的data部分存储音频的一些相关属性; (4) chunk3的标识为“data”,在它的data部分存储具体的音频PCM数据。
3.wav数据图 To wav软件转换的单声道wav文件,用Ultra Edit打开。 为方便描述,Wav字段以1-14编号说明,对应wav格式表“字段描述”的14个属性。 (1)0x52 49 46 46:4字节,ASCII字符“RIFF”,这部分是固定格式,表明这是一个WAVE文件头。 (2)0xE8 B9 00 00:4字节,小端存储,转为大端字节序0x00 00 B9 E8,十进制为:47592。 表示chunk1的数据大小为47592字节,指“红框2”后面的字节数据总数,起始不包括“红框2”,该字段的数据值加 8 为当前文件的实际长度,这个8也就是“1和2”的8字节。47592+8=47600,右键查看文件属性,和文件大小一致。 (3)0x57 41 56 45:4字节,ASCII字符“WAVE”,固定格式。 (4)0x66 6D 74 20:4字节,ASCII字符“fmt”, “fmt”不够4个字符,所以右边补空格,标识符。 (5)0x10 00 00 00:4字节,小端存储,转为大端字节序0x00 00 00 10,十进制为:16。 表示chunk2的数据大小为16字节,即偏移量从14H~23H,由wav格式表可知,Format Tag、Channels、Samples Per Sec、Avg Bytes Per Sec、Block Align、Bits Per Sample总共16字节(chunk2 date的那6个属性,6/7/8/9/10/11标号内容)。 (6)0x01 00:2字节,小端存储,转为大端字节序0x00 01,十进制为:1,表示该数据以PCM方式进行编码。
常见音频编码格式:
格式编码 | 格式名称 | fmt 块长度 | fact 块 | 0x01 | PCM /非压缩格式 | 16 | | 0x02 | Microsoft ADPCM | 18 | √ | 0x03 | IEEE float | 18 | √ | 0x06 | ITU G.711 a-law | 18 | √ | 0x07 | ITU G.711 μ-law | 18 | √ | 0x031 | GSM 6.10 | 20 | √ | 0x040 | ITU G.721 ADPCM | | √ | 0xFFFE | 见子格式块中的编码格式 | 40 | |
(7)0x01 00: 1字节,小端存储,转为大端字节序0x00 01,十进制为:1,表示该文件是单声道文件。单声道为 1,立体声或双声道为 2。 (8)0x00 7D 00 00:4字节,小端存储,转为大端字节序0x00 00 7D 00,十进制为:3200,表示采样频率为32000Hz,采样率(每秒样本数),表示每个通道的播放速度。 (9)0x00 FA00 00:4字节,小端存储,转为大端字节序0x00 00 FA 00,十进制为:64000,表示波形音频数据传输速率64000。 公式:声道数*采样率*每个采样点的比特数/8=传输速率
1*32000*16/8=64000
(10)0x02 00:2字节,小端存储,转为大端字节序0x00 02,十进制为:2,表示块对齐单位,说明该播放软件一次需要处理多个2字节大小的数据。 公式:声道数*每个采样点的比特数/8=数据块 1*16/8=2 (11)0x10 00:2字节,小端存储,转为大端字节序0x00 10,十进制为:16,存储每个采样值所用的二进制数位数。常见的位数有 4、8、12、16、24、32。值越大,对声音的还原度越高。 (12)0x64 61 74 61:4字节,ASCII字符“data”,标识符。 (13)0xC4 B9 00 00:4字节,小端存储,转为大端字节序0x00 00 B9 C4,十进制为:47556,音频数据部分47556字节,44+47556=47600,和文件大小一致。 (14)音频PCM数据
PCM数据存储格式。
三、DGUS屏
1.wav转换
立体声wav文件转换为单声道wav文件。
如例程的立体声wav文件格式:
采样率:44100Hz
声 道:立体声
位深度:16位
格 式:波形音频16位整数。
转换后的单声道wav文件格式:
采样率:32000Hz
声 道:单声道
位深度:16位
格 式:波形音频16位整数。
单声道为左声道或者右声道语音,满足上述格式要求的文件均可使用。
2.复制wav音频数据到22文件初始化
设定DGUS屏VP变量起始地址为0x8000,工程DWIN_SET文件夹复制一个空的22文件,将wav数据复制到22文件0x10000起始地址。DGUS屏为MSB模式,wav和wae文件为LSB模式,复制数据时,数据部分第一个字节不复制,使数据高低字节整体错开。
3.将22文件下载到DGUS屏
在线或SD卡下载。
4.指令播放
0xF0 | | | | D7:写入0x5A 启动一次音乐播放处理,CPU 操作完清零。 D6:播放模式,0x00=停止(清空缓冲区),0x01=暂停(不清空缓冲区),0x02=播放。 D5:D4:未定义,写0x00。 D3:D2:保存音乐数据的变量存储器地址,偶数。 D1:D0:需要播放的音乐数据字长度,最大8KWords,偶数;数据为16bit 整数格式。 |
每次发送8KWords数据,8KWords是8*1024,即变量地址间隔0x2000。1千字节(KB)=1024字节(B)。 5AA5 0B 82 00F0 5A02 0000 8000 2000 5AA5 0B 82 00F0 5A02 0000 A000 2000 5AA5 0B 82 00F0 5A02 0000 C000 2000
5AA5 0B 82 00F0 5A02 0000 8000 2000
含义:0x5AA5:帧头;
0x0B:数据长度,0x82开始,不含0x0B字节;
0x82:写指令;
0x00F0:音乐流接口地址;
0x5A02:写入0x5A 启动一次音乐播放处理,CPU 操作完清零。0x02=播放。
0x0000:未定义,写0x00。
0x8000:保存音乐数据的变量存储器地址,偶数。 0x2000:需要播放的音乐数据字长度,最大8KWords,偶数;音频数据为16bit 整数格式。
5.注意事项
(1)有效语音数据与全部语音数据
0x2000,10进制为8192,47556/8192≈5.81,即6条指令写完全部数据。播放时,前2条指令16Kwords数据即可播放完有效音频,后面部分为噪音和无效数据,与语音发音和结束时间有关。
(2)播放是沙沙噪声
DGUS是MSB模式,wav、wae是LSB模式,音频数据第一个字节去掉,数据高低字节整体错开。
(3)22文件放到桌面编辑,在DWIN_SET下编辑,软件生成新文件会覆盖掉。在线下载默认工程DWIN_SET路径,选择编辑后的22文件。
(4)Towav工具转换的wav、wae文件数据都可以播放,其他软件转换的左声道、右声道文件也支持,注意输出32000Hz采样率,不是44100Hz。
6.DEMO说明 DEMO480*480分辨率。 大于480*480分辨率可直接下载调试,小于480*480分辨率只会显示屏分辨率大小,超出部分不显示。 附件包含:Towav单声道转换工具,单声道、立体声语音文件。
7.bilibili教学视频
友情链接:
触控按键语音、音乐播放:
http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=4898
|