搜索
bottom↓
回复: 38

没有不可能 压榨STM32 超频实现软解APE

[复制链接]

出0入0汤圆

发表于 2011-4-24 22:16:06 | 显示全部楼层 |阅读模式
继上次在STM32上实现level0-level8全级别flac播放后,
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4531723&bbs_page_no=1&search_mode=1&search_text=flac&bbs_id=9999
觉得生活淡然无味.何必再来个APE呢?
折腾了一个下午最后发现STM32运算能力不够(即使不用CRC)....出于水平不能实现源码级修改,无奈就打STM32主意了,小超下
修改system_stm32f10x.c第995行本来的RCC_CFGR_PLLMULL9为RCC_CFGR_PLLMULL11
这样一来,对于fast压缩级别的APE是没问题了,但是对于Normal压缩级别(最常见)的APE却无能为力了,再超!
修改RCC_CFGR_PLLMULL11为RCC_CFGR_PLLMULL14 总算流畅了,可惜不到一分钟就fault了.当然这跟STM32体质有关系,可能你的RCC_CFGR_PLLMULL14可以呢

至于解码流程就不多说了,跟解flac差不多.下面工程为RCC_CFGR_PLLMULL11,对于fast压缩级别的APE应该是没问题的,如果你遇到断流,请用foobar2000转换
成fast压缩级别,如图:

(原文件名:2000.jpg)
当然你也可以修改为RCC_CFGR_PLLMULL14,如果可能的话.

忘记说了,硬件基于STM32 Radio的^_^
资源占用情况:
Program Size: Code=73644 RO-data=6760 RW-data=544 ZI-data=59672  
下面是工程:
点击此处下载 ourdev_633300P0S47W.rar(文件大小:2.47M) (原文件名:ape.rar)

用法,见图:

(原文件名:print.jpg)
注意:
1.MDK优化级别为 level 3
2.单声道没有处理
3.程序Bug多,连最基本的判断都没有,还有超频害处多,权当儿戏!
4.CODE为Master

出0入0汤圆

发表于 2011-4-24 23:02:14 | 显示全部楼层
先mark下

出0入0汤圆

发表于 2011-4-24 23:35:10 | 显示全部楼层
我赛,平常就听APE的,这个可牛了

出0入0汤圆

发表于 2011-4-25 09:28:03 | 显示全部楼层
改STM32F207应该就好了

出0入0汤圆

发表于 2011-4-25 09:36:34 | 显示全部楼层
回复【3楼】ffxz  
改stm32f207应该就好了
-----------------------------------------------------------------------

我也这样认为,想用207,但是不知道价格几何。

出0入0汤圆

发表于 2011-4-25 09:37:45 | 显示全部楼层
牛,mark下

出0入0汤圆

发表于 2011-4-25 10:00:13 | 显示全部楼层
mark~

出0入0汤圆

发表于 2011-4-25 10:02:38 | 显示全部楼层
回复【4楼】90999  张耀扬
回复【3楼】ffxz  
改stm32f207应该就好了
-----------------------------------------------------------------------
我也这样认为,想用207,但是不知道价格几何。
-----------------------------------------------------------------------

乐观的话,我这周能够拿到STM32F207板子

出0入0汤圆

发表于 2011-4-25 10:22:35 | 显示全部楼层
APE啊,。不懂,看帖。。

出0入0汤圆

发表于 2011-4-25 10:44:31 | 显示全部楼层
回复【楼主位】zzm24
继上次在stm32上实现level0-level8全级别的播放后,
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4531723&bbs_page_no=1&search_mode=1&search_text=flac&bbs_id=9999
觉得生活淡然无味.何必再来个ape呢?
折腾了一个下午最后发现stm32运算能力不够(即使不用crc)....出于水平不能实现源码级修改,无奈就打stm32主意了,小超下
修改system_stm32f10x.c第995行本来的rcc_cfgr_pllmull9为rcc_cfgr_pllmull11
这样一来,对于fast压缩级别的ape是没问题了,但是对于normal压缩级别(最常见)的ape却无能为力了,再超!
修改rcc_cfgr_pllmull11为......
-----------------------------------------------------------------------

厉害~~~搞定FLAC, 接着也把APE也搞定了. 还有, 楼主能否告知移植的APE源码的资料或链接吗?

出0入0汤圆

 楼主| 发表于 2011-4-25 13:45:07 | 显示全部楼层
