OpenEdv-开源电子网

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

MP3例程疑问,等原子哥解答

[复制链接]

10

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-10-20
在线时间
0 小时
发表于 2014-5-27 05:39:17 | 显示全部楼层 |阅读模式
5金钱
以下摘自例程中一段:
//播放一曲指定的歌曲            
//返回值:0,正常播放完成
// 1,下一曲
//       2,上一曲
//       0XFF,出现错误了
u8 mp3_play_song1(u8 *pname)
{  

  FIL* fmp3;
u16 br;
u8 res,rval;  
u8 *databuf;     
u16 i=0; 
u8 key;      
static u8 pause=0; //暂停标志

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);//打开文件
//printf("sram :%d",mem_perused(0));
if(res==0)//打开成功.

VS_SPI_SpeedHigh(); //高速
   ////////////////////
Text_Buf[0]='A';
Text_Buf[4097]='A';
///////////////////////
while(rval==0)
{
res=f_read(fmp3,databuf,4096,(UINT*)&br);//读出4096个字节  
i=0;

do//主播放循环
   {
//if((VS_Send_MusicData(databuf+i)==0)&&(pause==0))//给VS10XX发送音频数据
if(pause==0)
{
i++;
//////////////////////////////
Text_Buf[1+i]=databuf;
//////////////////////////////
}else   
{
key=KEY_Scan();
switch(key)
{
case KEY0_VAL:
rval=KEY0_VAL; //下一曲
break;
case KEY1_VAL:
rval=KEY1_VAL; //上一曲
break;
case KEY_UP_VAL:   //暂停/播放
pause = !pause;
break;

default:
break;
}
mp3_msg_show(fmp3->fsize);//显示信息    
}  
}while(i<4096);//循环发送4096个字节 

if(br!=4096||res!=0)
{
rval=KEY0_VAL;
break;//读完了.

//////////////////////////////////////////////////
MYDMA_Enable(DMA1_Channel4);//开始一次DMA传输
//////////////////////////
    if(DMA1->ISR&(1<<13))//等待通道4传输完成标志位
{
DMA1->IFCR|=1<<13;//清除通道4传输标志位
break;
}    
//////////////////////////////////////////////////////
}
f_close(fmp3);
}else rval=0XFF;//出现错误    
}      
myfree(SRAMIN,databuf);        
myfree(SRAMIN,fmp3);
return rval;        
}
问题1:红色部分每次只发送4096个字节?
2、我用串口查看,每次只收到音频数据的4096个字节就没了下文了,这是什么情况?我感觉这样一个文件都没读完吧
3、从大体上我理解成这样的,只要没按键(下一首、上一首)就不会跳出循环,应该不停地每次取4096个字节的音频数据,但实际上,开发板显示间隔一会儿就立马切换了,根本就不知道有没有发完一首音频数据,


最佳答案

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

回复【3楼】爱在暖晴天: --------------------------------- if(br!=4096||res!=0) { rval=KEY0_VAL; break;//读完了.  }
求学不怕苦才能坚持到彼岸
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-27 05:39:18 | 显示全部楼层
回复【3楼】爱在暖晴天:
---------------------------------
if(br!=4096||res!=0)
{
rval=KEY0_VAL;
break;//读完了. 
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-10-20
在线时间
0 小时
 楼主| 发表于 2014-5-27 11:40:36 | 显示全部楼层
自己顶,求大神分析下原因
求学不怕苦才能坚持到彼岸
回复

使用道具 举报

10

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-10-20
在线时间
0 小时
 楼主| 发表于 2014-5-27 12:00:05 | 显示全部楼层
在做mp3播放实验的时候,在mp3player.c文件中如何得知一首音频数据读完了?有什么标志位没有
求学不怕苦才能坚持到彼岸
回复

使用道具 举报

10

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-10-20
在线时间
0 小时
 楼主| 发表于 2014-5-28 15:51:08 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
多谢原子哥解答!
求学不怕苦才能坚持到彼岸
回复

使用道具 举报

3

主题

35

帖子

0

精华

高级会员

Rank: 4

积分
916
金钱
916
注册时间
2014-4-28
在线时间
75 小时
发表于 2014-9-11 11:44:53 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,如何播放指定文件名的MP3呢
来路长   前程湮   待从头拨断琴弦
回复

使用道具 举报

3

主题

35

帖子

0

精华

高级会员

Rank: 4

积分
916
金钱
916
注册时间
2014-4-28
在线时间
75 小时
发表于 2014-9-11 12:40:38 | 显示全部楼层
回复【6楼】清风莞尔:
---------------------------------
用战舰开发板实现播放音乐,比如说,我要播放的文件名为"01.MP3",那个pname应该怎么写,u8 mp3_play_song(u8 *pname)
来路长   前程湮   待从头拨断琴弦
回复

使用道具 举报

3

主题

35

帖子

0

精华

高级会员

Rank: 4

积分
916
金钱
916
注册时间
2014-4-28
在线时间
75 小时
发表于 2014-9-11 13:07:57 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
已经知道怎么弄了,原子哥的程序就是强大!
来路长   前程湮   待从头拨断琴弦
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-9-13
在线时间
0 小时
发表于 2014-9-13 20:19:05 | 显示全部楼层
回复【8楼】清风莞尔:
---------------------------------
请问怎么弄的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-1 08:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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