搜索
bottom↓
回复: 180

终于搞好 FLAC 无损格式播放,使用STM32 F103ZE软解码,文件系统FATFS,TFT FSMC,DAC T

  [复制链接]

出0入0汤圆

发表于 2010-12-30 21:54:41 | 显示全部楼层 |阅读模式
初步搞定了,嘿嘿,听起来和WAV没差啊。

硬件:
CPU:STM32F103ZE @ 72 MHZ
存储器:SD卡
DAC: TDA1543 (通过STM的I2S接口直接连接).
显示器:TFT OTM3225 通过FSMC总线驱动.
方向盘:按键
歌唱者:用了好久的轻骑兵2.0电脑音箱。

软件:
文件系统:FATFS
FLAC解码器:参考TRAXMOD

好处:跟WAV比同样的空间能多放45%左右的歌曲,快哉!

限制:由于 STM32F103ZE只有64K RAM,所以只能播放用foobar转换设置 LV2 及以下的FLAC,说得更深入点就是只能放 [max_blocksize <=1152 ]的 FLAC文件。不过LV2的FLAC也能压到67%左右.跟默认设置的 LV5其实差不了两三兆。

不足:只是初步试验成功,文件系统还有点问题,还没有进行省电优化,界面还没有美化和完善。雏形。

YY:等 STM32F200 普及了,有128K RAM就能支持更高 LEVEL 的 FLAC了.

至于mp3,感觉像鸡肋,有空再搞.
手头上没有好相机,图片的质量见谅啊,呵呵。


(原文件名:IMAGE_063.jpg)


(原文件名:IMAGE_075.jpg)


(原文件名:IMAG0010.JPG)


(原文件名:IMAG0012.JPG)

另外这个是之前做的WAV播放器

这个 MCU是 STM32F103RBT6,RAM只有20K,不能解码FLAC只能播放WAV,但是文件系统很稳定,兼容性非常不错,支持SDHC,现在DAC换成 PCM1793.音质相当不错。LCD 是是160*128的,忘了是什么控制芯片了.
支持一级子目录,文件按长文件名排序,选择目录.选择文件界面。
播放模式可以目录重复,整卡重复,单曲重复,整卡无重复乱序播放。
因为那个开发板上只有3个按键,所以按键功能是:
KEY1:短按,下一曲,长按下一目录.
KEY2:短按,上一曲,长按进入目录选择.
KEY3:短按进入文件选择,长按快进10秒钟.
KEY1和KE2同时按改变重复模式.

<center>
<center>

<center>
<center>

<center>
<center>

<center>
<center>

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2010-12-30 22:00:21 | 显示全部楼层
回复【楼主位】sharpufo 风生水起月皎白
-----------------------------------------------------------------------

高手

出0入0汤圆

发表于 2010-12-30 22:03:48 | 显示全部楼层
不错,支持

出0入0汤圆

发表于 2010-12-30 23:26:57 | 显示全部楼层
厉害厉害,会不会出套件啊?

出0入0汤圆

发表于 2010-12-30 23:38:14 | 显示全部楼层
flac,真厉害

出0入0汤圆

发表于 2010-12-31 02:06:06 | 显示全部楼层
楼主高手啊,搞定了FLAC软解~
能否优化flac解码算法,减少内存空间占用?

出0入0汤圆

发表于 2010-12-31 02:14:30 | 显示全部楼层
不知道像VS1053b这样的DSP芯片是怎样实现flac解码的?VS1053b加载软件插件可以实现flac解码,经测试能流畅播放绝大部分flac文件。它里面好像也没有多少RAM的,加起来不到64K...


VS1053b Memory Map

出0入0汤圆

发表于 2010-12-31 08:34:10 | 显示全部楼层
有代码 就好 了/。。

出0入0汤圆

发表于 2010-12-31 08:39:30 | 显示全部楼层
软解啊,厉害

出0入0汤圆

发表于 2010-12-31 08:42:19 | 显示全部楼层
楼主是高人。听说轻骑兵倒闭了!

出0入0汤圆

发表于 2010-12-31 08:56:12 | 显示全部楼层
楼主要是贴上代码就更加完美、众乐乐了

出0入0汤圆

发表于 2010-12-31 09:17:21 | 显示全部楼层
楼主出套件,我来个!!!

出0入0汤圆

发表于 2010-12-31 09:45:58 | 显示全部楼层
mark~~

出0入0汤圆

 楼主| 发表于 2010-12-31 12:24:32 | 显示全部楼层
各位不要急,代码还需修改,稍后放出。

出0入0汤圆