其实我这次所谓的"移植"什么也没干.那里拼拼,那里凑凑就出来了.因为前人做得太多了.RT-Thread的POSIX使linux下的小程序很容易的移植过来.这里的应用程序部分用的就是RockBox的demac.c.(RockBox里面有很多好东西^_^).不过没有用里面的libdemac,因为涉及到汇编,虽然移植成Thumb2应该不会很难,但是本人比较懒.所以现在急需寻找没有汇编但又相比官网针对ARM作出优化的源码...还别说真找到了,忘记了哪里找到的了,总之上传上来就是了.

这个是Rockbox的codecs文件夹(参考下应该还可以移植更多格式例如ACC、Ogg之类):
点击此处下载 ourdev_633426KKXB7S.rar(文件大小:2.07M) (原文件名:codecs.rar)

这个是上面所说找到的APE Decoded:
点击此处下载 ourdev_633425NDNCX1.rar(文件大小:125K) (原文件名:APEDEC.rar)

有STM32F207的话就爽多了,mp3、falc、ape可以共用buffer,I2S应该没有那么蹩脚吧,低价格的全格式通吃HIFI播放器可能就出来了(痴人说梦话)

出0入0汤圆

发表于 2011-4-25 14:44:28 | 显示全部楼层
回复【10楼】zzm24
其实我这次所谓的"移植"什么也没干.那里拼拼,那里凑凑就出来了.因为前人做得太多了.rt-thread的posix使linux下的小程序很容易的移植过来.这里的应用程序部分用的就是rockbox的demac.c.(rockbox里面有很多好东西^_^).不过没有用里面的libdemac,因为涉及到汇编,虽然移植成thumb2应该不会很难,但是本人比较懒.所以现在急需寻找没有汇编但又相比官网针对arm作出优化的源码...还别说真找到了,忘记了哪里找到的了,总之上传上来就是了.
这个是rockbox的codecs文件夹(参考下应该还可以移植更多格式例如acc、ogg之类):
点击此处下载  (原文件名:codecs.rar)  
这个是上面所说找到的ape decoded:
点击此处下载  <font color=green>(原文件名:......
-----------------------------------------------------------------------

呵呵, 多谢你的资料. 我在google也找到类似源码, 看来跟你提供的差不多. 有空我也试试AVR32解码APE.
http://www.rockbox.org/tracker/task/7256?getfile=14041

出0入0汤圆

发表于 2011-4-25 15:56:57 | 显示全部楼层
回复【10楼】zzm24
其实我这次所谓的"移植"什么也没干.那里拼拼,那里凑凑就出来了.因为前人做得太多了.rt-thread的posix使linux下的小程序很容易的移植过来.这里的应用程序部分用的就是rockbox的demac.c.(rockbox里面有很多好东西^_^).不过没有用里面的libdemac,因为涉及到汇编,虽然移植成thumb2应该不会很难,但是本人比较懒.所以现在急需寻找没有汇编但又相比官网针对arm作出优化的源码...还别说真找到了,忘记了哪里找到的了,总之上传上来就是了.
这个是rockbox的codecs文件夹(参考下应该还可以移植更多格式例如acc、ogg之类):
点击此处下载  (原文件名:codecs.rar)  
这个是上面所说找到的ape decoded:
点击此处下载  <font color=green>(原文件名:......
-----------------------------------------------------------------------

请问Rockbox的codecs是怎么找到的? 我下载了source的rbutil_1.2.8, 文件夹里只有apps\codecs\libspeex, 没有其他解码的源码...

出0入0汤圆

发表于 2011-4-25 16:25:51 | 显示全部楼层
祝贺兄台!率先拿APE用STM32开刀.
不知道你的板子晶体频率是多少.14倍频的话,如果是晶振是12MHz那应该是 168M,这个频率能跑,你的这块ZE已经是极品体质了。
敝人的ZE最多上到152 MHZ(16.9*9),但是这个频率已经是心惊肉跳的频率,真不敢长时间这样用.现在解LV2 FLAC,5倍频80M绰绰有余.
敝人也一直期待着能使用STM32F207,标称就达到0等待的 120Mhz,小超下应该可以稳定在160Mhz,应该解Normal APE不成问题。
用到敝人的播放器里应该就可以支持到全LEVEL的FLAC.可惜虽然能买到STM32F207,碍于其他条件最近已经没有精力花在这上面了。

敝人没研究过APE解码,貌似需要很多浮点运算?

出0入0汤圆

 楼主| 发表于 2011-4-25 16:55:14 | 显示全部楼层
回复【12楼】cheungman  
-----------------------------------------------------------------------
SVN即可 svn://svn.rockbox.org/rockbox/trunk

回复【13楼】sharpufo  风生水起月皎白
-----------------------------------------------------------------------
板子晶体频率是8M,现在11倍频解Fast级可以流畅,14倍解Normal只能支持一会
再说Flac 片内64K实现level8是没有什么希望了
这个APE Decoder到底就是从Rockbox上搬过来的,Rockbox针对嵌入式做了不少优化,下面是其Readme的一段

demac is an implementation in portable ANSI C of a decoder for the
Monkey's Audio lossless compression format.  It has the following
features:

  * Open source (GNU GPL)
  * Written in portable ANSI C
  * Designed for use on low memory and embedded devices.  All internal
    buffers are statically declared - the core library doesn't require
    malloc/free.  This has the disadvantage that the library isn't
    re-entrant.

出0入0汤圆

发表于 2011-4-25 17:15:34 | 显示全部楼层
lz 牛人!

出0入0汤圆

发表于 2011-4-26 21:08:01 | 显示全部楼层
我也这样认为

出0入0汤圆

发表于 2011-4-26 22:01:12 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-26 22:23:43 | 显示全部楼层
ding

出0入0汤圆

发表于 2011-4-27 21:49:57 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2011-5-14 14:05:04 | 显示全部楼层
抽空更新了一下.
把libdemac Latest Version弄了过来,顺手把predictor-arm.S移植过来.效率稍微高了一些.但是现在工程RCC_CFGR_PLLMULL12播normal级还是不太乐观.
感觉已经黔驴技穷了.stm32f103zet不超频实现流畅播normal几乎是不可能的.也不再更新了,等207到手吧.

点击此处下载 ourdev_639754P4YBCZ.rar(文件大小:2.47M) (原文件名:ape_last.rar)

出0入0汤圆

发表于 2011-5-14 14:16:46 | 显示全部楼层
还没有研究APE源码, 先咨询一下, APE解码涉及到的运算怎样, 听gzhuli说大部分都是整数运算, STM32不带DSP指令, 如果带DSP指令的, 会好一点.

出0入0汤圆

 楼主| 发表于 2011-5-14 14:35:14 | 显示全部楼层
回复【21楼】cheungman
-----------------------------------------------------------------------

的确大部分是整数运算,两个经常调用是UDIV32(a, b)和predictor_decode_stereo
对于predictor_decode_stereo  predictor-arm.S已经包含.
对于UDIV32(a, b),cortex-m3本身带硬件除法,移植意义不大.

出0入0汤圆

发表于 2011-5-21 15:49:05 | 显示全部楼层
花了一天时间移植了一下楼主提供的RockBox源码+APEDEC.rar, 初步可以播放fast, blocksize=1152的APE文件, 感谢楼主.

出0入0汤圆

 楼主| 发表于 2011-5-21 17:36:52 | 显示全部楼层
那个predictor-arm.S应该还有优化的空间,我只是把它挪到MDK编译而已.并没有针对cortex-m3指令集作优化...期待cheungman将其完善.

出0入0汤圆

发表于 2011-5-21 17:48:16 | 显示全部楼层
估计使用PIC32可以流畅的播放

出0入0汤圆

发表于 2011-5-21 17:48:34 | 显示全部楼层
估计使用PIC32可以流畅的播放

出0入0汤圆

发表于 2011-5-22 20:59:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-28 21:08:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-14 07:52:58 | 显示全部楼层
Flash 等待周期

出0入0汤圆

发表于 2011-7-23 13:39:58 | 显示全部楼层
这个得关注一下
头像被屏蔽

出0入0汤圆

发表于 2013-1-28 22:33:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2014-10-8 08:13:44 来自手机 | 显示全部楼层
本打算用LPC1788的,这么说无望?

出0入0汤圆

发表于 2014-10-8 08:27:27 | 显示全部楼层
强 学习了  

出0入0汤圆

发表于 2014-10-8 10:46:53 | 显示全部楼层
楼主厉害

出0入0汤圆

发表于 2014-10-11 09:06:33 | 显示全部楼层
不错  有空也可以整整

出0入0汤圆

发表于 2014-10-11 14:58:10 | 显示全部楼层
问一下楼主,如果使用

1)  LPC1788  (NXP  M3   120M)
2)  LPC3131 190M的ARM9
3)  LPC3250 266M ARM9 带浮点处理器
4) 龙芯1C 300M MIPS架构处理器

以上这几种是否能搞定全部APE格式呢

出0入0汤圆

发表于 2014-10-12 10:42:22 | 显示全部楼层
F4的软解APE不知道有没有压力

出0入0汤圆

发表于 2014-11-1 18:59:22 来自手机 | 显示全部楼层
f4无压力
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 06:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表