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) 不错 对“音质好”有疑问 回复【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播放. DAC0832能叫音质超好?
还好这个帖子不是放在音响区,不然肯定被口水淹死。
看在LZ发在AVR区的份上,大家就悠着点吧。 :) 楼主确实有才!不过DA0832是8位DA,哪来音质好丫?? 好资料! 回复【3楼】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
兄台能分享一下字库和unicode转换表吗?
yy一下PCM1704K, DF1704+PCM1704K*2价钱不低啊
我想找AK4390/AK4397不知道哪里有 文件在这儿
点击此处下载
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;
} 非常感谢
我准备在UC3B0256+LCD12864上试用 这个是横向取模的,如果是LCD12864估计要竖向取模的。
给:
GBK字库,有横向、竖向及寻址公式ourdev_582271WUDVT0.rar(文件大小:763K) (原文件名:16点阵GBK字库.rar) LCD12864是竖向低位在上的 回复【10楼】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
我明天试验一下,看来我一直头痛的字库问题有希望解决
再次感谢 回复【7楼】mowin 雾湾
回复【3楼】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
兄台能分享一下字库和unicode转换表吗?
yy一下pcm1704k, df1704+pcm1704k*2价钱不低啊
我想找ak4390/ak4397不知道哪里有
-----------------------------------------------------------------------
千把块还消受得起,难的是模拟部分和外观的设计."舍不得孩子套不住狼"哈.
不过为了向便携性妥协,而且仅是个人业余DIY,不会采用非常复杂的设计,如果发现PCM1792或者PCM1704设计需要复杂的后期处理或者太大的功耗,会考虑重新用TDA1305,音质达到入门级CD的水准还是可以的,毕竟这片子声音还是不错的.因为已经包含运放,后期滤波处理非常简洁.DAC部分功耗在50ma左右.
不过TDA1305不好调声,就因为其后期处理简洁。 回复【3楼】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
唉,真是不好意思,光顾着自我陶醉了,没注意措辞。实际上音质只能跟卡带录音机相当,带上耳机仔细听有明显的背景噪声,我测试过,跟DA无关,是功放TDA2822的问题吧,事实上,用8位量化的确不能保音质,但是用16位的话,歌曲文件又显得太大了,差不多有四五十兆啊 回复【4楼】gzhuli 咕唧霖
dac0832能叫音质超好?
还好这个帖子不是放在音响区,不然肯定被口水淹死。
看在lz发在avr区的份上,大家就悠着点吧。 :)
-----------------------------------------------------------------------
抱歉,音质的确一般,当时的情况是刚学avr,迫切想用avr做个东西,于是就做了这个 回复【5楼】fm993
楼主确实有才!不过da0832是8位da,哪来音质好丫??
-----------------------------------------------------------------------
怎么说呢,其实在我们这个破小城市,很多的东西都买不到,我这边的电子市场里DA我只见到DAC0832,说实话这边的市场比深圳要落后10年,真的,这边的单片机出了51、avr、pic就没别的,而且还都没有贴片,杯具啊 mark mark,昨天刚刚在《无线电》上看见! 回复【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的文件读取速度,再加上其他的开销,软件上要有很好的优化才能达到吧。 mark 回复【3楼】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
看了这个很感兴趣,有开好的板吗?想弄一个玩玩!我用43122或者1794做解码芯片(可以提供这2种芯片试验), 谢谢! 同问,楼主做好板了么,想玩一个 回复【21楼】wanjian
回复【3楼】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
看了这个很感兴趣,有开好的板吗?想弄一个玩玩!我用43122或者1794做解码芯片(可以提供这2种芯片试验), 谢谢!
-----------------------------------------------------------------------
上面已经说明,是开发板加DAC板拼起来的。我现在DAC换另一块PCM1793的,还没有画PCB,估计也不会很快,最近时间有点紧。 mark 都是牛人!!! 我用M16+DAC0832+LM386,音质一般,噪音大。 我在试,,声音出来了,但音调变了,感觉是读SD卡数据不够快,
请问大家是怎么读取SD卡数据,速度会快点呢?
我看楼主程序是这样的,先读512Byte,然后由中断去播放,播放中继续读下一个512BYTE数据,
我也按这样去试过,觉得还是慢,想不明白 现在就是原来是女声的,出来变男声了,而且不清晰 附件是源程序
点击此处下载 ourdev_613716XDCFIC.rar(文件大小:28K) (原文件名:S-140.rar) 学习了! 回复【楼主位】nilxy
-----------------------------------------------------------------------
您好,我想试试做做您这个mp3,但是遇到了些问题,我是个新手,能帮帮我吗?我的qq 532529278 很不错
! 这个atmega16的能不能去掉DA? 记号~~ 支持学习一下 回复【楼主位】nilxy
-----------------------------------------------------------------------
如果用单声道 去掉一个DA 依然用两个DA的程序 能成功么? 回复【楼主位】nilxy
-----------------------------------------------------------------------
对于音乐格式参数有什么限制??? mark GOOD 回复【3楼】sharpufo 风生水起月皎白
-----------------------------------------------------------------------
你好sharpufo 风生水起月皎白,能做录音模块吗?
如可以联系我
QQ:370809806 http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_633246IEZUT6.jpg
(原文件名:QQ截图未命名.jpg)
请问这两个是干嘛用的???? 围观 mark 真是天外有天! mark 音乐播放的好资料啊!呼啦啦,呼啦啦! mark 只要是我不知道的,都是我值得学习的。我表示赞一个。 好资料,正准备做MP3 回复【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输出吧! 这个东西有点意思。mark! mark! 楼主的东西不错,但我有个疑问,就是M16D的数据存储空间不是才512吗?于是就提示:
!E <library>(62): area 'bss' not large enough mark mark! mark! 定楼主 好 求师傅带我啊。。。。。 mark 好资料! 用cs4330做DA可以吗? good job !!! 无线电无线电{:sleepy:}{:sleepy:}{:sleepy:} 牛人呀
页:
[1]