发表于 2010-12-31 12:38:20 | 显示全部楼层
回复【楼主位】sharpufo 风生水起月皎白
-----------------------------------------------------------------------

楼主软解WAV的时候,速率能上到多少?
直接用千千静听将320KBPS的MP3转为wav,你的软解,能流畅播放么?

我用VS1003解码WAV的时候,那个速度简直就是一帧帧在听.
瓶颈是VS1003的SPI总线速度不够快.

出0入0汤圆

发表于 2010-12-31 12:48:32 | 显示全部楼层
另外,解码再高码率的flac,看到你的板子上,应该是有外部sram的,为啥不考虑用外部sram呢?这样随便就达到512Kb的内存了.

出0入0汤圆

 楼主| 发表于 2010-12-31 12:53:58 | 显示全部楼层
回复【14楼】liujun6037
回复【楼主位】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
楼主软解wav的时候,速率能上到多少?
直接用千千静听将320kbps的mp3转为wav,你的软解,能流畅播放么?
我用vs1003解码wav的时候,那个速度简直就是一帧帧在听.
瓶颈是vs1003的spi总线速度不够快.
-----------------------------------------------------------------------

可以支持48K 44.1K 16BIT 双声道的WAV及 FLAC(FOOBAR LV2含以下设置),非常流畅,不断流.

WAV就是没有压缩的数据,不需要解码,不知道你播放WAV用的是什么MCU,确实如果SPI总线速度低会影响播放.因为比mp3多了好几倍的数据.

FLAC才是压缩的,一般就是由WAV压缩得到,不过解码后的数据跟原来的WAV是一摸一样的,不像mp3把细节都丢失了,所以叫做无损压缩.

出0入0汤圆

 楼主| 发表于 2010-12-31 12:59:54 | 显示全部楼层
回复【15楼】liujun6037

另外,解码再高码率的flac,看到你的板子上,应该是有外部sram的,为啥不考虑用外部sram呢?这样随便就达到512kb的内存了.
-----------------------------------------------------------------------

不是高码率,是高压缩率,需要较多的RAM.
当然高码率本身是需要更快的数据处理速度.
因为TDA1543和STM32的I2S只支持到,48K,16bit。更高码率的文件没有试.
FSMC的SRAM速度很慢的,内部的RAM跟AHB总线速度是同步的,而外部的要等效于几分频.而且我的板子的SRAM好像坏掉了,没法玩外部SRAM。
外部SRAM耗电厉害啊,一般来说能支持到48K 44K 16位 LV2 的FLAC已经达到很实用的程度。

出0入0汤圆

发表于 2010-12-31 13:10:48 | 显示全部楼层
期待套件

出0入0汤圆

 楼主| 发表于 2010-12-31 13:12:43 | 显示全部楼层
这个只是为下一步做便携式播放器做准备,现在只是普通8MHZ晶振,44.1K是小数分频出来的,48K是整数分频.
SDIO的读写还有兼容性的问题,对SDHC好像支持不好,而且要命的是只能读不能写,一写就出问题。
现在播放模式比较简单,只是读取根目录下的FLAC和WAV循环播放,只有一个按键,下一曲.

出0入0汤圆

发表于 2010-12-31 13:35:56 | 显示全部楼层
回复【14楼】liujun6037
回复【楼主位】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
楼主软解wav的时候,速率能上到多少?
直接用千千静听将320kbps的mp3转为wav,你的软解,能流畅播放么?
我用vs1003解码wav的时候,那个速度简直就是一帧帧在听.
瓶颈是vs1003的spi总线速度不够快.
-----------------------------------------------------------------------

兄弟,WAV与源头的MP3码率有何关系?
鸟关系没有!
有关系的是你转格式时的设置:采样频率及采样位数。
设置相同的话,64kbps和320kbps作源文件,得到的WAV一样大。

出0入0汤圆

发表于 2010-12-31 13:44:25 | 显示全部楼层
回复【20楼】fsclub 绿林好汉
-----------------------------------------------------------------------

受教了.
回复【17楼】sharpufo 风生水起月皎白
-----------------------------------------------------------------------

我用STM32+VS1003,很卡.

出0入0汤圆

 楼主| 发表于 2010-12-31 13:51:23 | 显示全部楼层
回复【21楼】liujun6037
我用stm32+vs1003,很卡.
-----------------------------------------------------------------------

用stm32的话应该不至于很卡吧,我另外一个WAV播放器,用的是SPI连接的SD卡,读速度能到500KB/S 以上,播放的也是44.1K 16BIT立体声的WAV文件,码率是170 KBYTE/SEC,也是非常流畅。

