sharpufo 发表于 2010-12-30 21:54:41

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

初步搞定了,嘿嘿,听起来和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,说得更深入点就是只能放 的 FLAC文件。不过LV2的FLAC也能压到67%左右.跟默认设置的 LV5其实差不了两三兆。

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

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

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

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608145GUNIPG.jpg
(原文件名:IMAGE_063.jpg)

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608160ZS3B2O.jpg
(原文件名:IMAGE_075.jpg)

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608158BK75XN.JPG
(原文件名:IMAG0010.JPG)

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608147I6GK2P.JPG
(原文件名:IMAG0012.JPG)

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

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

<center>http://cache.ourdev.cn/bbs_upload842621/files_33/ourdev_582262D16NSV.jpg
<center>

<center>http://cache.ourdev.cn/bbs_upload842621/files_33/ourdev_582264M913MS.jpg
<center>

<center>http://cache.ourdev.cn/bbs_upload842621/files_33/ourdev_582265EIHWUU.jpg
<center>

<center>http://cache.ourdev.cn/bbs_upload842621/files_33/ourdev_582266OA5BCL.jpg
<center>

eworker 发表于 2010-12-30 22:00:21

回复【楼主位】sharpufo 风生水起月皎白
-----------------------------------------------------------------------

高手

mowin 发表于 2010-12-30 22:03:48

不错,支持

jackiezeng 发表于 2010-12-30 23:26:57

厉害厉害,会不会出套件啊?

pspike 发表于 2010-12-30 23:38:14

flac,真厉害

victzhang 发表于 2010-12-31 02:06:06

楼主高手啊,搞定了FLAC软解~
能否优化flac解码算法,减少内存空间占用?

victzhang 发表于 2010-12-31 02:14:30

不知道像VS1053b这样的DSP芯片是怎样实现flac解码的?VS1053b加载软件插件可以实现flac解码,经测试能流畅播放绝大部分flac文件。它里面好像也没有多少RAM的,加起来不到64K...

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608179FW62TV.PNG
VS1053b Memory Map

_yuming 发表于 2010-12-31 08:34:10

有代码 就好 了/。。

magiczero 发表于 2010-12-31 08:39:30

软解啊,厉害

ding86361953 发表于 2010-12-31 08:42:19

楼主是高人。听说轻骑兵倒闭了!

gallop020142 发表于 2010-12-31 08:56:12

楼主要是贴上代码就更加完美、众乐乐了

fsclub 发表于 2010-12-31 09:17:21

楼主出套件,我来个!!!

yusufu 发表于 2010-12-31 09:45:58

mark~~

sharpufo 发表于 2010-12-31 12:24:32

各位不要急,代码还需修改,稍后放出。

liujun6037 发表于 2010-12-31 12:38:20

回复【楼主位】sharpufo 风生水起月皎白
-----------------------------------------------------------------------

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

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

liujun6037 发表于 2010-12-31 12:48:32

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

sharpufo 发表于 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把细节都丢失了,所以叫做无损压缩.

sharpufo 发表于 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已经达到很实用的程度。

dmxfeng 发表于 2010-12-31 13:10:48

期待套件

sharpufo 发表于 2010-12-31 13:12:43

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

fsclub 发表于 2010-12-31 13:35:56

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

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

liujun6037 发表于 2010-12-31 13:44:25

回复【20楼】fsclub 绿林好汉
-----------------------------------------------------------------------

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

我用STM32+VS1003,很卡.

sharpufo 发表于 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字节.
缓冲区可以根据实际大小设置.

fsclub 发表于 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,也是非常流畅。
是不是你的频率设置有问题。
-----------------------------------------------------------------------

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

hshl2010 发表于 2010-12-31 13:58:37

mark

sharpufo 发表于 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朋友介绍的方法,具体的方法可以参考他的那篇帖子.

xorX 发表于 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 都有兴趣的东西,强烈关注!

fsclub 发表于 2010-12-31 16:57:51

楼上勿要笑话。
一直想弄个最简WAV播放器,从SD播放44.1K@16BIT的WAV播放器。
我没有能力与精力,一旦听闻有此等神物,眼珠都大了一半。。。

sharpufo 发表于 2010-12-31 17:03:02

是论坛的问题还是我机器问题,文件上传不了?

Huaan 发表于 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)

