OpenEdv-开源电子网

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

分享STM32F103的MP3软解码,不用任何附加芯片

[复制链接]

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
发表于 2012-12-12 12:34:57 | 显示全部楼层 |阅读模式

由于这几天比较忙,没及时上传代码,不好意思,详见http://www.openedv.com/posts/list/10961.htm

//定时器4中断服务程序  mp3 DAC输出音频,由于我的PA5有它用,所以只输出了单通道。
extern u8 DACbz_mp3;
extern u8 CH_mp3;
extern u16 DApc_mp3;
extern u8 buffer_switch;
void TIM4_IRQHandler(void)
{                 
 if(TIM4->SR&0X0001)//溢出中断
 {
  if(CH_mp3==1)//单声道
  {
   if(buffer_switch==0)
   {
    DAC->DHR12R1=(((short)buffer1[DApc_mp3]+0x8000)>>4);//*10/volume;
//    DAC->DHR12R2=(((short)buffer1[DApc_mp3]+0x8000)>>4);//*10/volume;
    DApc_mp3++;
    DAC->SWTRIGR|=0x03;//软件启动两个通道的转换   
   }else
   {
    DAC->DHR12R1=(((short)buffer2[DApc_mp3]+0x8000)>>4);//*10/volume;
//    DAC->DHR12R2=((buffer2[DApc_mp3]+0x8000)>>4);//*10/volume;
    DApc_mp3++;
    DAC->SWTRIGR|=0x03;//软件启动两个通道的转换 
   }      
  }
  else //if(CH_mp3==2)//立体声    10110010  10110010
  {
   if(buffer_switch==0)
   {
    DAC->DHR12R1=(((short)buffer1[DApc_mp3]+0x8000)>>4);//*10/volume;
    DApc_mp3++;
//    DAC->DHR12R2=(((short)buffer1[DApc_mp3]+0x8000)>>4);//*10/volume;
    DApc_mp3++;

    DAC->SWTRIGR|=0x03;//软件启动两个通道的转换   
   }else
   {
    DAC->DHR12R1=(((short)buffer2[DApc_mp3]+0x8000)>>4);//*10/volume;
    DApc_mp3++;
//    DAC->DHR12R1=((buffer2[DApc_mp3]+0x8000)>>4);//*10/volume;
    DApc_mp3++;
    DAC->SWTRIGR|=0x03;//软件启动两个通道的转换 
   }
  }  
  if(DApc_mp3==2304)    //1帧MP3输出2304数据 
  { DApc_mp3=0;
   DACbz_mp3=1;
  }                             
 }      
 TIM4->SR&=~(1<<0);//清除中断标志位    
}
//通用定时器4中断初始化
//这里始终选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器4!
void Timer4_Init(u16 arr,u16 psc)
{
 RCC->APB1ENR|=1<<2;//TIM4时钟使能   
  TIM4->ARR=arr;  //设定计数器自动重装值//刚好1ms   
 TIM4->SC=psc;  //预分频器7200,得到10Khz的计数时钟
 //这两个东东要同时设置才可以使用中断
 TIM4->DIER|=1<<0;   //允许更新中断    
 TIM4->DIER|=1<<6;   //允许触发中断
              
 TIM4->CR1|=0x01;    //使能定时器4
   MY_NVIC_Init(1,3,TIM4_IRQChannel,2);//抢占1,子优先级3,组2         
}

//DAC通道1输出初始化  要用双通道的还要加上DAC2的初始化
void Dac1_Init(void)
{
 RCC->APB2ENR|=1<<2;    //使能PORTA时钟    
 RCC->APB1ENR|=1<<29;   //使能DAC时钟    
     
 GPIOA->CRL&=0XFFF0FFFF;
 GPIOA->CRL|=0X00000000;//PA4 模拟输入(虽然是输入,但是STM32 内部会连接在DAC 模拟输出上)   

 DAC->CR|=1<<0; //使能DAC1
 DAC->CR|=0<<1; //DAC1输出缓存使能 BOFF1=0
 DAC->CR|=0<<2; //不使用触发功能 TEN1=0
 DAC->CR|=0<<3; //DAC TIM6 TRGO,不过要TEN1=1才行

 DAC->CR|=0<<6; //不使用波形发生
 DAC->CR|=0<<8; //屏蔽、幅值设置
 DAC->CR|=0<<12; //DAC1 DMA不使能   

 DAC->DHR12R1=0;
 DAC->DHR12L1=0;
 DAC->SWTRIGR|=0x01;//通道1软件启动转换
}


