OpenEdv-开源电子网

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

原子哥!!音乐播放器实验中如何播放指定的一个音频?

[复制链接]

5

主题

7

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2016-4-19
在线时间
4 小时
发表于 2016-4-26 22:15:41 | 显示全部楼层 |阅读模式
4金钱
我想在main函数里调用mp3_play_song 这个函数来播放指定的一个音频,不知道怎么用啊。



main.c里:
尝试着这样写了下
strcpy((char*)pname,"0:/MUSIC");  //复制路径(目录)
  strcat((char*)pname,"C3");
   mp3_play_song(pname);

或者
strcat((char*)pname,"0:/MUSIC/C3.mp3" );
   mp3_play_song(pname);

或者
pname="0:/MUSIC/C3.mp3" ;
mp3_play_song(pname);

或者
定义一个key
u8 key=0
strcat((char*)pname,"0:/MUSIC/C3.mp3" );
  key= mp3_play_song(pname);
都没用啊啊啊啊啊 啊啊啊啊


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


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-5-1 12:22:05 | 显示全部楼层
仿真跟踪一下,就知道问题在哪里了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 00:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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