nilxy 发表于 2010-9-11 17:31:09

Mega16做的读SD卡的WAV音乐播放器

这是去年做过的一个音乐播放器,基本结构就是用Mega16读取SD卡中的WAV音乐文件,然后送入两个DA转换器,分别控制左右声道,再将声音放大,驱动耳机或扬声器,附加的LCD1602屏用于显示播放时间等。虽然音频用的是8位量化,但是我设计时采样率很高为44.1kbps,再加上又是双声道,因此音质超好,除了微弱的白噪声以外,音质基本没有失真。

基本功能都有,面板上有三个按钮,从上至下分别为标记为K1、K2、K3。
功能如下:
K1:播放、暂停;
K2:短按 上一曲;长按 返回
K3:短按 下一曲;长按 快进
双联可变电位器用于音量大小调节。

做完后想过把屏、DA等去掉,单片机用Mega8,存储卡用TF卡,音频用PWM的方式输出,这样硬件结构大幅度缩减,整机体积也减小不少。后来一直没有时间去做,前几天在《无线电》上看到有人用这种结构做了一个,于是不禁感慨了一下,遂把相关资料贴到这里,方便大家交流。

点击此处下载 ourdev_582186JLMVD9.rar(文件大小:3.81M) (原文件名:基于SD卡的WAV文件播放器.rar)
http://cache.amobbs.com/bbs_upload782111/files_33/ourdev_582187ZV6I71.jpg
(原文件名:图像0187.jpg)

http://cache.amobbs.com/bbs_upload782111/files_33/ourdev_582188BBP9N3.jpg
(原文件名:图像0189.jpg)

http://cache.amobbs.com/bbs_upload782111/files_33/ourdev_582189YV6R8Y.jpg
(原文件名:图像0191.jpg)

huangkc 发表于 2010-9-11 19:16:15

不错

mowin 发表于 2010-9-11 19:40:26

对“音质好”有疑问

sharpufo 发表于 2010-9-12 00:08:52

回复【2楼】mowin 雾湾
对“音质好”有疑问
-----------------------------------------------------------------------
东东不错。楼主是同道人啊,呵呵。

不过对"音质好"同样表示严重疑问,我做的STM32f103+TDA1305,使用独立的有源温补晶振提供I2S信号驱动,耦合和去耦电容都是知名音频专用电容.播放的是16BIT的44.1K WAV,音质也才过得去,感觉高音有点冲。而且只有直接使用锂聚合物电池直接供电(不经过任何处理)才能听清楚那"毒人的"口水声和"胆味".

对"音质基本没有失真"更是十分怀疑,楼主如果有机会听一下俺的播放器的声音就知道为什么了。俺的配置虽然音质已经比一般的CD要好,(不要怀疑,我比较过的机器有松下便携式CD S700,SONY CDP-950,IAUDIO i7 MP3,APPLE IPOD 3代 20G,还有个声音差得一塌糊涂还吹上天的垃圾的RM970 MP4,等等) 声音干净得连一点点底噪都听不见,俺都不敢这么说,这播放器的解析力一般,结像有时候会混,特别是大动态的时候。不过非常适合听人声。

开机检查SD卡,屏幕右上角被碰坏了

http://cache.amobbs.com/bbs_upload782111/files_33/ourdev_582262D16NSV.jpg
(原文件名:1.jpg)
LOGO

http://cache.amobbs.com/bbs_upload782111/files_33/ourdev_582263E5EKE3.jpg
(原文件名:2.jpg)
文件选择,还有一个界面是文件夹选择,图略

http://cache.amobbs.com/bbs_upload782111/files_33/ourdev_582264M913MS.jpg
(原文件名:3.jpg)
播放文件界面,第一行为文件夹,第二行为播放的文件名,其他的一看便知.底行蓝色的DIR表示当前循环模式为文件夹循环
中间就是那“销魂”的进度条了,哈哈