sharpufo 发表于 2011-1-2 15:21:48

终于找出文件系统出错的问题,原来是扇区地址转化为字节地址会出现溢出问题。。。我的卡是16G的。。。。
狂汗。。。这个问题太隐蔽了,被害苦了。。。
现在16G卡的读取正常了。

fsclub 发表于 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"

你好!缺少头文件。

请问能否整理一下资料?

cat_li 发表于 2011-1-2 20:58:43

不知为何,我用stm32的spi+vs1053播放320k的mp3都卡,但是用51 硬件spi + vs1053播放320的mp3没有问题

sharpufo 发表于 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的还有问题,还需要好好完善一下.

tbbt 发表于 2011-1-2 22:13:45

mark

liujun6037 发表于 2011-1-3 00:00:40

今天修改了一下我之前的代码,用VS1003解码WAV,现在48K采样率,16位双声道解码正常了...

sharpufo 发表于 2011-1-3 00:03:54

回复【35楼】liujun6037
今天修改了一下我之前的代码,用vs1003解码wav,现在48k采样率,16位双声道解码正常了...
-----------------------------------------------------------------------

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

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

Huaan 发表于 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)

anning 发表于 2011-1-3 18:35:15

mark

fsclub 发表于 2011-1-3 19:57:03

这个屏:??
http://item.taobao.com/item.htm?id=3642838203

cxjnet 发表于 2011-1-3 20:05:00

关注此贴,

Huaan 发表于 2011-1-3 20:09:45

应该是吧,SPFD5420A控制器,3.0寸的屏,400x240的分辨率,很多MP4都是用这个
只要控制器一样,操作起来就一样,但这个屏不是重点吧

xld007 发表于 2011-1-3 20:25:40

Mark,收藏强帖!

RENMA 发表于 2011-1-3 21:09:53

MARK

fsclub 发表于 2011-1-3 21:53:11

回复【41楼】Huaan
应该是吧,spfd5420a控制器,3.0寸的屏,400x240的分辨率,很多mp4都是用这个
只要控制器一样,操作起来就一样,但这个屏不是重点吧
-----------------------------------------------------------------------

不知道屏无法山寨。。。

_yuming 发表于 2011-1-3 23:06:38

有图纸吗?

damoplus 发表于 2011-1-3 23:35:19

顶高手!

cheungman 发表于 2011-1-7 18:02:57

厉害, LZ能不能谈谈FLAC解码的过程?

fq1888 发表于 2011-1-7 22:54:10

很好~!!!确实很犀利~!!!

windy__xp 发表于 2011-1-8 19:28:18

关注,学习。

dy008 发表于 2011-1-8 20:39:45

这个强,很感兴趣,期待LZ出作品!

flyingcys 发表于 2011-1-9 11:51:26

bd4sad 发表于 2011-1-11 15:11:04

eddia2000 发表于 2011-1-25 08:32:06

关注.

whitelight 发表于 2011-1-25 08:48:04

mark

lionliu 发表于 2011-1-25 09:27:23

mark

ndt2000 发表于 2011-1-25 11:05:23

mark

Fpang 发表于 2011-1-26 09:21:38

无比期待,楼主最新进展

vincent.r 发表于 2011-1-26 10:58:49

mk

gogc 发表于 2011-1-27 10:08:31

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

sharpufo 发表于 2011-1-27 21:36:17

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

gogc 发表于 2011-1-28 09:50:48

我也不玩stm32了,呵呵

onece 发表于 2011-1-28 10:12:08

markmark

scat-01 发表于 2011-2-10 01:59:07

这个要mark下。

Forever 发表于 2011-2-10 11:27:39

mark

sharpufo 发表于 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。
写操作还有问题,因为没用到写,不打算调了。

_yuming 发表于 2011-2-20 13:12:08

可否共享呢。。。

sharpufo 发表于 2011-2-20 13:19:34

没做到最好,不敢现丑.

eworker 发表于 2011-2-20 13:43:17

回复【67楼】sharpufo 风生水起月皎白
没做到最好,不敢现丑.
-----------------------------------------------------------------------

没有最好,只有更好!

sharpufo 发表于 2011-2-20 13:52:56

可怜 F205 还没普及,要不有128K RAM用起来才够 支持到 LV5。
F103外扩的既耗电又慢。

90999 发表于 2011-2-20 15:05:28

