初级会员
- 积分
- 187
- 金钱
- 187
- 注册时间
- 2012-11-12
- 在线时间
- 22 小时
|
楼主 |
发表于 2013-5-11 00:39:26
|
显示全部楼层
回复【2楼】正点原子:
---------------------------------
if(res==0)//打开成功.
{
VS_SPI_SpeedHigh(); //高速
while(rval==0)
{
res=f_read(mp3dev->fmp3,databuf,4096,(UINT*)&br); //读出readlen个字节
i=0;
do//主播放循环
{
if((VS_Send_MusicData(databuf+i)==0)&&(mp3dev->sta&(1<<5))==0)//给VS10XX发送音频数据
{
i+=32;
}
else
{
key=KEY_Scan(0);
switch(key)
{
case://省略音量调节函数
case KEY_RIGHT://上一曲或者下一曲或长按快进(暂时没快退)
case KEY_LEFT:
while(1)
{
key=KEY_Scan(1);
if(key==KEY_RIGHT)//判断还是按下时进入(快进)
{
t++;
if(t==10)//当t为10时设置一次MP3的位置
{ t=0;
k=k+mp3dev->fmp3->fsize/10; //快进一次的进度是总长度的1/10
if(k>mp3dev->fmp3->fsize)k=mp3dev->fmp3->fsize; f_lseek(mp3dev->fmp3,k);//快速定位
i=4098;//为了方便跳出while循环
break;
}
}
else
{
mp3dev->sta|=1<<0;//在歌曲播完后只有该位为0才进入顺序或随机程序
if(systemset.mp3mode==1)//随机播放
{
mp3dev->curindex=app_get_rand(mp3dev->mfilenum);//得到下一首歌曲的索引
rval=1;
}else
{
if(key==KEY_LEFT)//上一曲
{
if(mp3dev->curindex>1)mp3dev->curindex--;//减1是因为mp3dev->curindex最小值为1,为1代表第一首歌。
else mp3dev->curindex=mp3dev->mfilenum;
rval=1;
}else
{
if(mp3dev->curindex<(mp3dev->mfilenum))mp3dev->curindex++;
else mp3dev->curindex=0;
rval=2;
}
break;
}
}
break;
case KEY_SURE://播放/暂停
if(mp3dev->sta&(1<<5))//是暂停
{
mp3dev->sta&=~(1<<5);//取消暂停
}else//暂停状态
{
mp3dev->sta|=1<<5;//标记暂停
}
break;
case KEY_BACK://音效模式键
OLED_Clear();
mp3_mode();
OLED_Clear();
mp3_load_ui();//加载主界面
mp3_index_show(0,52,mp3dev->curindex,mp3dev->mfilenum); //显示曲目数
break;
}
mp3_msg_show(mp3dev->fmp3->fsize);
}
}while(i<4096);//循环发送4096个字节
if(br!=4096||res!=0)
{
break;//读完了.
}
}
f_close(mp3dev->fmp3);
}
程序参考了综合程序,在上面快进扫描中只是示意性的看能否实现快进功能,所以每次当t==10时,就快进总长度的1/10.
出现的问题:当我长按时,歌曲就从头开始唱起。 |
|