|
本帖最后由 10xjzheng 于 2015-9-20 21:51 编辑
之前有人说我的一个帖子是炫耀帖,也谈不上炫耀,也就是这里交流的气氛很好,给大家看看,有什么可炫耀的。我能放源码的一定会放,不放可能是公司的限制等原因,但是我有时间的情况下也一定会讲下思路,其实讲下思路有时候也是够了。这个帖子也不会放源码,只是稍微简单讲下思路,有什么问题下面提问就好了。
首先上视频,播放音频,是一段音乐前面的鸟声,旁边的大叔居然以为我养了什么鸟在叫,哈哈。里面还有我上上个帖子跟网友借的逻辑分析仪,非常感谢!
http://v.youku.com/v_show/id_XMTM0MDc0NTY2MA==.html
做这个实验的原因是因为领导叫我搞下mp3实验做下解码测试,由于SD卡模块还没有到,就先做后面PCM->DAC部分,DAC的芯片用的是PCM1770。先写好当然是要好好测试下啦,反正也挺好玩的。
我首先用winhex软件提取WAV文件中的pcm数据,WAV是原始的,未经压缩的音频文件,文件头说明了采样率,左右声道等,后面的全都是PCM数据,所以只要提取出来播放就好了。
歌曲名字:Bandari - 寂静之声 - 班得瑞
然后未经压缩的数据量是很大的,一首歌双声道的要30多M,我的数据全部放在stm32的flash里面,flash才512K,所以算下来也就几s的声音。
我就是定义了一个常量数组,MDK编译器将其放到了Flash。
- const unsigned char SoundData[TOTAL_SOUND_DATA] = {
- 0x00, 0x20, 0x55, 0x02, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
- 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF,
- 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
- 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
- 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00...
复制代码
看到这里有些坛友不知道会不会不寒而栗,难道几百KByte的数据我都是手动加上逗号的,500*1024=50w个啊!!一开始我也是有点醉的!但是WinHex的作者很人性化啊,膜拜,他的复制菜单里面有个选项是可以选复制成C代码的。
然后调PCM1770,通过IIS-DMA传输音频数据,还有一个三线接口进行控制,大家去看手册就知道了。IIS传输给DAC芯片之后,通过功放然后输送到喇叭即可。
下面留下一个问题,我在想可不可以用STM32内部的DAC进行数模转化?应该是可以的,不过精度下降了,因为音频数据大多是16位的,而STM32的DAC只有12位好像,不知道有没有记错。
另外,我的一个跟音频相关的信号(IIS的主时钟,采样频率的256倍)大概是12M,如果接上逻辑分析仪就不会有噪音,不然就会有,然后我用手碰那个管脚也不会有噪音,拿开就会可能是什么原因? |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|