回复【69楼】sharpufo风生水起月皎白
可怜 f205 还没普及,要不有128k ram用起来才够 支持到 lv5。
f103外扩的既耗电又慢。
-----------------------------------------------------------------------

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

APE属于放弃类型。

sharpufo 发表于 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的要用好的运放才有那么一点感觉.

sgfwin 发表于 2011-2-21 09:11:57

mark 强的    以后也学着做个玩玩

sharpufo 发表于 2011-2-25 23:56:04

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

最新播放界面:

http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_618480HUNE4Q.jpg
(原文件名:DSC_0000007.jpg)

_yuming 发表于 2011-2-26 00:00:00

楼主代码能共享吗?

sharpufo 发表于 2011-2-26 00:08:46

不要急啊,等我做完了啊。
这个播放器的名称是:

OOPY_MUSIC_PLAYER

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

dy008 发表于 2011-2-26 00:40:33

这个LZ有点意思!理性中还有不少感性!
希望你的身体好起来,这些可以慢慢做的!

sharpufo 发表于 2011-2-27 19:18:41

回复【76楼】dy008
-----------------------------------------------------------------------

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

zhousd 发表于 2011-2-27 22:46:52

玩了这么多年的技术,是时候享受一下自已艰苦学习的成果了。
发烧音响技术需要日积月累,水到渠成。

sharpufo 发表于 2011-2-28 00:07:33

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

http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_618837CYT65Z.jpg
(原文件名:DSC_0000013.jpg)

sharpufo 发表于 2011-2-28 20:35:00

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

zhousd 发表于 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的数据),不能有任何的一个时钟单位时间上的错位,否则就是败笔。这里面有很多的技术细节。没整明白楼主是如何弄的。这个很有深度和难度,本人只想到以上这些,楼主可否透露一下大概流程。

sharpufo 发表于 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.
具体原理你可以搜索他的帖子。

zhousd 发表于 2011-2-28 22:48:32

等有空了一定要整一个AVR的模拟IIS信号。

sharpufo 发表于 2011-2-28 23:03:16

回复【81楼】zhousd 银河一号
-----------------------------------------------------------------------

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

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

zhousd 发表于 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

sharpufo 发表于 2011-2-28 23:42:52

这种方法的不足是采样率只能固定为一种。不过还好现在也都是在听CD 44.1K 的格式。

afenge 发表于 2011-3-1 00:19:49

不错

90999 发表于 2011-3-1 00:40:03

F103ZE不是带I2S么? 你拿那几个脚接TFT拉?

sharpufo 发表于 2011-3-1 01:23:56

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

bmagui 发表于 2011-3-1 08:10:32

顶一个!

sharpufo 发表于 2011-3-2 08:50:17

加进了快进、快退。

_yuming 发表于 2011-3-2 09:15:19

顶一个,再次支持一下。。。

sharpufo 发表于 2011-3-2 12:01:14

回复【6楼】victzhang
-----------------------------------------------------------------------
64K还不能全部拿来解FLAC,还要系统堆栈、文件、界面、音频数据缓冲等开销。

elecfun 发表于 2011-3-2 12:30:58

真棒!!一直在想用STM32软解MP3

seaman117 发表于 2011-3-2 13:18:43

回复【93楼】sharpufo风生水起月皎白
回复【6楼】victzhang
-----------------------------------------------------------------------
64k还不能全部拿来解flac,还要系统堆栈、文件、界面、音频数据缓冲等开销。
-----------------------------------------------------------------------

ST的资源自能干这个了!

zhousd 发表于 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的供货稳定。

sharpufo 发表于 2011-3-2 20:38:11

回复【96楼】zhousd 银河一号
-----------------------------------------------------------------------

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

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

zhousd 发表于 2011-3-2 22:09:37

本人DIY WAV也是自娱自乐,有道是三句不离本行。多年的习惯性思维改不了。
对于晶振频率的切换,可以用二极管开关切换啊。老式电视的色副载波4.43M和3.58M就是用二极管构成的巧妙电路作切换。

90999 发表于 2011-3-3 01:43:05

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

哦,那么神奇?上图看看~~~~~~
页: [1] 2
查看完整版本: 终于搞好 FLAC 无损格式播放,使用STM32 F103ZE软解码,文件系统FATFS,TFT FSMC,DAC T