是不是你的频率设置有问题。
还有就是需要设置缓冲区。
比如我这个 FLAC 播放器的就设置了 5个1152*4字节的 PCM输出缓冲。总共将近20K,实际上2个也够了。
为什么是1152*4字节呢,因为一个BLOCK是1152采样,解码后的数据大小是1152*4字节.
缓冲区可以根据实际大小设置.

出0入0汤圆

发表于 2010-12-31 13:56:01 | 显示全部楼层
回复【22楼】sharpufo 风生水起月皎白
回复【21楼】liujun6037  
我用stm32+vs1003,很卡.
-----------------------------------------------------------------------
用stm32的话应该不至于很卡吧,我另外一个wav播放器,用的是spi连接的sd卡,读速度能到500kb/s 以上,播放的也是44.1k 16bit的wav文件,码率是170 kbyte/sec,也是非常流畅。
是不是你的频率设置有问题。
-----------------------------------------------------------------------

有没有相关资料?强烈兴趣。

出0入0汤圆

发表于 2010-12-31 13:58:37 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-12-31 14:02:37 | 显示全部楼层
回复【23楼】fsclub 绿林好汉
回复【22楼】sharpufo 风生水起月皎白
回复【21楼】liujun6037   
我用stm32+vs1003,很卡.  
-----------------------------------------------------------------------  
用stm32的话应该不至于很卡吧,我另外一个wav播放器,用的是spi连接的sd卡,读速度能到500kb/s 以上,播放的也是44.1k 16bit的wav文件,码率是170 kbyte/sec,也是非常流畅。  
是不是你的频率设置有问题。
-----------------------------------------------------------------------
有没有相关资料?强烈兴趣。
-----------------------------------------------------------------------

我发过几次图片,见
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4303327

这个 MCU是 STM32F103RBT6,RAM只有20K,不能解码FLAC只能播放WAV,但是文件系统很稳定,兼容性非常不错,支持SDHC,加入CRC校验.现在DAC换成 PCM1793.音质相当不错。
支持一级子目录,文件按长文件名排序,选择目录.选择文件界面。
播放模式可以目录重复,整卡重复,单曲重复,整卡无重复乱序播放。
因为那个开发板上只有3个按键,所以按键功能是:
KEY1:短按,下一曲,长按下一目录.
KEY2:短按,上一曲,长按进入目录选择.
KEY3:短按进入文件选择,长按快进10秒钟.
KEY1和KE2同时按改变重复模式.

另外STM32F103RBT6没有 I2S接口,需要由第2个SPI接口模拟,做从机输出数据给DAC.需要一片ATMEGA48产生这个I2S主信号,是314Forever朋友介绍的方法,具体的方法可以参考他的那篇帖子.

出0入0汤圆

发表于 2010-12-31 14:36:54 | 显示全部楼层
回复【23楼】fsclub 绿林好汉
回复【22楼】sharpufo 风生水起月皎白
回复【21楼】liujun6037   
我用stm32+vs1003,很卡.  
-----------------------------------------------------------------------  
用stm32的话应该不至于很卡吧,我另外一个wav播放器,用的是spi连接的sd卡,读速度能到500kb/s 以上,播放的也是44.1k 16bit的wav文件,码率是170 kbyte/sec,也是非常流畅。  
是不是你的频率设置有问题。
-----------------------------------------------------------------------
有没有相关资料?强烈兴趣。
-----------------------------------------------------------------------

fsclub 都有兴趣的东西,强烈关注!

出0入0汤圆

发表于 2010-12-31 16:57:51 | 显示全部楼层
楼上勿要笑话。
一直想弄个最简WAV播放器,从SD播放44.1K@16BIT的WAV播放器。
我没有能力与精力,一旦听闻有此等神物,眼珠都大了一半。。。

出0入0汤圆

 楼主| 发表于 2010-12-31 17:03:02 | 显示全部楼层
是论坛的问题还是我机器问题,文件上传不了?

出0入85汤圆

发表于 2010-12-31 17:26:53 | 显示全部楼层
回复【27楼】fsclub  绿林好汉
楼上勿要笑话。
一直想弄个最简wav播放器,从sd播放44.1k@16bit的wav播放器。
我没有能力与精力,一旦听闻有此等神物,眼珠都大了一半。。。
-----------------------------------------------------------------------

ST官方就有wav的例子,IAR下就有
..\IAR Systems\Embedded Workbench 5.4 Evaluation\arm\examples\ST\STM32F10x\STM32-Eval\STM32100B-EVAL_Demo
点击此处下载 ourdev_608278LGF4LU.rar(文件大小:5.93M) (原文件名:STM32100B-EVAL_Demo.rar)

