OpenEdv-开源电子网

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

从VS1003 读取歌曲的码率显示错误,是什么原因?

[复制链接]

4

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2012-4-18
在线时间
0 小时
发表于 2012-6-6 16:35:06 | 显示全部楼层 |阅读模式



效果如上图,不知是什么原因?
RESTART:
Mp3Reset();
  Vs1003SoftReset();

t = SongCount[Song];
CH376WriteVar32( VAR_START_CLUSTER, FileNameBuffer[ t ].DirStartClust );  /* 将当前文件所在上级目录的起始簇号设置为当前簇号,相当于打开上级目录 */
s = CH376FileOpen( FileNameBuffer[ t ].Name );  /* 打开文件 */
if ( s == USB_INT_SUCCESS ) {  /* 成功打开了文件 */
SPI2_SetSpeed(SPI2_SPEED_4);//高速 CH376S
u32FileLen = CH376GetFileSize();  /* 获取文件大小 */
u32DataCnt=0; //清除上一次播放的数据 
                        while (u32DataCnt < u32FileLen)
                        {  
SPI2_SetSpeed(SPI2_SPEED_4);//高速 CH376S
pu8Temp = u8SectorBuf;
                                CH376SecRead(pu8Temp, 1, 0); /*以扇区为单位从当前位置读取数据块,不支持SD卡*/
                                u32DataCnt += 512;

SPI1_SetSpeed(SPI1_SPEED_8); //高速,对VS1003B,设置为4.5M       
               m = 0;  
                                while (m < 512)      //循环发送512个字节 
{
// while (VS_DREQ == 0); //等待DREQ为高 
if (VS_DREQ != 0 && pause==0)
{
VS_XDCS = 0;        /*VS_XDCS = 0,选择vs1003的数据接口 */  
for (j=0; j<32; j++)
                                            {
                                                SPI1_ReadWriteByte(*pu8Temp++);
                                            }
VS_XDCS = 1;   /*VS_XDCS = 1*/ 
m += 32;
       }

if(Remote_Rdy)
  {
key_red=Remote_Process();
// LCD_ShowNum(86,260,key_red,3,16);//显示键值
// LCD_ShowNum(186,260,Remote_Cnt,3,16);//显示按键次数
switch(key_red)
{
  case 2:
LCD_ShowString(66,300, " NEXT ");
Song++;
if (Song>mtotal) Song = 0;
goto RESTART;  //重新回到那里播
case 34:
LCD_ShowString(66,300, " PREV ");
Song--;
if (Song==0) Song = mtotal;
goto RESTART;  //重新回到那里播放
case 168:
LCD_ShowString(66,300, " VOL+ ");
VS_VOLT += Remote_Cnt;
if(VS_VOLT > 250) VS_VOLT = 250;
VS_SET_VOL(VS_VOLT,VS_BASS);
break;
case 224:
LCD_ShowString(66,300, " VOL- ");
VS_VOLT -= Remote_Cnt;
if(VS_VOLT ==0) VS_VOLT =1;
VS_SET_VOL(VS_VOLT,VS_BASS);
break; 
case 144:
LCD_ShowString(66,300, " EQ  ");
VS_BASS += (Remote_Cnt*10);
if(VS_BASS > 150) VS_BASS =0;
VS_SET_VOL(VS_VOLT,VS_BASS);   
break;
case 48:
LCD_ShowString(66,300, " 1  ");
Song = 1;
goto RESTART;  //重新回到那里播放
case 24:
LCD_ShowString(66,300, " 2   ");
Song = 2;
goto RESTART;  //重新回到那里播放
case 122:
LCD_ShowString(66,300, " 3   ");
Song = 3;
goto RESTART;  //重新回到那里播放
case 16:
LCD_ShowString(66,300, " 4   ");
Song = 4;
goto RESTART;  //重新回到那里播放
case 56:
LCD_ShowString(66,300, " 5   ");
Song = 5;
goto RESTART;  //重新回到那里播放
case 90:
LCD_ShowString(66,300, " 6   ");
Song = 6;
goto RESTART;  //重新回到那里播放
case 66:
LCD_ShowString(66,300, " 7   ");
Song = 7;
goto RESTART;  //重新回到那里播放
case 74:
LCD_ShowString(66,300, " 8   ");
Song = 8;
goto RESTART;  //重新回到那里播放
case 82:
LCD_ShowString(66,300, " 9   ");
Song = 9;
goto RESTART;  //重新回到那里播放
case 194:
// LCD_ShowString(56+10,300, " Pause ");
pause=!pause;
// break;//加了break后无暂停此功能,
  
   default: break;
}
   key_red=0;
  }
       }
MP3_Msg_Show(u32FileLen,Song,mtotal);//MP3进度显示/播放时间
                           }




显示
函数如下:加上这个函数时播放码率高的320k的歌曲时会有点卡~


u16 f_kbps=0;//歌曲文件位率
//显示播放时间,比特率 等事信息 
void MP3_Msg_Show(u32 lenth,u16 index,u16 total)
{
static u16 playtime=0;//播放时间标记     
  u16 time=0;// 时间变量
u16 temp=0;

if(f_kbps==0xffff)//未更新过
{
playtime=0;
f_kbps=GetHeadInfo();   //获得比特率
}
POINT_COLOR=GREEN;
BACK_COLOR=MP3COLOR1;

  if(f_kbps)//对位率不为0 的文件
{
time=(lenth/f_kbps)/125; //总时间
}else time=GetDecodeTime(); //对位率为0的文件,得到解码时间
   
time=GetDecodeTime(); //得到解码时间
if(playtime==0)playtime=time;
else if((time!=playtime)&&(time!=0))//1s时间到,更新显示数据
{

playtime=time;//更新时间    
temp=GetHeadInfo(); //获得比特率    
if(temp!=f_kbps)
{
f_kbps=temp;//更新KBPS     
}  
//显示播放时间  
LCD_Show2Num(79,70,time/60,2,16,0);   //分钟
LCD_ShowChar(94,70,':',16,0);
LCD_Show2Num(102,70,time%60,2,16,0);//秒钟
LCD_ShowChar(118,70,'/',16,0);      
//显示总时间
if(f_kbps)time=(lenth/f_kbps)/125;//得到秒钟数   (文件长度(字节)/(1000/8)/比特率=持续秒钟数      
else time=0;//非法位率  
  LCD_Show2Num(126,70,time/60,2,16,0);//分钟
LCD_ShowChar(142,70,':',16,0);
LCD_Show2Num(150,70,time%60,2,16,0);//秒钟    
//显示当前曲目的索引,及总曲目数
  LCD_Show2Num(62,90,index,3,16,0);  //索引
LCD_ShowChar(86,90,'/',16,0);
  LCD_Show2Num(94,90,total,3,16,0); //总曲目  
//显示位率   
  LCD_ShowNum(122,90,f_kbps,3,16);//显示位率
LCD_ShowString(146,90,"Kbps");
   
}
     
}    



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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-6-6 18:11:35 | 显示全部楼层
直接用我们的代码测试呢?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

162

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
406
金钱
406
注册时间
2012-4-4
在线时间
0 小时
发表于 2012-6-7 09:55:55 | 显示全部楼层
码率是不是会跳变?
回复 支持 反对

使用道具 举报

4

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2012-4-18
在线时间
0 小时
 楼主| 发表于 2012-6-7 12:46:59 | 显示全部楼层
回复【3楼】barden:
---------------------------------
是啊~码率刚开始会正常一会~但是接着就开始跳变了 到最后直接显示0了,老兄你有什么高见呢?
回复 支持 反对

使用道具 举报

4

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2012-4-18
在线时间
0 小时
 楼主| 发表于 2012-6-7 12:54:08 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥~还有个现象就是  码率刚开始正常,播放一会儿之后就码率开始 跳变 到最后总得播放时间直接就显示为0了同时播放时间在那一直跳变,还是错误的那种,那个实时播放时间的显示跳变应该 读取的码率错误而且跳变导致的~
程序就是按照原子哥你的那个 精简了的 ~然后VS1003的播放流程是对的,歌曲能正常播放,只是偶尔在码率跳变得太厉害的时候才会有点卡的感觉
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-6-7 14:16:02 | 显示全部楼层
回复【5楼】Ray12345:
---------------------------------
mp3有vbr,会跳动.但是不会变为0.
为0的情况,有可能你播放的是wav?或者midi?
VS1003提供了码率,只有固定码率的MP3或者WMA,才能准确的计算总时间.而遇到VBR的MP3或者其他文件,很可能就导致码率错误.无法得到正确的总时间.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

162

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
406
金钱
406
注册时间
2012-4-4
在线时间
0 小时
发表于 2012-6-7 15:23:54 | 显示全部楼层
回复【3楼】barden:
---------------------------------
这种情况我见到过~~不过就一首歌,我也没特别注意~但是我好像没出现0,就是码率不稳定
你是全部歌曲测试都这样么?还是某一首歌~?
回复 支持 反对

使用道具 举报

4

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2012-4-18
在线时间
0 小时
 楼主| 发表于 2012-6-28 02:04:20 | 显示全部楼层
回复【7楼】barden:
---------------------------------
是每一首的都是一样~整了很久没找到原因,本来想找到原因解决了再发帖的,但是没法,这个问题一直找不到。
每一首还是  实时显示播放时间乱跳 , 播放总时间和码率都是0. 真是怪了~
回复 支持 反对

使用道具 举报

30

主题

210

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2012-11-22
在线时间
12 小时
发表于 2012-11-22 13:10:55 | 显示全部楼层
回复【8楼】Ray12345:
---------------------------------
回复【7楼】barden:
回复【3楼】barden: --------------------------------- 这种情况我见到过~~不过就一首歌,我也没特别注意~但是我好像没出现0,就是码率不稳定 你是全部歌曲测试都这样么?还是某一首歌~?
---------------------------------
VLSI?大陆区一级授权代理商,提供技术支持,QQ839638158?VS1003?VS1053?VS1063?VS1011?VS1005?VS1205?VS1103?VS1033?VS8005?VS8053?VS1000?VS23S010?VS1163?开发板,淘宝店铺http://shop105947990.taobao.com/?QQ2355355257
回复 支持 反对

使用道具 举报

30

主题

210

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2012-11-22
在线时间
12 小时
发表于 2012-11-22 13:11:34 | 显示全部楼层
回复【8楼】Ray12345:
---------------------------------
可以解决
VLSI?大陆区一级授权代理商,提供技术支持,QQ839638158?VS1003?VS1053?VS1063?VS1011?VS1005?VS1205?VS1103?VS1033?VS8005?VS8053?VS1000?VS23S010?VS1163?开发板,淘宝店铺http://shop105947990.taobao.com/?QQ2355355257
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 21:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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