|
楼主 |
发表于 2014-1-20 00:22:20
|
显示全部楼层
本帖最后由 majianjia1991 于 2014-1-20 00:25 编辑
不好意思,这几天忙于各自事情
刚刚有空测了一下,做了个STM32F407在168M下对WAV文件进行播放的能力。
部分截图
32k 16bit
44k_16bit
44k 24bit
44k_32bit
96k_16bit
96k_24bit
96k 32bit
192k_16bit
192k 24bit
192k 32bit
这是总汇,空的是没有测试文件。
测试所用的文件是一张MJ的Thriller 192k 24bit的镜像用千千静听转的,这里不说音质。
CPU测试是1秒内的平均值,所以对于96k以下的文件来说,误差会比较大,因为我的文件缓存开得比较大,有16k,比如对于44k 16bit的文件来说,只需要读取11次即可播放1秒的时间。
我是使用SPI总线驱动SD卡的,最高读取速度在3.8Mbyte/s,8k缓存下,在3.0Mbyte/s,对于192k 32bit的文件1536kbyte/s的数据流,还是足够的,但实际中跟卡的关系很大,因为卡的寻道延迟实际会非常拖慢这个读取速度,我这测试的4张TF卡,有一张是不能流畅播放的。
可以看到,STM32F407可以轻松地应对192k下各种分辨率的WAV文件。如果能使用F429之类带SAI接口的单片机,就可以不需要原始的I2S模块,解放SDIO口,这么样子就可以兼容更多的卡。
至于为啥48k码率下占用CPU比44k下小。。我也不知道为啥。
另外,16bit的数据占用的CPU都是非常少的,是因为文件读取出来的数据流直接可以传入I2S接口,整个操作都是由DMA完成。至于这里192k下cpu占用变高,是因为寻道的次数加大了,RTT的SPI设备下寻道是需要等待SD卡的返回的,这个似乎没有办法。
而24bit,32bit,因为大小端问题,需要将高低位换位,这里需要去细心优化,优化完成后,基本就是我的测试结果那样。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|