不过貌似有点问题,我改了改,用FatFs文件系统,通过1bit的SDIO读取SD卡,通过TIM6触发DMA输出到DA,支持8/16位的单/双声道wav,开了两个512字节的缓冲区,有需要的可以参考下
点击此处下载 ourdev_608280KRY3FL.rar(文件大小:6K) (原文件名:WavPlayer代码.rar)

出0入0汤圆

 楼主| 发表于 2011-1-2 15:21:48 | 显示全部楼层
终于找出文件系统出错的问题,原来是扇区地址转化为字节地址会出现溢出问题。。。我的卡是16G的。。。。
狂汗。。。这个问题太隐蔽了,被害苦了。。。
现在16G卡的读取正常了。

出0入0汤圆

发表于 2011-1-2 20:52:43 | 显示全部楼层
回复【29楼】Huaan
回复【27楼】fsclub  绿林好汉
楼上勿要笑话。
一直想弄个最简wav播放器,从sd播放44.1k@16bit的wav播放器。
我没有能力与精力,一旦听闻有此等神物,眼珠都大了一半。。。
-----------------------------------------------------------------------
st官方就有wav的例子,iar下就有
..\iar systems\embedded workbench 5.4 evaluation\arm\examples\st\stm32f10x\stm32-eval\stm32100b-eval_demo
点击此处下载  
-----------------------------------------------------------------------

#include "stm32f10x.h"
#include "GUI.h"
#include "ff.h"
#include "waveplayer.h"

你好!缺少头文件。

请问能否整理一下资料?

出0入0汤圆

发表于 2011-1-2 20:58:43 | 显示全部楼层
不知为何,我用stm32的spi+vs1053播放320k的mp3都卡,但是用51 硬件spi + vs1053播放320的mp3没有问题

出0入0汤圆

 楼主| 发表于 2011-1-2 21:47:36 | 显示全部楼层
这个是上面那个用STM32F103RBT6做的WAV播放器的源代码。(狂汗,前天怎么都传不上去。。。。)

点击此处下载 ourdev_608690MSI1T8.rar(文件大小:645K) (原文件名:HELLO_WAV_PLAYER.rar)
编译环境:MDK 3.70


里面的FATFS文件系统经过修改,支持长中文文件名读取,但是文件寻址是按短文件名的,具体的说明见包里的文件。
支持一级子目录,文件按长文件名排序,选择目录.选择文件界面。
播放模式可以目录重复,整卡重复,单曲重复,整卡无重复乱序播放。
因为那个开发板上只有3个按键,所以按键功能是:
KEY1:短按,下一曲,长按下一目录.
KEY2:短按,上一曲,长按进入目录选择.
KEY3:短按进入文件选择,长按快进10秒钟.
KEY1和KE2同时按改变重复模式.

另外STM32F103RBT6没有 I2S接口,需要由第2个SPI接口模拟,做从机输出数据给DAC.需要一片ATMEGA48-20产生这个I2S主信号,是314Forever朋友介绍的方法,具体的方法可以参考他的那篇帖子.

开机后播放器会查找根目录下及一级子目录下的所有CD格式的WAV文件,并按长文件名排序,然后循环顺序播放。因为按键太少,没有暂停/播放键。如果觉得有必要可以自己加进去。
同一目录下的文件数有限制,大概在250个左右,子目录也有限制,大概在50个左右.这个没办法,RBT6 RAM太少了。不过实际使用下来感觉也没什么大问题。

需要根据你的实际硬件修改LCD驱动和按键驱动。
电路图就不贴了,就是: 带SD座和LCD的STM32开发板  加 PCM1793DAC 加 ATMEGA48
SP1接SD卡,SP2接ATMEGA48和DAC.

断断续续修改,代码稍显乱,请将就看。

我觉得SPI2做从机输出I2S数据也是有好处的,这样ATMEGA48-20可以用高精度的晶振,而没有PLL带来的时钟抖动加剧的问题.就是ATMEGA48-20好像不容易买到了.


FLAC的还有问题,还需要好好完善一下.

出0入0汤圆

发表于 2011-1-2 22:13:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-3 00:00:40 | 显示全部楼层
今天修改了一下我之前的代码,用VS1003解码WAV,现在48K采样率,16位双声道解码正常了...

出0入0汤圆

 楼主| 发表于 2011-1-3 00:03:54 | 显示全部楼层
回复【35楼】liujun6037
今天修改了一下我之前的代码,用vs1003解码wav,现在48k采样率,16位双声道解码正常了...
-----------------------------------------------------------------------

