本帖最后由 jinglixixi 于 2021-6-3 10:26 编辑
WM8960是一个低功耗、高质量的立体声多媒体数字信号编译码器,它结合了一个高质量的立体声音频DAC和ADC,带有灵活的音频线输入、麦克风输入及音频输出处理。其主要应用于便携式产品,如便携式数码摄像机或数码相机等设备。在超越者FPGA的开发板上,它使用的WM8960不但可以完成前面介绍过的音频编解码处理,还能实现其它的用途。 1.语音录放 用板载的WM8960能实现语音的录放功能,其结构框图和线路原理图分别如图1和图2所示。
图1 语音录放结构图
图2 语音录放原理图
其工作原理的主要内容为: 若按下录音键,便调用录音功能,即由板载的麦克风来拾取声音,并将其转换为电信号供WM8960内部的ADC转换为数字信号,再经编码处理转存到DDR3中。 在完成语音录制的情况下,若按下播放键,则由DDR3中读取数据,再经解码处理转变为可供DAC转换的数据。继而DAC又将这些数据转换成电信号来供耳机或扬声器来发出声音。 为实现语音录放功能,相应的FPGA引脚配置如图3所示。
图3 引脚配置
经编译处理,即可按图4所示将程序下载到开发板。
图4 完成下载
在完成程序下载后,其具体的操作方法为: 按下key2录音键,直到录音结束才松手录音键,即可通过板载的麦克风来拾取声音。需要注意的是,受DDR3容量的影响,录制的时间不宜过长。在完成录制后,按下key1播放键,即可播放出录制的内容。在播放时,无需常按播放键,只需短按一下启动即可。 若将其语音录制功能用于留言机的类似处理上,还是比较有参考价值的。若能把DDR3中的数据转存到SD卡中,那会更具实用价值,其录制语音的时长会达到延伸,录制的语音段个数也可以更多。 测试视频:(MP4格式)
2.音乐文件的播放 除了语音的录放功能,利用WM8960的编解码功能,还可以将SD卡中的音乐文件读取出来进行音乐的播放。 由于WM8960是带有扬声器驱动的立体声多媒体数字信号编译码器,故能结合FPGA来播放音乐器。 其程序设计目标是对非压缩的WAV格式音乐文件进行播放,由于一般的WAV格式其音乐采样率为44.1kHz,而WM8960所支持的采样率没有44.1kHz,故存放在SD卡里的音乐是采样率转换为WM8960所支持的48kHz,其量化位数为16位。 WM8960结合SD卡实现音乐播放功能的结构框图和引脚配置分别如图5和图6所示。
图5 音乐播放的结构图
图6 引脚配置
为了播放SD卡中的指定音乐文件,需在程序中填写相应的参数,如START_ADDR和AUDIO_SEC。 其中,START_ADDR所代表的是SD卡内储存音乐文件的起始位置,而AUDIO_SEC所代表的则是整个音乐文件所占用的总扇区数。 同前面介绍的读取SD卡显示BMP位图文件一样,要获得上面这2个参数也需要借助工具软件WinHex 。 以音乐 “风起天澜”为例,它的起始扇区位置是38096,所以对应的START_ADDR的值就是38096,见图7所示。
图7 获取起始扇区
那AUDIO_SEC该怎样获得呢?
该文件的大小是62988846个字节,而SD卡的一个扇区其存储量为512个字节,故该文件要占用的总扇区数是62988846/512≈123026(注:这里只能进不能舍),这样能得到AUDIO_SEC了。
图8 查看文件字节数
若要播放“最美的期待”,其参数设置如下:
parameter START_ADDR = 18'd161128 ; // 音乐存放的起始地址 parameter AUDIO_SEC = 17'd79 076; // 音乐占用的扇区数 经编译,其结果如图9所示。 在下载前,应把SD卡预先插入板上的卡槽内,并连接好下载器。完成下载后,就能听到板上喇叭所播放的音乐。 指定期待的是,若内自主的读取SD卡上的参数并实现多首音乐选择或顺序性播放就更完美了! 图9 完成编译
测试视频:(MP4格式)
|