OpenEdv-开源电子网

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

正点原MINI版3.0驱动MP3

[复制链接]

80

主题

188

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2013-8-16
在线时间
37 小时
发表于 2015-5-25 11:01:10 | 显示全部楼层 |阅读模式
5金钱
大家好,我买了一块MP3模块时钟正点原子开mini发板(2.0)配套的MP3模块,使用的是VS1003。现在使用正点原子MINI开发板(3.0)和这块板配套的例子程序来驱动我的MP3模块,怎么一直提示找不到SD卡中的存MP3音乐文件的文件夹。我的SD中根目录下已有一个文件MUSIC,文件夹中也存放了两个音乐文件。可是始终都是找不到MUSIC这个文件夹。请问问题处在什么地方了,我试了好几次,该目标文件夹,始终是找不到。请知道这块的大神们指点指点,谢谢。有点急

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

使用道具 举报

80

主题

188

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2013-8-16
在线时间
37 小时
 楼主| 发表于 2015-5-25 11:02:34 | 显示全部楼层
下面就是控制MP3播放的函数代码:
//播放音乐
void mp3_play(void)
{
u8 res;
  DIR mp3dir;   //目录
FILINFO mp3fileinfo;//文件信息
u8 *fn;    //长文件名
u8 *pname; //带路径的文件名
u16 totmp3num;  //音乐文件总数
u16 curindex; //图片当前索引
u8 key; //键值   
  u16 temp;
u16 *mp3indextbl; //音乐索引表 
  while(f_opendir(&mp3dir,"0:\MUSIC"))//打开图片文件夹
  {     
Show_Str(60,210,240,16,"MUSIC文件夹错误!",16,0);
delay_ms(200);   
LCD_Fill(60,210,240,226,WHITE);//清除显示      
delay_ms(200);   
}    
totmp3num=mp3_get_tnum("0:/MUSIC"); //得到总有效文件数
   while(totmp3num==NULL)//音乐文件总数为0
  {     
Show_Str(60,210,240,16,"没有音乐文件!",16,0);
delay_ms(200);   
LCD_Fill(60,210,240,226,WHITE);//清除显示      
delay_ms(200);   
}    
   mp3fileinfo.lfsize=_MAX_LFN*2+1; //长文件名最大长度
mp3fileinfo.lfname=mymalloc(mp3fileinfo.lfsize);//为长文件缓存区分配内存
  pname=mymalloc(mp3fileinfo.lfsize); //为带路径的文件名分配内存
  mp3indextbl=mymalloc(2*totmp3num); //申请2*totmp3num个字节的内存,用于存放音乐文件索引
  while(mp3fileinfo.lfname==NULL||pname==NULL||mp3indextbl==NULL)//内存分配出错
  {     
Show_Str(60,210,240,16,"内存分配失败!",16,0);
delay_ms(200);   
LCD_Fill(60,210,240,226,WHITE);//清除显示      
delay_ms(200);   
}  
VS_HD_Reset();
VS_Soft_Reset();
vsset.mvol=200; //默认设置音量为210.
mp3_vol_show((vsset.mvol-100)/5); //音量限制在:100~250,显示的时候,按照公式(vol-100)/5,显示,也就是0~30   
//记录索引
    res=f_opendir(&mp3dir,"0:/MUSIC"); //打开目录
if(res==FR_OK)
{
curindex=0;//当前索引为0
while(1)//全部查询一遍
{
temp=mp3dir.index; //记录当前index
        res=f_readdir(&mp3dir,&mp3fileinfo);        //读取目录下的一个文件
        if(res!=FR_OK||mp3fileinfo.fname[0]==0)break; //错误了/到末尾了,退出   
      fn=(u8*)(*mp3fileinfo.lfname?mp3fileinfo.lfname:mp3fileinfo.fname);  
res=f_typetell(fn);
if((res&0XF0)==0X40)//取高四位,看看是不是音乐文件
{
mp3indextbl[curindex]=temp;//记录索引
curindex++;
}     

}   
    curindex=0; //从0开始显示
    res=f_opendir(&mp3dir,(const TCHAR*)"0:/MUSIC");  //打开目录
while(res==FR_OK)//打开成功
{
dir_sdi(&mp3dir,mp3indextbl[curindex]); //改变当前目录索引    
        res=f_readdir(&mp3dir,&mp3fileinfo);        //读取目录下的一个文件
        if(res!=FR_OK||mp3fileinfo.fname[0]==0)break; //错误了/到末尾了,退出
      fn=(u8*)(*mp3fileinfo.lfname?mp3fileinfo.lfname:mp3fileinfo.fname);  
strcpy((char*)pname,"0:/MUSIC/"); //复制路径(目录)
strcat((char*)pname,(const char*)fn);   //将文件名接在后面
  LCD_Fill(60,210,240,210+16,WHITE); //清除之前的显示
Show_Str(60,210,240-60,16,fn,16,0); //显示歌曲名字 
mp3_index_show(curindex+1,totmp3num);
key=mp3_play_song(pname);    //播放这个MP3    
if(key==KEY1_PRES) //上一曲
{
if(curindex)curindex--;
else curindex=totmp3num-1;
  }else if(key==KEY0_PRES)//下一曲
{
curindex++;    
if(curindex>=totmp3num)curindex=0;//到末尾的时候,自动从头开始
  }else break; //产生了错误   
}    
myfree(mp3fileinfo.lfname); //释放内存     
myfree(pname); //释放内存     
myfree(mp3indextbl); //释放内存  
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-25 17:33:53 | 显示全部楼层
换个卡试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

80

主题

188

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2013-8-16
在线时间
37 小时
 楼主| 发表于 2015-5-27 09:03:37 | 显示全部楼层
是换一块SD卡?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-27 23:16:59 | 显示全部楼层
回复【4楼】星空:
---------------------------------
是的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 22:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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