祝贺你,呵呵。
我也觉得STM32 SPI不应该这么不给力。

--------------------------
(更正:上面图片中有一处文字错误,Durance应为Duration)

出0入85汤圆

发表于 2011-1-3 10:17:13 | 显示全部楼层
回复【31楼】fsclub  绿林好汉

-----------------------------------------------------------------------

我把整个工程发上来,几点说明:
● 硬件:STM32F103ZET6,SDIO 口接SD卡,FSMC上挂了个 SPFD5420A 控制器的液晶,DA输出
● 软件:编译器是 IAR 5.5 或者 MDK 3.8a,固件库采用 3.3.0 版本,文件系统采用 FatFs R0.08a 版本
● 移植:用29楼的文件(WavPlayer代码.rar),你自己的工程加入FatFs后(并配制好可以使用),再加入waveplayer.c和waveplayer.h两个文件,去掉waveplayer.c文件中的#include "GUI.h"及带LCD_开头的函数即可

点击此处下载 ourdev_608745KOYPVM.rar(文件大小:2.97M) (原文件名:WAV_Player.rar)

出5入8汤圆

发表于 2011-1-3 18:35:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-3 19:57:03 | 显示全部楼层
这个屏:??
http://item.taobao.com/item.htm?id=3642838203

出0入0汤圆

发表于 2011-1-3 20:05:00 | 显示全部楼层
关注此贴,

出0入85汤圆

发表于 2011-1-3 20:09:45 | 显示全部楼层
应该是吧,SPFD5420A控制器,3.0寸的屏,400x240的分辨率,很多MP4都是用这个
只要控制器一样,操作起来就一样,但这个屏不是重点吧

出0入0汤圆

发表于 2011-1-3 20:25:40 | 显示全部楼层
Mark,收藏强帖!

出0入0汤圆

发表于 2011-1-3 21:09:53 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-1-3 21:53:11 | 显示全部楼层
回复【41楼】Huaan
应该是吧,spfd5420a控制器,3.0寸的屏,400x240的分辨率,很多mp4都是用这个
只要控制器一样,操作起来就一样,但这个屏不是重点吧
-----------------------------------------------------------------------

不知道屏无法山寨。。。

出0入0汤圆

发表于 2011-1-3 23:06:38 | 显示全部楼层
有图纸吗?

出0入0汤圆

发表于 2011-1-3 23:35:19 | 显示全部楼层
顶高手!

出0入0汤圆

发表于 2011-1-7 18:02:57 | 显示全部楼层
厉害, LZ能不能谈谈FLAC解码的过程?

出0入0汤圆

发表于 2011-1-7 22:54:10 | 显示全部楼层
很好~!!!确实很犀利~!!!

出0入0汤圆

发表于 2011-1-8 19:28:18 | 显示全部楼层
关注,学习。

出0入0汤圆

发表于 2011-1-8 20:39:45 | 显示全部楼层
这个强,很感兴趣,期待LZ出作品!

出0入0汤圆

发表于 2011-1-9 11:51:26 | 显示全部楼层

出0入0汤圆

发表于 2011-1-11 15:11:04 | 显示全部楼层

出0入0汤圆

发表于 2011-1-25 08:32:06 | 显示全部楼层
关注.

出0入0汤圆

发表于 2011-1-25 08:48:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-25 09:27:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-25 11:05:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-26 09:21:38 | 显示全部楼层
无比期待,楼主最新进展

出0入0汤圆

发表于 2011-1-26 10:58:49 | 显示全部楼层
mk

出0入0汤圆

发表于 2011-1-27 10:08:31 | 显示全部楼层
我也用ZE玩过FLAC解码,STM32解码FLAC是没有问题的。
好久都忘记了,应该几个LEVEL都可以吧。中文长文件名也都解决过了。
sdio 4bit读卡速度也有7M(金士顿2G的)不过缓存要开大,和解码矛盾了。
FLAC还是比APE要好的多了,不知道国内人为什么死守APE,
我还试过APE解码,不过要的内存太大了,没玩下去。而且解码速度估计也不够。
如果真要玩下去可以试试LM3S9B96,可以用SDRAM,还有80MHZ
另外我是从ffmpeg中改过来的

出0入0汤圆

 楼主| 发表于 2011-1-27 21:36:17 | 显示全部楼层
