湖南工业大学本科毕业设计(论文)
这就需要要了解WAV文件的格式。
WAV全称是WAVE, WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”。WAVE文件是由若干个Chunk组成的。按照在文件中的出现位置包括:RIFF WAVE Chunk, Format Chunk, Fact Chunk(可选), Data Chunk。具体见下图:
RIFF WAVE Chunk ID = 'RIFF' RiffType = 'WAVE' Format Chunk ID = 'fmt ' Fact Chunk (optional) ID = 'fact' Data Chunk ID = 'data' 图3.1 WAVE格式框图
每个Chunk有各自的ID,位于Chunk最开始位置,作为标示,而且均为4个字节。并且紧跟在ID后面的是Chunk大小(去除ID和Size所占的字节数后剩下的其他字节数目),4个字节表示,低字节表示数值低位,高字节表示数值高位。下面具体介绍各个Chunk内容,在编程中可根据下表建立相应的结构体。
表2.4 RIFF WAVE Chunk结构
项目 ID SIZE TYPE 所占字节数 4字节 4字节 4字节 内容 ‘RIFF’ 根据文件大小而定 ‘WAVE’ 表2.5 Format Chunk结构
项目 ID SIZE Format Tag Channels 所占字节数 4字节 4字节 2字节 2字节 内容 ‘fmt’ 数值为16或18,18则最后又附加信息 编码方式,一般为0x0001 声道数目,1--单声道;2--双声道 16
湖南工业大学本科毕业设计(论文)
Samples PerSec AvgBytesPerSec Block Align BitsPerSample 4字节 4字节 2字节 2字节 2字节 采样频率 每秒所需字节数 数据块对齐单位(每个采样需要的字节数) 每个采样需要的bit数 附加信息(可选,通过Size来判断有无) 表2.6 Fact Chunk结构
项目 ID SIZE Data 所占字节数 4字节 4字节 4字节 内容 ‘fact’ 数值为4 根据软件而定 表2.7 Data Chunk结构
项目 ID SIZE Data 所占字节数 4字节 4字节 根据文件大小而定 内容 ‘data’ 根据文件大小而定 PCM数据 表2.8 PCM数据存放结构
声道 8位单声道 8位立体声 16位单声道 0声道(左) 0声道低字节 样本1 0声道 1声道(右) 0声道高字节 0声道(左) 0声道低字节 样本2 0声道 1声道(右) 0声道高字节 16位立体声 0声道(左)低字节 0声道(左)高字节 1声道(右)低字节 1声道(右)高字节 根据上表各个Chunk的结构就可取出WAV文件的PCM数据,但是又有一个问题出现了WAV音乐文件一分钟大约10M左右,一般的音乐都有3-4分钟长的甚至上十分钟,如果一次性解码一个文件那就需要很大的运行内存,同时文件越大预解码时间就会越长,这显然不是我们想要的结果,因此在这里我们采用双缓冲区解码方式。
我们设立两个缓冲区,每个缓冲区有不同的状态,分别为解码状态、播放状态、解码完毕状态、播放完毕状态。
刚开始将缓冲区初始化为播放完成状态,开始对WAV文件进行解码,当一个缓冲区放满之后转向下一个缓冲区解码,解码完成后等待播放,同时不断的查询有无播放完毕,如播放完毕则继续解码WAV文件至缓冲区。同时播放时也会查询数据有无解码完毕,如
17
湖南工业大学本科毕业设计(论文)
没有解码完毕则等待解码。
2.3.4 IIS音频驱动函数模块
S3C2440A处理器自带有IIS组件,再加上DMA可以很容易的将音乐数据送入外围器件,流程图如下:
初始化IIS组件和UDA1413TS设置DMA通道设置DMA传输数据格式设置DMA传输频率设置DMA传输步长、源地址与目的地址等待DMA中断无数据有无传送完成?有结束图3.2 音频驱动流程图
2.3.5 TFT显示及触摸屏读取模块
S3C2440A处理器自带TFT控制器和触摸屏控制组件,这极大的方便了TFT驱动程序的编写,我们只需对TFT控制器进行一系列设置即可成功驱动屏。
要成功的驱动TFT显示,对TFT的控制时序的了解是必须的。在这里列出TFT的控制时序。
18
湖南工业大学本科毕业设计(论文)
图3.2 TFT控制时序图
在了解了时序之后就需要根据屏数据手册中的参数来配置S3C2440A处理器中的组件了,在这下面我列出本系统所用屏的参数,有了这些参数后对照处理器的数据手册即可成功驱动TFT显示。
表2.9 TFT时序参数表
19
湖南工业大学本科毕业设计(论文)
对于触摸屏数据的读取是非常容易的,难点是将触摸屏转换的数据和TFT像素一一对应,这里就涉及到了一个校准问题,在这里我们采用三点校准法。
当触摸屏与液晶屏间的角度差很小时,经过推理可以假设触摸屏与液晶显示器各点之间的对应关系为(高液晶显示器的坐标为(XL,YL),触摸屏的坐标为(X,Y)):
XL=AX+BY+C ① YL=DX+EY+F ②
因为要取三个点进行校准,所以存在六个变量即要通过六个方程式求出液晶显示器的坐标。得:
XL1=AX1+BY1+C YL1=DX1+EY1+F XL2=AX2+BY2+C YL2=DX2+EY2+F XL3=AX3+BY3+C YL3=DX3+EY3+F
根据这六个方程式则可求出,A,B,C,D,E,F。将其代入①②式就可求出触摸屏对应TFT液晶屏上的点。
20