http://cache.amobbs.com/bbs_upload782111/files_33/ourdev_582265EIHWUU.jpg
(原文件名:4.jpg)

开发板和DAC拼接制作,对外观要求高的朋友请绕过
DAC模拟部分直接聚合物电池供电,套用某大虾的话,直接拍死千把块的MP3,踢飞山寨机

http://cache.amobbs.com/bbs_upload782111/files_33/ourdev_582266OA5BCL.jpg
(原文件名:5.jpg)

手机拍摄,低清图奉献。这个播放器性价比超高,音质已经超过我的预期,但离Hifi还远.下一步计划,开板,制作便携式 准Hifi 播放器,DAC初步选定为PCM1792或者PCM1704K,可能使用数字滤波DF1704,增加 MP3播放,增加flac播放.

gzhuli 发表于 2010-9-12 00:36:44

DAC0832能叫音质超好?
还好这个帖子不是放在音响区,不然肯定被口水淹死。
看在LZ发在AVR区的份上,大家就悠着点吧。 :)

fm993 发表于 2010-9-12 00:46:35

楼主确实有才!不过DA0832是8位DA,哪来音质好丫??

jackiezeng 发表于 2010-9-12 01:03:45

好资料!

mowin 发表于 2010-9-12 01:11:37

回复【3楼】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
兄台能分享一下字库和unicode转换表吗?
yy一下PCM1704K, DF1704+PCM1704K*2价钱不低啊
我想找AK4390/AK4397不知道哪里有

sharpufo 发表于 2010-9-12 01:19:16

文件在这儿
点击此处下载
ourdev_582269BZKOZ6.rar(文件大小:430K) (原文件名:GBK字库及Unicode转换表.rar)



//显示汉字的函数,仅供参考,c为GBK编码,
void PutGB1616(unsigned short x, unsigned shorty, unsigned char c, unsigned int f,unsigned int b)
{
        unsigned int i,j,k;
        unsigned long offset;
        unsigned char GBK_MSK;

for(i=0;i<32;i++)GBK_MSK=0xff;

if(font_on)
{
        i=c;k=c;
        if(i>=0x81 && i<=0xA0)offset=(0x0000+(i-0x81)*0xBF+(k-0x40))*0x20;
        else
        if(i>=0xA1 && i<=0xA7)offset=(0x17E0+(i-0xA1)*0x5E+(k-0xA1))*0x20;
        else
        if(i>=0xA8 && i<=0xA9)offset=(0x1A72+(i-0xA8)*0xB0+(k-0x40))*0x20;
        else
        if(i>=0xAA && i<=0xAF)offset=(0x1BD3+(i-0xAA)*0x61+(k-0x40))*0x20;
        else
        if(i>=0xB0 && i<=0xF7)offset=(0x1E19+(i-0xB0)*0xBF+(k-0x40))*0x20;
        else
        if(i>=0xF8 && i<=0xFE)offset=(0x53D1+(i-0xF8)*0x61+(k-0x40))*0x20;
        else offset=0xff00;
        f_lseek(&f_font,offset);
        f_read(&f_font,GBK_MSK,0x20,&j);
        }

        LCD_SetArea(x, y, x+16-1, y+16-1);
        LCD_Inst(0x2C);

        LCD_CS(0);
        LCD_RD(1);
        LCD_RS(1);

           for(i=0;i<32;i++)
        {
        unsigned short m=GBK_MSK;
        for(j=0;j<8;j++)
                                {
                                if((m&0x80)==0x80)
                                                {
                                                LCD_Bus_Write_Byte(f>>8);
                                                LCD_Bus_Write_Byte(f);
                                                }
                                else {
                                        LCD_Bus_Write_Byte(b>>8);
                                        LCD_Bus_Write_Byte(b);
                                        }
                                m<<=1;
                                }
        }
        LCD_CS(1);
}