回复【59楼】gogc
-----------------------------------------------------------------------
我用的FLAC解码是从TRAMOD改过的,而TRAMOD也源于ffmpeg.
由于工作和身体状况原因,现在已经不爱玩单片机和软件了,也累了,颈椎已经出问题,容易酸痛。不能再像以前那样拼命调试代码了。
软件上现在已经可以当成一个纯播放器,操作界面也已经改好,改天有空拿个好壳子装起来,就完成了。也许就是终结版。

出0入0汤圆

发表于 2011-1-28 09:50:48 | 显示全部楼层
我也不玩stm32了,呵呵

出0入21汤圆

发表于 2011-1-28 10:12:08 | 显示全部楼层
markmark

出0入0汤圆

发表于 2011-2-10 01:59:07 | 显示全部楼层
这个要mark下。

出0入0汤圆

发表于 2011-2-10 11:27:39 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2011-2-20 13:08:36 | 显示全部楼层
今天终于把SDIO的读取驱动调好了。
现在支持
DMA方式  4 bit
中断方式 4 bit
POLLING方式 4 bit

晶振16.9344 M,4倍频到 67.7 M.

DMA方式可以跑到 3分频,22M
中断方式16分频下稳定,4.3M
POLLING方式在8分频下稳定,8.4M

如果是1bit方式 都能在4分频下稳定。

以上测试都经过实际音乐文件播放,界面操作等测试。

感觉速度跟卡的本身速度有直接关系。
可怜的SDHC 16G 在 DMA 4bit方式3分频下也才 842kb/s,在8分频下也是840kB/s左右,
而 4G的那个DMA 4bit 3分频下能 能达到 2140 KB/S在POLLING 4bit,16分频下达到1410 kB/s.
以上测试为实际FATFS文件读取测试,读块大小4KB。
写操作还有问题,因为没用到写,不打算调了。

出0入0汤圆

发表于 2011-2-20 13:12:08 | 显示全部楼层
可否共享呢。。。

出0入0汤圆

 楼主| 发表于 2011-2-20 13:19:34 | 显示全部楼层
没做到最好,不敢现丑.

出0入0汤圆

发表于 2011-2-20 13:43:17 | 显示全部楼层
回复【67楼】sharpufo 风生水起月皎白
没做到最好,不敢现丑.
-----------------------------------------------------------------------

没有最好,只有更好!

出0入0汤圆

 楼主| 发表于 2011-2-20 13:52:56 | 显示全部楼层
可怜 F205 还没普及,要不有128K RAM用起来才够 支持到 LV5。
F103外扩的既耗电又慢。

出0入0汤圆

发表于 2011-2-20 15:05:28 | 显示全部楼层
回复【69楼】sharpufo  风生水起月皎白
可怜 f205 还没普及,要不有128k ram用起来才够 支持到 lv5。
f103外扩的既耗电又慢。
-----------------------------------------------------------------------

最近在电脑上试了下开源TAK格式,压缩速度比FLAC快多了,而且P0的TAK和LV8的FLAC体积差异在1MB之内。

APE属于放弃类型。

出0入0汤圆

 楼主| 发表于 2011-2-20 15:32:21 | 显示全部楼层
回复【70楼】90999 张耀扬
最近在电脑上试了下开源tak格式,压缩速度比flac快多了,而且p0的tak和lv8的flac体积差异在1mb之内。
ape属于放弃类型。
-----------------------------------------------------------------------
呵呵,内存需求怎么样呢。有时间可以考虑加入。
现在FLAC都还没时间完全搞定呢,比如快进快退功能。还有鸡肋MP3也还没搞。
身体也不行了,只能断断续续完善一下,能播放FLAC其实已经很开心了,一张卡变一张半用。其实什么格式都不是重点,能方便使用就行了。我现在一张16G的卡,存了500首歌,听一天都听不完一半.TDA1543的声音确实是比较有音乐感,但是声场不够开阔,解析度不够.不过我的板子是简装NOS方式的,直接电阻电容IV-LPF的。功放也是朋友送的平民老功放,音箱也是平民老音箱三菱 DS-300,(上面的轻骑兵是电脑的).连晶振都是大路货。咱平民就图个无聊时听听,自娱自乐,非发烧族.
下一步计划是用CS43122或者CS4398做,声音应该会好很多.
我也非常喜欢TDA1305那种甜甜的声音。PCM1793的要用好的运放才有那么一点感觉.

出0入0汤圆

发表于 2011-2-21 09:11:57 | 显示全部楼层
mark 强的    以后也学着做个玩玩

出0入0汤圆

 楼主| 发表于 2011-2-25 23:56:04 | 显示全部楼层
