OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3215|回复: 1

mp3音乐播放器,怎样调整程序,使循环播放(默认)播放变成指定播放一首音乐曲目,并且播完之后停止等待下次命令??谢谢

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2015-11-13
在线时间
0 小时
发表于 2015-11-13 10:55:22 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]以下为源代码,不知道如何修改。使其成为播放指定的一首歌曲,并且在歌曲播放完成之后停止工作。。谢谢各位大神。。[/mw_shl_code] [mw_shl_code=c,true]//??·????? void mp3_play(void) { u8 res; DIR mp3dir; //???? FILINFO mp3fileinfo;//???????? u8 *fn; //?¤?????? u8 *pname; //???·?????????? u16 totmp3num; //????????×??? u16 curindex; //?????±?°?÷?? u8 key; //?ü?? u16 temp; u16 *mp3indextbl; //?????÷??±í while(f_opendir(&mp3dir,"0:/MUSIC"))//?ò???????????? { Show_Str(30,190,240,16,"MUSIC???????í?ó!",16,0); delay_ms(200); LCD_Fill(30,190,240,206,WHITE);//???????? delay_ms(200); } totmp3num=mp3_get_tnum("0:/MUSIC"); //????×????§?????? while(totmp3num==NULL)//????????×?????0 { Show_Str(30,190,240,16,"????????????!",16,0); delay_ms(200); LCD_Fill(30,190,240,146,WHITE);//???????? delay_ms(200); } mp3fileinfo.lfsize=_MAX_LFN*2+1; //?¤??????×??ó?¤?? mp3fileinfo.lfname=mymalloc(SRAMIN,mp3fileinfo.lfsize); //???¤??????????·??????? pname=mymalloc(SRAMIN,mp3fileinfo.lfsize); //?????·??????????·??????? mp3indextbl=mymalloc(SRAMIN,2*totmp3num); //?ê??2*totmp3num??×?????????,??????·??????????÷?? while(mp3fileinfo.lfname==NULL||pname==NULL||mp3indextbl==NULL)//????·??????í { Show_Str(30,190,240,16,"????·????§°?!",16,0); delay_ms(200); LCD_Fill(30,190,240,146,WHITE);//???????? delay_ms(200); } VS_HD_Reset(); VS_Soft_Reset(); vsset.mvol=220; //?????è????????220. mp3_vol_show((vsset.mvol-100)/5); //??????????:100~250,???????±?ò,°???????(vol-100)/5,????,??????0~30 //?????÷?? res=f_opendir(&mp3dir,"0:/MUSIC"); //?ò?????? if(res==FR_OK) { curindex=0;//?±?°?÷????0 while(1)//?????é????±é { temp=mp3dir.index; //?????±?°index res=f_readdir(&mp3dir,&mp3fileinfo); //???????????????????? if(res!=FR_OK||mp3fileinfo.fname[0]==0)break; //?í?ó??/???©????,???? fn=(u8*)(*mp3fileinfo.lfname?mp3fileinfo.lfname:mp3fileinfo.fname); res=f_typetell(fn); if((res&0XF0)==0X40)//????????,?????????????????? { mp3indextbl[curindex]=temp;//?????÷?? curindex++; } } } curindex=0; //??0???????? res=f_opendir(&mp3dir,(const TCHAR*)"0:/MUSIC"); //?ò?????? while(res==FR_OK)//?ò?????? { dir_sdi(&mp3dir,mp3indextbl[curindex]); //??±??±?°?????÷?? res=f_readdir(&mp3dir,&mp3fileinfo); //???????????????????? if(res!=FR_OK||mp3fileinfo.fname[0]==0)break; //?í?ó??/???©????,???? fn=(u8*)(*mp3fileinfo.lfname?mp3fileinfo.lfname:mp3fileinfo.fname); strcpy((char*)pname,"0:/MUSIC/"); //?????·??(????) strcat((char*)pname,(const char*)fn); //?????????????ó?? LCD_Fill(30,190,240,190+16,WHITE); //?????®?°?????? Show_Str(30,190,240-30,16,fn,16,0); //?????è?ú??×? mp3_index_show(curindex+1,totmp3num); key=mp3_play_song(pname); //??·?????MP3 if(key==2) //?????ú { if(curindex)curindex--; else curindex=totmp3num-1; }else if(key<=1)//?????ú { curindex++; if(curindex>=totmp3num)curindex=0;//???©?????±?ò,×??????·???? }else break; //?ú?ú???í?ó } myfree(SRAMIN,mp3fileinfo.lfname); //??·????? myfree(SRAMIN,pname); //??·????? myfree(SRAMIN,mp3indextbl); //??·????? } //??·????ú???¨???è?ú //·?????:0,??????·??ê?? // 1,?????ú // 2,?????ú // 0XFF,?????í?ó?? u8 mp3_play_song(u8 *pname) { FIL* fmp3; u16 br; u8 res,rval; u8 *databuf; u16 i=0; u8 key; rval=0; fmp3=(FIL*)mymalloc(SRAMIN,sizeof(FIL));//?ê?????? databuf=(u8*)mymalloc(SRAMIN,4096); //??±?4096×????????????ò if(databuf==NULL||fmp3==NULL)rval=0XFF ;//?????ê???§°?. if(rval==0) { VS_Restart_Play(); //??????·? VS_Set_All(); //?è???????????? VS_Reset_DecodeTime(); //?????????±?? res=f_typetell(pname); //?????????ó×? if(res==0x4c)//??????flac,????patch { VS_Load_Patch((u16*)vs1053b_patch,VS1053B_PATCHLEN); } res=f_open(fmp3,(const TCHAR*)pname,FA_READ);//?ò?????? if(res==0)//?ò??????. { VS_SPI_SpeedHigh(); //???? while(rval==0) { res=f_read(fmp3,databuf,4096,(UINT*)&br);//????4096??×??? i=0; do//?÷??·????· { if(VS_Send_MusicData(databuf+i)==0)//??VS10XX·??????????? { i+=32; }else { key=KEY_Scan(0); switch(key) { case KEY0_PRES: rval=1; //?????ú break; case KEY2_PRES: rval=2; //?????ú break; case WKUP_PRES: //???????? if(vsset.mvol<250) { vsset.mvol+=5; VS_Set_Vol(vsset.mvol); }else vsset.mvol=250; mp3_vol_show((vsset.mvol-100)/5); //??????????:100~250,???????±?ò,°???????(vol-100)/5,????,??????0~30 break; case KEY1_PRES: //?????? if(vsset.mvol>100) { vsset.mvol-=5; VS_Set_Vol(vsset.mvol); }else vsset.mvol=100; mp3_vol_show((vsset.mvol-100)/5); //??????????:100~250,???????±?ò,°???????(vol-100)/5,????,??????0~30 break; } mp3_msg_show(fmp3->fsize);//???????? } }while(i<4096);//???··???4096??×??? if(br!=4096||res!=0) { rval=0; break;//???ê??. } } f_close(fmp3); }else rval=0XFF;//?????í?ó } myfree(SRAMIN,databuf); myfree(SRAMIN,fmp3); return rval; } [/mw_shl_code]


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-11-13 20:42:29 | 显示全部楼层
很容易改,自己想想。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 04:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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