}
下面是对比时间显示歌词
//显示播放时间,比特率 等事信息
void MP3_Msg_Show(u32 lenth,u16 index,u16 total,u8 yesno,u8 popo)
{
FileInfoStruct tempp;
static u16 playtime=0;//播放时间标记
u16 time=0;// 时间变量
u16 temp=0;
u8 lrc_buf[70];
u16 i=0,ii;
if(!yesno)
{
if(f_kbps==0xffff)//未更新过
{
playtime=0;
f_kbps=GetHeadInfo(); //获得比特率
}
time=GetDecodeTime(); //得到解码时间
if(time!=playtime)//1s时间到,更新显示数据
{
playtime=time;//更新时间
temp=GetHeadInfo(); //获得比特率
if(temp!=f_kbps)
{
f_kbps=temp;//更新KBPS
time=((float)lenth/f_kbps)/125;//更新时间
}
for(i=0;i<100;i++)//一般歌词都会在100句以内这句话判断这个时间点对应的歌词偏移位置
{
if(time==lrc_yy[0])
lrc__i=i;
}
i=0;
if(time==lrc_yy[lrc__i][0])//时间与播放时间吻合 显示歌词
{
SD_Read_Bytes(lrc_yy[lrc__i][1],lrc_buf,lrc_yy[lrc__i][2],50);//读取歌词偏移位置
lrc__i++;
while(i<51)
{
if(lrc_buf=='\n'||lrc_buf=='\r'){ lrc_buf=0;break;}
if(lrc_buf==']'&&lrc_buf!='[')ii=i+1;
i++ ;
}
tempp.F_Type=T_BMP;
tempp.F_StartCluster=sys_icoo[0];
if(popo==2)
AI_LoadPicFile(&tempp,0,40,241,60);
else
LCD_Fill(0,40,240,58,BLACK);
POINT_COLOR=MAGENTA;
Show_Str(0,40,&lrc_buf[ii],16,popo);
POINT_COLOR=YELLOW;
}
//显示播放时间
//Read_Temp_Color(60,110,150,130);//先读出之前的颜色值
//Reshow_Temp_Color(60,110,150,130);
LCD_Show2Num(60,110,time/60,2,16,0); //分钟
LCD_ShowChar(60+16,110,':',16,0);
LCD_Show2Num(60+24,110,time%60,2,16,0);//秒钟
LCD_ShowChar(60+40,110,'/',16,0);
//显示总时间
if(f_kbps)time=(lenth/f_kbps)/125;//得到秒钟数 (文件长度(字节)/(1000/8)/比特率=持续秒钟数
else time=0;//非法位率
LCD_Show2Num(60+48,110,time/60,2,16,0);//分钟
LCD_ShowChar(60+64,110,':',16,0);
LCD_Show2Num(60+72,110,time%60,2,16,0);//秒钟
//显示当前曲目的索引,及总曲目数
LCD_Show2Num(60+0,130,index,3,16,1); //索引
LCD_ShowChar(60+24,130,'/',16,1);
LCD_Show2Num(60+32,130,total,3,16,1); //总曲目
//显示位率
//LCD_ShowNumm(60+60,130,f_kbps,3,16);//显示位率
//LCD_ShowString(60+84,130,"Kbps");
//LCD_ShowChar(60+84,130,"Kbps",16,1);
}
}
}