//Unicode 转换成 GBK码的函数
WCHAR ff_convert (        /* Converted code, 0 means conversion error */
        WCHAR        src        /* Character code to be converted */
)
{
        WCHAR t;
        WCHAR c;
        unsigned long i, li, hi;
        int n;
        unsigned int cout;

if( ! u2gb_on )
{
        if(f_open (&f_u2gb,"SYSTEM/U2GB.TBL", FA_READ)!=FR_OK)
                        u2gb_on=0;
        else
                        u2gb_on=1;
}


        if (src < 0x80){c = src;}/* ASCII */
        else
                if(u2gb_on==0)c='?';
                else
                {
                        /* Unicode to OEMCP */
                        hi=f_u2gb.fsize;
                        hi =hi / 4 - 1;
                        li = 0;
                       
                        for (n = 16; n; n--)
                                {
                                i = li + (hi - li) / 2;
                                f_lseek(&f_u2gb,i*4);
                                f_read(&f_u2gb,&t,4,&cout);
                                if (src == t) break;
                                if (src > t)
                                        li = i;
                                else
                                        hi = i;
                                }
                        if(n!=0)
                                c=t;
                        else c='?';
                        }
        return c;
}

mowin 发表于 2010-9-12 01:23:59

非常感谢
我准备在UC3B0256+LCD12864上试用

sharpufo 发表于 2010-9-12 01:27:12

这个是横向取模的,如果是LCD12864估计要竖向取模的。
给:
GBK字库,有横向、竖向及寻址公式ourdev_582271WUDVT0.rar(文件大小:763K) (原文件名:16点阵GBK字库.rar)

mowin 发表于 2010-9-12 01:32:59

LCD12864是竖向低位在上的

mowin 发表于 2010-9-12 01:37:37

回复【10楼】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
我明天试验一下,看来我一直头痛的字库问题有希望解决
再次感谢

sharpufo 发表于 2010-9-12 01:39:42

回复【7楼】mowin 雾湾
回复【3楼】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
兄台能分享一下字库和unicode转换表吗?
yy一下pcm1704k, df1704+pcm1704k*2价钱不低啊
我想找ak4390/ak4397不知道哪里有
-----------------------------------------------------------------------

千把块还消受得起,难的是模拟部分和外观的设计."舍不得孩子套不住狼"哈.
不过为了向便携性妥协,而且仅是个人业余DIY,不会采用非常复杂的设计,如果发现PCM1792或者PCM1704设计需要复杂的后期处理或者太大的功耗,会考虑重新用TDA1305,音质达到入门级CD的水准还是可以的,毕竟这片子声音还是不错的.因为已经包含运放,后期滤波处理非常简洁.DAC部分功耗在50ma左右.
不过TDA1305不好调声,就因为其后期处理简洁。

nilxy 发表于 2010-9-12 15:50:50

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

唉,真是不好意思,光顾着自我陶醉了,没注意措辞。实际上音质只能跟卡带录音机相当,带上耳机仔细听有明显的背景噪声,我测试过,跟DA无关,是功放TDA2822的问题吧,事实上,用8位量化的确不能保音质,但是用16位的话,歌曲文件又显得太大了,差不多有四五十兆啊

nilxy 发表于 2010-9-12 15:55:46

回复【4楼】gzhuli 咕唧霖
dac0832能叫音质超好?
还好这个帖子不是放在音响区,不然肯定被口水淹死。
看在lz发在avr区的份上,大家就悠着点吧。 :)
-----------------------------------------------------------------------

抱歉,音质的确一般,当时的情况是刚学avr,迫切想用avr做个东西,于是就做了这个

nilxy 发表于 2010-9-12 17:22:30

回复【5楼】fm993
楼主确实有才!不过da0832是8位da,哪来音质好丫??
-----------------------------------------------------------------------

怎么说呢,其实在我们这个破小城市,很多的东西都买不到,我这边的电子市场里DA我只见到DAC0832,说实话这边的市场比深圳要落后10年,真的,这边的单片机出了51、avr、pic就没别的,而且还都没有贴片,杯具啊

