新手入门
- 积分
- 17
- 金钱
- 17
- 注册时间
- 2019-4-25
- 在线时间
- 5 小时
|
5金钱
stm32f103zet6、vs1053b音乐播放器的快进快退,我的是按键控制的。看了战舰版的综合实验里面的相关代码不太懂?可以说一下思路吗?这个是战舰版的代码,但是它是触屏的,跟按键控制的不太一样。
res=progressbar_check(audioprgb,&in_obj);
if(res&&((audioprgb->sta&&PRGB_BTN_DOWN)==0))//被按下了,并且松开了,执行快进快退
{
//printf("audioprgb->curpos:%d\r\n",audioprgb->curpos);
lrcdev->curindex=0; //重新设置歌词位置为0.
lrcdev->curtime=0; //重设时间
audioprgb->curpos=audiodev.file_seek(audioprgb->curpos);//快进快退
}
按键按下之后该怎么偏移一定的长度, 偏移了一定长度之后播放的时间怎么能正确的显示,下面是我的代码,出现的现象是:按下按键之后,直接跳会那首歌的开头,但是时间还是继续加下去,播放时间没变。该怎么解决?
case KEY6_PRES: //快进
{
u8 chgch;//文件偏移量
chgsch-=1;
u16 i=0;
FIL* fmp3;
if(chgsch&&((VS_RD_Reg(SPI_STATUS)&0x80)==0))//快进、快退
{
uint32_t sch=0;
uint16_t numb=0;
uint8_t dat[32]={0};
VS_Set_Vol(10);
numb=VS_Get_EndFillByte()&0xff;
for(i=0;i<32;i++)dat[i]=numb;
i=0;
for(i=0;i<2048+32;)
{
if(VS_Send_MusicData(dat)==0)i+=32;
}
VS_Set_Speed(2);
sch=chgsch&(*fmp3).fsize/0xff;
f_lseek(fmp3,sch);
VS_Set_Vol(vsset.mvol);
chgsch=0;
}
}
|
最佳答案
查看完整内容[请看2#楼]
播放时间,你可以根据文件大小和当前读取到的文件指针,来计算时间,不过有一些不准,大体还是对的。 至于你说的快进,你只需要检查按键是否按下,如果按下就偏移一定的位置,就行了,不难的。
|