OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4459|回复: 2

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

[复制链接]

5

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2016-7-18
在线时间
32 小时
发表于 2016-11-23 17:15:15 | 显示全部楼层 |阅读模式
4金钱
最近在研究音乐播放器,可是没有进展,看了原子的例程,有所了解,可是却越到问题,就是如何解决播放指定的音频这个问题,
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;              
}

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

最佳答案

查看完整内容[请看2#楼]

指定音频可以根据文件名,然后打开所在的文件夹轮流打开文件比对文件名,就可以找到你需要打开的文件了。或者直接建一个文件夹,打开文件夹然后就是那个你指定的文件了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

185

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2729
金钱
2729
注册时间
2015-12-27
在线时间
469 小时
发表于 2016-11-23 17:15:16 | 显示全部楼层
指定音频可以根据文件名,然后打开所在的文件夹轮流打开文件比对文件名,就可以找到你需要打开的文件了。或者直接建一个文件夹,打开文件夹然后就是那个你指定的文件了
回复

使用道具 举报

5

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2016-7-18
在线时间
32 小时
 楼主| 发表于 2016-11-23 19:54:26 | 显示全部楼层
钩月黄昏 发表于 2016-11-23 18:48
指定音频可以根据文件名,然后打开所在的文件夹轮流打开文件比对文件名,就可以找到你需要打开的文件了。或 ...

谢谢,我试试看,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 00:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表