音乐播放器实验中如何播放指定的一个音频

2019-07-20 18:39发布

最近在研究音乐播放器,可是没有进展,看了原子的例程,有所了解,可是却越到问题,就是如何解决播放指定的音频这个问题,
mp3_play_song函数的定义:

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;              
}

主要提取指定文件的什么信息,才能打开播放,求答

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。