修改了下,完善程度:
支持1级子目录
上一曲、下一曲、暂停、上一目录、下一目录.
支持4种重复方式:全部/目录/单曲/所有文件不重复乱序(随机初始化种子用ADC生成).
可进行文件选择.
呵呵,“最销魂”的还是那苗条的心形进度条。

最新播放界面:


(原文件名:DSC_0000007.jpg)

出0入0汤圆

发表于 2011-2-26 00:00:00 | 显示全部楼层
楼主代码能共享吗?

出0入0汤圆

 楼主| 发表于 2011-2-26 00:08:46 | 显示全部楼层
不要急啊,等我做完了啊。
这个播放器的名称是:

OOPY_MUSIC_PLAYER

OOPY是闽南语(台语)“黑鼻子”的意思,是我养过的一条可爱的狗,很机灵,可惜后来不幸病死。怀念中。。。。。。

出0入0汤圆

发表于 2011-2-26 00:40:33 | 显示全部楼层
这个LZ有点意思!理性中还有不少感性!
希望你的身体好起来,这些可以慢慢做的!

出0入0汤圆

 楼主| 发表于 2011-2-27 19:18:41 | 显示全部楼层
回复【76楼】dy008
-----------------------------------------------------------------------

谢谢您的吉言!
其实没有什么大碍,就是颈椎容易酸,眼睛容易累。

出0入0汤圆

发表于 2011-2-27 22:46:52 | 显示全部楼层
玩了这么多年的技术,是时候享受一下自已艰苦学习的成果了。
发烧音响技术需要日积月累,水到渠成。

出0入0汤圆

 楼主| 发表于 2011-2-28 00:07:33 | 显示全部楼层
最新进展:
终于把DAC换成大一些的PCM1793的板子了,运放是OPA2604。
现在STM32是SPI1做从机喂数据给DAC,而I2S信号是由ATMEGA48产生,所以不会带进PLL的影响,ATMEGA48的晶振是有源16.9344M 。数字部分和模拟部分独立线性供电。
音质提升明显。
缺点是现在只支持一种采样率44100了。
因为现在是板子拼接的,所以连线线较长,音质提升有限。如果是做板,应该还能有不少提升空间.


(原文件名:DSC_0000013.jpg)

出0入0汤圆

 楼主| 发表于 2011-2-28 20:35:00 | 显示全部楼层
今天试着把PLL调到3倍,50mhz,播放还算流畅.
调到2倍,33mhz,就开始断断续续起来了。
然后开始超频,最高调到8倍,135mhz.貌似一切正常.
不敢这么疯狂,最后权衡利弊,把PLL定在5倍,85mhz。
SD CARD时钟是DMA 4bit方式,16分频,速度已经远远足够。

出0入0汤圆

发表于 2011-2-28 21:51:58 | 显示全部楼层
对楼主用Mega48产生的IIS很感兴趣。
IIS的主时钟 1.411M 可以由16.9344M经过PWM产生,再级联用另一个PWM产生88.2k的左右声道切换信号,其中最难最关键的就是再由88.2k产生把(16位数据/每通道)通过SPI传送出去。当然这时的另一个SPI口时钟可以设成外部驱动,时钟也同样地连接到PWM产生的1.411M中,在所有这些信号中,(包括中断处理接收WAV的数据),不能有任何的一个时钟单位时间上的错位,否则就是败笔。这里面有很多的技术细节。没整明白楼主是如何弄的。这个很有深度和难度,本人只想到以上这些,楼主可否透露一下大概流程。

出0入0汤圆

 楼主| 发表于 2011-2-28 22:13:09 | 显示全部楼层
回复【81楼】zhousd 银河一号
-----------------------------------------------------------------------

这个方法是314Forever 兄台介绍的方法。主要就是利用ATmega48的定时器对16.9344M时钟进行分频产生BCK,LRCK(WS)以及STM32 SPI的片选.同时16.9344作为MCLK输出给DAC. STM32 SPI 是直接输给 DAC 数据的,数据不通过ATMEGA48.
具体原理你可以搜索他的帖子。

出0入0汤圆

发表于 2011-2-28 22:48:32 | 显示全部楼层
等有空了一定要整一个AVR的模拟IIS信号。

出0入0汤圆

 楼主| 发表于 2011-2-28 23:03:16 | 显示全部楼层
回复【81楼】zhousd 银河一号
-----------------------------------------------------------------------

STM32的接收中断并不是接收数据而是输出数据给DAC.(准确的说是准备下一次SPI传输的数据).

呵呵,俺这播放器可是“三核”的哦,STM32一核心,ATMEGA48一核心,PCM1793一核心

出0入0汤圆