void mp3play(void)//MP3播放,这个函数在压缩包里面有
{
// int err;
 u32 br; 
 FRESULT res;

 Outpcmbuf=buffer1;
 LCD_Clear(WHITE);  //黑屏
 hMP3Decoder=MP3InitDecoder();   //初始化解码器
 Dac1_Init();   //用DAC播放   
 res=f_open(&f_MP3,"0:/1.MP3",FA_OPEN_EXISTING|FA_READ);//打开MP3文件

 bytesLeft=0;   //复位计数器
 while(1)
 {          
  res=f_read(&f_MP3,readBuf,READBUF_SIZE,(UINT*)&br); //读出2048个字节
  if(res!=FR_OK||br==0) break;
  readPtr=readBuf;
  bytesLeft = br;        
  buffer_switch=0;   //双缓存切换标志
  init=0;     
  while(1)
  {     
   offset=MP3FindSyncWord(readPtr, bytesLeft);//寻找下一帧头 帧同步
   if(offset<0)break;
   readPtr+=offset; //data start point
   bytesLeft-=offset; //in buffer
   MP3Decode(hMP3Decoder,&readPtr,&bytesLeft,Outpcmbuf,0);//解码
//   err=MP3Decode(hMP3Decoder,&readPtr,&bytesLeft,Outpcmbuf,0);//解码
   if(bytesLeft<READBUF_SIZE) //补充数据
   {
    memmove(readBuf,readPtr,bytesLeft);
    res=f_read(&f_MP3,readBuf+bytesLeft,READBUF_SIZE-bytesLeft,(UINT*)&br);
    if((res)||(br==0)) break;      
    if(br<READBUF_SIZE-bytesLeft)
    memset(readBuf+bytesLeft+br,0,READBUF_SIZE-bytesLeft-br);
    bytesLeft=READBUF_SIZE;
    readPtr=readBuf;               
   }
//   if (err != ERR_MP3_NONE)
//   {
//    switch (err)
//    {
//     case ERR_MP3_INDATA_UNDERFLOW:
//      printf("\r\n  错误1"); //打印
//      break;   
//     case ERR_MP3_MAINDATA_UNDERFLOW:
//      printf("\r\n  错误2"); //打印
//      break;   
//     default:   // 跳过此帧
//      printf("\r\n  错误3"); //打印 
//      break;
//    }
//   }
   MP3GetLastFrameInfo(hMP3Decoder, &mp3FrameInfo); //获得解码
   if(init==0)   //根据MP3帧信息初始化音频接口
   {
//    printf("MP3信息:%x\n",mp3FrameInfo.outputSamps); //打印
    if(mp3FrameInfo.nChans==1)Show_Str(60,120,"声道:   单声道",16,1);
             else Show_Str(60,120,"声道:   立体声",16,1);
    Show_Str(60,140,"采样率:        Hz",16,1);
    LCD_ShowNum(60+80,140,mp3FrameInfo.samprate,5,16);//采样率
    Timer4_Init(1000000/(mp3FrameInfo.samprate),71);//1MHz的计数频率,产生和采样率一样的中断频率 
    CH_mp3=mp3FrameInfo.nChans;   //几声道     
    LCD_ShowNum(60+80,160,mp3FrameInfo.outputSamps,5,16); //打印=2304 //PCM数据个数
    init=1;              //1帧MP3输出2304pcm数据 
   }       
   if(mp3FrameInfo.nChans==1)Convert_Mono(Outpcmbuf);//单声道
   else Convert_Stereo(Outpcmbuf);//立体声
   while(!DACbz_mp3);        //等待转换完成
   DACbz_mp3=0;   //定时器中断会置1
       
   if(buffer_switch == 0)     //双缓存切换
   {
    Outpcmbuf=buffer1;     
    buffer_switch = 1;
   }
   else
   {  
    Outpcmbuf=buffer2;
    buffer_switch = 0;
   }
   LED=!LED;
  }
  f_close(&f_MP3);//关闭文件    
 }
    TIM4->CR1&=~0x01;//关定时器,切歌时不产生噪音
    DAC->CR&=0<<0; //关闭DAC1
}