hdd961140543 发表于 2010-9-12 20:24:31

mark

hdd961140543 发表于 2010-9-12 20:25:10

mark,昨天刚刚在《无线电》上看见!

sharpufo 发表于 2010-9-13 20:52:37

回复【14楼】nilxy
回复【3楼】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
唉,真是不好意思,光顾着自我陶醉了,没注意措辞。实际上音质只能跟卡带录音机相当,带上耳机仔细听有明显的背景噪声,我测试过,跟da无关,是功放tda2822的问题吧,事实上,用8位量化的确不能保音质,但是用16位的话,歌曲文件又显得太大了,差不多有四五十兆啊
-----------------------------------------------------------------------

现在SD卡动不动几个G,四五十兆不多啊。16位也仅仅是比8位多一倍,用8位的话不还得有个二三十兆?把卡容量加大一倍不就得了,再说现在SD或TF卡也不太贵,像我买的16G的是180大洋,这么大容量的卡。。。遥想当年,小乔那个。。。(sorry,跑题了,呵呵)想当年,我用的第一块SD卡才可怜的64M,拿来存CD,只能存1首,汗,而且也要一百多大洋。。。今非昔比啊。
我倒是担心用AVR处理CD音质的WAV文件速度上会不够,170KBYTE/SEC的文件读取速度,再加上其他的开销,软件上要有很好的优化才能达到吧。

tigerchen 发表于 2010-9-14 20:38:37

mark

wanjian 发表于 2010-11-8 22:21:56

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

看了这个很感兴趣,有开好的板吗?想弄一个玩玩!我用43122或者1794做解码芯片(可以提供这2种芯片试验), 谢谢!

Fpang 发表于 2010-11-15 17:15:12

同问,楼主做好板了么,想玩一个

sharpufo 发表于 2010-11-15 17:20:32

回复【21楼】wanjian
回复【3楼】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
看了这个很感兴趣,有开好的板吗?想弄一个玩玩!我用43122或者1794做解码芯片(可以提供这2种芯片试验), 谢谢!
-----------------------------------------------------------------------

上面已经说明,是开发板加DAC板拼起来的。我现在DAC换另一块PCM1793的,还没有画PCB,估计也不会很快,最近时间有点紧。

cuikai12345 发表于 2010-11-15 18:32:36

mark

danielmi 发表于 2010-11-15 18:37:30

都是牛人!!!

turf456 发表于 2010-11-15 18:40:33

我用M16+DAC0832+LM386,音质一般,噪音大。

siway2006 发表于 2011-1-28 03:24:07

我在试,,声音出来了,但音调变了,感觉是读SD卡数据不够快,
请问大家是怎么读取SD卡数据,速度会快点呢?
我看楼主程序是这样的,先读512Byte,然后由中断去播放,播放中继续读下一个512BYTE数据,
我也按这样去试过,觉得还是慢,想不明白

siway2006 发表于 2011-1-28 03:24:45

现在就是原来是女声的,出来变男声了,而且不清晰

siway2006 发表于 2011-1-28 03:29:09

附件是源程序
点击此处下载 ourdev_613716XDCFIC.rar(文件大小:28K) (原文件名:S-140.rar)

mydows 发表于 2011-1-28 08:25:23

学习了!

liufangyoulove 发表于 2011-3-1 21:00:55

回复【楼主位】nilxy
-----------------------------------------------------------------------

您好,我想试试做做您这个mp3,但是遇到了些问题,我是个新手,能帮帮我吗?我的qq 532529278

moen 发表于 2011-3-1 21:22:14

很不错

LegendSong 发表于 2011-3-30 06:35:27

这个atmega16的能不能去掉DA?

zbjzxc 发表于 2011-3-30 08:41:50

记号~~

liyang0727 发表于 2011-4-5 09:36:36

支持学习一下

LegendSong 发表于 2011-4-20 20:20:58

回复【楼主位】nilxy
-----------------------------------------------------------------------