发表于 2011-2-28 23:07:33 | 显示全部楼层
找到了,多谢楼主提供的信息。找时间一定要把其IIS代码发扬光大。
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3212045&bbs_page_no=1&search_mode=3&search_text=314forever&bbs_id=9999

出0入0汤圆

 楼主| 发表于 2011-2-28 23:42:52 | 显示全部楼层
这种方法的不足是采样率只能固定为一种。不过还好现在也都是在听CD 44.1K 的格式。

出0入0汤圆

发表于 2011-3-1 00:19:49 | 显示全部楼层
不错

出0入0汤圆

发表于 2011-3-1 00:40:03 | 显示全部楼层
F103ZE不是带I2S么? 你拿那几个脚接TFT拉?

出0入0汤圆

 楼主| 发表于 2011-3-1 01:23:56 | 显示全部楼层
回复【88楼】90999 张耀扬
-----------------------------------------------------------------------
那几个脚空着呢。
F103ZE的I2S 不好用啊,PLL恶化jitter,然后那MCLK也不敢恭维,估计又是PLL而来。
因为我换了PCM1793,对时钟要求更高,所以不用F103ZE本身I2S了。
下一步想法是用一片CPLD接双晶振来应付各种采样率.

出350入8汤圆

发表于 2011-3-1 08:10:32 | 显示全部楼层
顶一个!

出0入0汤圆

 楼主| 发表于 2011-3-2 08:50:17 | 显示全部楼层
加进了快进、快退。

出0入0汤圆

发表于 2011-3-2 09:15:19 | 显示全部楼层
顶一个,再次支持一下。。。

出0入0汤圆

 楼主| 发表于 2011-3-2 12:01:14 | 显示全部楼层
回复【6楼】victzhang
-----------------------------------------------------------------------
64K还不能全部拿来解FLAC,还要系统堆栈、文件、界面、音频数据缓冲等开销。

出0入134汤圆

发表于 2011-3-2 12:30:58 | 显示全部楼层
真棒!!  一直在想用STM32软解MP3

出0入0汤圆

发表于 2011-3-2 13:18:43 | 显示全部楼层
回复【93楼】sharpufo  风生水起月皎白
回复【6楼】victzhang
-----------------------------------------------------------------------
64k还不能全部拿来解flac,还要系统堆栈、文件、界面、音频数据缓冲等开销。
-----------------------------------------------------------------------

ST的资源自能干这个了!

出0入0汤圆

发表于 2011-3-2 15:24:42 | 显示全部楼层
回复:sharpufo 风生水起月皎白
//F103ZE的I2S 不好用啊,PLL恶化jitter,然后那MCLK也不敢恭维,估计又是PLL而来。
//因为我换了PCM1793,对时钟要求更高,所以不用F103ZE本身I2S了。
//下一步想法是用一片CPLD接双晶振来应付各种采样率.
--------------------
对于jitter,这是用PLL倍频的时钟分频作IIS时钟的最大缺点。之前本人也想过用CPLD来做专用的IIS信号接口,但是改用CPLD也有很大的缺点,就是必需16位数据一次传送锁存,否则就要先描述出一个SPI口来,这岂不是跟MCU中现有的模式一样了?这就有点多此一举了,并且CPLD的供货远远没有MCU的供货稳定。

出0入0汤圆

 楼主| 发表于 2011-3-2 20:38:11 | 显示全部楼层
回复【96楼】zhousd 银河一号
-----------------------------------------------------------------------

CPLD主要是可以接双晶振,对应48000,44100这两种采样率,最大限度减少jitter的影响。另外可以做SPDIF接口,当数字转盘使用.
目前还不会深入这个方案。时间和精力有限。

做这个不是为了商业应用,纯粹是自娱自乐,供货上没什么问题。

出0入0汤圆

发表于 2011-3-2 22:09:37 | 显示全部楼层
本人DIY WAV也是自娱自乐,有道是三句不离本行。多年的习惯性思维改不了。
对于晶振频率的切换,可以用二极管开关切换啊。老式电视的色副载波4.43M和3.58M就是用二极管构成的巧妙电路作切换。

出0入0汤圆

发表于 2011-3-3 01:43:05 | 显示全部楼层
回复【98楼】zhousd  银河一号
本人diy wav也是自娱自乐,有道是三句不离本行。多年的习惯性思维改不了。
对于晶振频率的切换,可以用二极管开关切换啊。老式电视的色副载波4.43m和3.58m就是用二极管构成的巧妙电路作切换。
-----------------------------------------------------------------------

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

本版积分规则

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

GMT+8, 2024-4-25 16:59

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

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