Mp3Lib.rar

96.26 KB, 下载次数: 4581

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-12-12 13:37:40 | 显示全部楼层
顶楼主。建议楼主放一个帖子里面,不要一个内容发多个帖子。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2012-12-12 14:00:01 | 显示全部楼层
回复【2楼】正点原子:
顶楼主。建议楼主放一个帖子里面,不要一个内容发多个帖子。
---------------------------------
不好意思,下不为例,呵呵。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-1-11 11:02:37 | 显示全部楼层
回复【3楼】ye781205:
---------------------------------
你这个软解码,支持MP3怎么样?有没有不支持的?或者几率多高?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-1-11 14:33:42 | 显示全部楼层
回复【4楼】正点原子:
回复【3楼】ye781205: --------------------------------- 你这个软解码,支持MP3怎么样?有没有不支持的?或者几率多高?
---------------------------------
上面那个比较原始,手上最新的代码能很好的支持320kbps码率的MP3,只要是固定码率,暂时还
没发现不支持的(本人不喜欢MP3,所以MP3文件不多,只测试了100多首),大于320kbps码率和大于
48khz采样率的MP3没测试(因为我没有这样的MP3文件)。
ps:发现没人感兴趣,就没发新代码了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-1-11 15:10:13 | 显示全部楼层
回复【5楼】ye781205:
---------------------------------
MP3最高码率就是320Kbps了
VBR的测试过么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-1-11 16:26:49 | 显示全部楼层
回复【6楼】正点原子:
回复【5楼】ye781205: --------------------------------- MP3最高码率就是320Kbps了 VBR的测试过么? 
---------------------------------
刚刚用天天静听转换了几首CBR-->VBR的MP3测试了一下,
CBR,ABR,VBR都正常播放
但测试数量有限,不代表全部正常