如果用单声道 去掉一个DA 依然用两个DA的程序 能成功么?

LegendSong 发表于 2011-4-20 20:38:32

回复【楼主位】nilxy
-----------------------------------------------------------------------

对于音乐格式参数有什么限制???

au730 发表于 2011-4-20 21:04:34

mark

aiqinger 发表于 2011-4-23 17:13:52

GOOD

mldcq 发表于 2011-4-24 19:26:29

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

你好sharpufo 风生水起月皎白,能做录音模块吗?
如可以联系我
QQ:370809806

LegendSong 发表于 2011-4-24 19:32:44

http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_633246IEZUT6.jpg
(原文件名:QQ截图未命名.jpg)


请问这两个是干嘛用的????

CHENXIAOTIAN 发表于 2011-4-24 22:46:39

围观

cocotan_2009 发表于 2011-7-23 09:29:46

mark

unckl 发表于 2011-7-24 00:47:36

真是天外有天!

jyjmaster 发表于 2011-7-24 12:58:57

mark

lihp1603 发表于 2011-8-12 01:59:54

音乐播放的好资料啊!呼啦啦,呼啦啦!

sdqwepoi 发表于 2011-8-15 11:00:40

mark

kxjlzl 发表于 2011-8-15 21:06:49

只要是我不知道的,都是我值得学习的。我表示赞一个。

ydy12 发表于 2011-8-26 07:20:20

好资料,正准备做MP3

yeson 发表于 2011-8-31 17:41:41

回复【3楼】sharpufo
回复【2楼】mowin 雾湾
对“音质好”有疑问
-----------------------------------------------------------------------
东东不错。楼主是同道人啊,呵呵。
不过对"音质好"同样表示严重疑问,我做的stm32f103+tda1305,使用独立的有源温补晶振提供i2s信号驱动,耦合和去耦电容都是知名音频专用电容.播放的是16bit的44.1k wav,音质也才过得去,感觉高音有点冲。而且只有直接使用锂聚合物电池直接供电(不经过任何处理)才能听清楚那"毒人的"口水声和"胆味".
对"音质基本没有失真"更是十分怀疑,楼主如果有机会听一下俺的播放器的声音就知道为什么了。俺的配置虽然音质已经比一般的cd要好,(不要怀疑,我比较过的机器有松下便携式cd s700,sony cdp-950,iaudio i7 mp3,app......
-----------------------------------------------------------------------

估计是DAC 1305的缘故吧!我打算照你的方案做,但是DAC换PCM1794+OP267 不过由于刚入门STM32 还望你指教!有源温补晶振是通过mega48输出吧!

stoneee 发表于 2011-9-2 10:00:06

这个东西有点意思。mark!

dgdjfw 发表于 2011-9-2 10:56:47

mark!

canaan 发表于 2011-10-2 01:49:05

楼主的东西不错,但我有个疑问,就是M16D的数据存储空间不是才512吗?于是就提示:
!E <library>(62): area 'bss' not large enough

lxliang09 发表于 2011-11-21 20:18:55

mark

akmp 发表于 2011-11-22 11:10:15

mark!

ytpdq 发表于 2011-11-30 10:31:32

mark!

foolishMan 发表于 2011-11-30 13:27:27

定楼主

woshixinshou 发表于 2012-1-16 16:48:14

zt2012 发表于 2012-1-16 17:14:18

求师傅带我啊。。。。。

our2008 发表于 2012-1-17 20:56:56

mark

caowei1225 发表于 2012-1-20 11:40:39

好资料!

国防大学 发表于 2012-10-20 20:03:05

用cs4330做DA可以吗?

hclin 发表于 2012-11-1 11:50:52

good job !!!

chenchengtao 发表于 2012-11-1 17:03:36

无线电无线电{:sleepy:}{:sleepy:}{:sleepy:}

司马朝阳007 发表于 2012-11-3 14:37:23

牛人呀
页: [1]
查看完整版本: Mega16做的读SD卡的WAV音乐播放器