初级会员
- 积分
- 190
- 金钱
- 190
- 注册时间
- 2014-8-15
- 在线时间
- 47 小时
|
通过参考战舰的例程,现在整个系统已经搭建好了,并且可以完成读取U盘中的音乐并且播放的功能,但是在显示歌曲名的时候播放高码率的歌曲(eg:320kbps)就会出现卡顿的现象,感觉就是VS1003断奶情况。感觉上是显示歌曲名占用的时间太长,屏蔽以后果然不卡。请问怎么才可以在播放的时候显示歌曲名的时候不出现卡顿的情况,下面这个是播放音乐的代码,请高手指点迷津。[mw_shl_code=c,true]u8 mp3_play_song(u8 *pname,u8 *fn)
{
FIL* fmp3;
u16 br;
u8 res,rval;
u8 *mp3_buf;
u16 i=0;
u8 key,j=0;
u8 pause_Flag=0;
rval=0;
fmp3=(FIL*)mymalloc(SRAMIN,sizeof(FIL));//申请内存
mp3_buf=(u8*)mymalloc(SRAMIN,512); //开辟512字节的内存区域
if(mp3_buf==NULL||fmp3==NULL) rval=0xFF;//内存申请失败
if(rval==0)
{
VS_Soft_Reset(); //软复位
VS_Set_All(); //设置音量等信息
VS_Reset_DecodeTime(); //复位解码时间
res=f_open(fmp3,(const TCHAR*)pname,FA_READ);//打开文件
if(res==0) //打开成功
{
VS_SPI_SpeedHigh(); //高速
while(rval==0) //读出512个字节
{ //btr是用户要读的数据量,br是实际读取的数据量
res=f_read(fmp3,mp3_buf,512,(UINT*)&br); //这样当判断到br==0时,文件读完
i=0;
do
{
if(!pause_Flag&&VS_Send_MusicData(mp3_buf+i)==0) //给VS1003发送音乐数据
{
i+=32;
}
else
{
printf("其他检测允许...\n");
key=KEY_Scan(0);//不支持连按0
switch(key)
{
case KEY0_PRES:
printf("按键key0..\n");
rval=1; //下一曲
break;
case KEY1_PRES:
printf("按键key1..\n");
rval=2; //上一曲
break;
case KEY2_PRES: //暂停
printf("暂停播放..\n");
rval=0;
pause_Flag=~pause_Flag;
break;
}
}
mp3_msg_show(fmp3->fsize,fn); //显示信息
}while(i<512);
if(br!=512||res!=0)
{
printf("读完了..\n");
rval=0;
break; //读完了
}
}
f_close(fmp3);
}else rval=0xFF;//出现错误
}
myfree(SRAMIN,mp3_buf);
myfree(SRAMIN,fmp3);
return rval;
}[/mw_shl_code]
|
|