顺便问下老师,
mdk4.12编译后若提示
*** Scatter Error: no default 'Read/Write' range selected
没有默认的读/写的选择范围
是什么原因,怎么办。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-1-11 16:34:30 | 显示全部楼层
嗯,那不错了,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-1-11 16:35:28 | 显示全部楼层
回复【8楼】正点原子:
嗯,那不错了,呵呵。
---------------------------------
顺便问下老师,
mdk4.12编译后若提示
*** Scatter Error: no default 'Read/Write' range selected
没有默认的读/写的选择范围
是什么原因,怎么办
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-1-11 16:42:07 | 显示全部楼层
发源码上来看看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-1-11 16:51:11 | 显示全部楼层
回复【10楼】正点原子:
发源码上来看看。 
---------------------------------
整个工程就一个启动文件加下面这个主函数
int main(void)
{
    while(1)
{   

}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-1-11 18:22:29 | 显示全部楼层
回复【11楼】ye781205:
---------------------------------
那要看你的工程配置了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-1-11 19:12:25 | 显示全部楼层
回复【楼主位】ye781205:
---------------------------------
楼主,DA输出直接接的喇叭吗?是什么喇叭呀?
还是耳机呢?
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-1-11 20:22:06 | 显示全部楼层
回复【13楼】lsj9383:
回复【楼主位】ye781205: --------------------------------- 楼主,DA输出直接接的喇叭吗?是什么喇叭呀? 还是耳机呢?
---------------------------------
可以直接电脑音箱,当然要有放大和功放
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-1-11 21:46:10 | 显示全部楼层
回复【14楼】ye781205:
---------------------------------
楼主,我不太懂音频方面的东西,如果要加大音量的话,是调运放还是调功放啊?
我想回家前做一个小型的扩音器给我妈妈。
指导一下嘛,O(∩_∩)O~
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-1-11 22:28:28 | 显示全部楼层
回复【15楼】lsj9383:
回复【14楼】ye781205: --------------------------------- 楼主,我不太懂音频方面的东西,如果要加大音量的话,是调运放还是调功放啊? 我想回家前做一个小型的扩音器给我妈妈。 指导一下嘛,O(∩_∩)O~
---------------------------------
 DAC->DHR12R1=(((short)buffer2[DApc_mp3]+0x8000)>>4)*10/volume;
中的volume就是音量参数(10---xx),10就是100%音量,50就是20%
硬件调的话一般是衰减功放以前(也可运放以前)的输入信号,调整运放放大倍数的极少
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-1-12 12:12:59 | 显示全部楼层
回复【16楼】ye781205:
---------------------------------
也就是说调功放, 调运放都可以?
回复 支持 反对

使用道具 举报

27

主题

274

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2011-11-2
在线时间
11 小时
发表于 2013-1-14 22:48:27 | 显示全部楼层
跪求分享支持320K丫丫。居然能跑的了好猛呀。
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-1-15 12:49:21 | 显示全部楼层
回复【18楼】zenghi:
跪求分享支持320K丫丫。居然能跑的了好猛呀。
---------------------------------
err=MP3Decode(hMP3Decoder,&readPtr,&bytesLeft,Outpcmbuf,0);//解码
//**********************************************************************************************
if(err != ERR_MP3_NONE)    //错误处理
{
switch (err)
{
case ERR_MP3_INDATA_UNDERFLOW:  
// printf("\r\n  错误1"); //打印
res=f_read(f_MP3,readBuf,READBUF_SIZE,(UINT*)&br); //读出2048个字节
readPtr=readBuf;
bytesLeft = br;
break;
case ERR_MP3_MAINDATA_UNDERFLOW:  //下一次调用解码,将提供更多mainData
// printf("\r\n  错误2"); //打印
break;
default:   // 跳过此帧
// printf("\r\n  错误3"); //打印
if (bytesLeft > 0)
{
bytesLeft --;
readPtr ++;
}
break;
}
}

这是错误处理,提高兼容性
回复 支持 反对

使用道具 举报

16

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-4-15
在线时间
7 小时
发表于 2013-4-28 18:36:03 | 显示全部楼层
正在学习,楼主能发一份新的程序吗?
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2011-1-5
在线时间
6 小时
发表于 2013-5-10 00:07:09 | 显示全部楼层
 你用的什么编译器?有KIEL版的完整代码吗?
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2011-1-5
在线时间
6 小时
发表于 2013-5-10 00:36:27 | 显示全部楼层
能否把完整的代码共享学习,谢谢!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2013-6-2
在线时间
0 小时
发表于 2013-6-2 13:16:06 | 显示全部楼层
回复【楼主位】ye781205:
---------------------------------
请问xmp3_MULSHIFT32涵数是在哪个文件?
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-6-2 19:11:59 | 显示全部楼层
回复【23楼】heyinhe:

回复【楼主位】ye781205:
---------------------------------
请问xmp3_MULSHIFT32涵数是在哪个文件?

---------------------------------
在asmmisc.S文件
asmmisc.S和asmpoly_thumb2.S都要添加
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2013-6-6
在线时间
0 小时
发表于 2013-6-7 20:07:03 | 显示全部楼层
跪求 源代码啊。我在做这个,头疼啊。
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2013-6-6
在线时间
0 小时
发表于 2013-6-8 10:48:08 | 显示全部楼层
求工程文件
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-6-9 11:25:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-8-4 19:57:38 | 显示全部楼层
我现在不玩这个了,由于有很多人私信我要工程文件,所以还是发个综合工程包吧
http://pan.baidu.com/share/link?shareid=2507262670&uk=1846514810
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2013-9-4
在线时间
2 小时
发表于 2013-9-4 21:28:24 | 显示全部楼层
回复【楼主位】ye781205:
---------------------------------
有木有工程文件啊?最近在学习这个很想要!!!!
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2013-9-4
在线时间
2 小时
发表于 2013-10-9 09:22:37 | 显示全部楼层
用KEIL 那个版本。。。。
回复 支持 反对

使用道具 举报

13

主题

314

帖子

0

精华

高级会员

Rank: 4

积分
713
金钱
713
注册时间
2012-7-20
在线时间
102 小时
发表于 2013-10-9 10:42:11 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2015-6-6
在线时间
0 小时
发表于 2015-6-6 21:28:30 | 显示全部楼层
u8   u16   u32  是什么
回复 支持 反对

使用道具 举报

15

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2011-9-16
在线时间
8 小时
发表于 2015-8-4 13:53:49 | 显示全部楼层
楼主,MP3软解码成pcm后用STM32F103的dac输出,后端不需接音频DAC直接接功放就可以输出声音了吧?
你不努力,谁都会看不起你!
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2015-8-12 21:26:34 | 显示全部楼层
回复【33楼】fengcq126:
---------------------------------
是的
回复 支持 反对

使用道具 举报

头像被屏蔽

65

主题

277

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2013-8-11
在线时间
29 小时
发表于 2015-8-13 06:53:20 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2015-9-18
在线时间
1 小时
发表于 2015-9-18 15:31:03 | 显示全部楼层
过去这么久了,楼主还在吗? 我拿你的源码改了下在我的板上运行,发现有很大的杂音啊。出来的波形都是方波来的,有改善的方案吗?
回复 支持 反对

使用道具 举报

226

主题

482

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1680
金钱
1680
注册时间
2012-4-10
在线时间
105 小时
发表于 2015-10-9 18:10:42 | 显示全部楼层
麻烦问下可以支持所有的MP3文件吗
回复 支持 反对

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2015-2-19
在线时间
0 小时
发表于 2015-11-4 08:25:19 | 显示全部楼层
真心感谢楼主
我手上的开发板是stm32+PCM1770
和你之前分享的移植libmad的芯片搭配类似,也就是upmcu的魔笛开发板配置相同,
软解资料实在是少到不得了,十分感谢分享。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2016-6-20
在线时间
4 小时
发表于 2016-8-2 18:03:02 | 显示全部楼层
楼主。。为啥我用串口打印出Outpcmbuf(即解码后的数据)不像是pcm。吧?!数据可以到-1000+。我把wav弄出声来了好多杂音所以想弄下MP3的,可是出不了声,求赐教...
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2016-6-20
在线时间
4 小时
发表于 2016-8-3 14:34:21 | 显示全部楼层
懂了谢谢
回复 支持 反对

使用道具 举报

9

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2013-3-11
在线时间
74 小时
发表于 2016-12-12 23:29:44 | 显示全部楼层
用103RC 48K的RAM一跑就hard fault了,一定要用到50K以上的RAM嘛,看到用的buffef都好大
回复 支持 反对

使用道具 举报

7

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
153
金钱
153
注册时间
2016-3-22
在线时间
41 小时
发表于 2016-12-31 23:07:47 | 显示全部楼层
多谢楼主的帖子解决了我的问题,我的问题就出在DAC->DHR12R1=(((short)buffer2[DApc_mp3]+0x8000)>>4)*10/volume;,为何要先加上0x8000呢,nesdac输出时楼主写的也是+0x80;为何要这样做。

回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2017-1-16 19:03:49 | 显示全部楼层
江南烟雨梦 发表于 2016-12-31 23:07
多谢楼主的帖子解决了我的问题,我的问题就出在DAC->DHR12R1=(((short)buffer2[DApc_mp3]+0x8000)>>4)*10/v ...

音频数据16位+0x8000,8位加0x80,因为音频数据有负数,DAC不能转换输出负电压
回复 支持 反对

使用道具 举报

40

主题

250

帖子

0

精华

高级会员

Rank: 4

积分
854
金钱
854
注册时间
2016-11-13
在线时间
705 小时
发表于 2018-1-13 15:26:26 | 显示全部楼层
最近帮别人做毕设,顶一下
回复 支持 反对

使用道具 举报

19

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
416
金钱
416
注册时间
2016-4-9
在线时间
123 小时
发表于 2018-5-4 10:33:26 | 显示全部楼层
1mhz中断频率 无法接受啊
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2018-6-7
在线时间
1 小时
发表于 2018-6-7 17:00:20 | 显示全部楼层
我用的芯片是stm32f103ret,移植了您的代码NOK,求指点
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-29 10:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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