传个自己写的WAV播放器程序,直接内部DAC输出,无需外接芯片

2019-07-21 08:38发布


因为内部DAC只是12位的,而且我自己焊的红牛板,参考电压可能不太稳定,音质不怎样,只是简单玩玩,用的是双DA输出立体声,支持8位、16位的单双声道WAV音频播放,实测了一下44KHZ采样率及以下的格式,没试过更高的,不知行不行。没做界面,只做了文件信息显示和进度条。把WAV文件放在SD卡根目录下的WAV文件夹下就行。这个只要有内部DAC就能用(大容量系列就有,即E结尾)。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
螃蟹爱虫
1楼-- · 2019-07-24 03:26
龙兄,想请教一下,我现在移植你的程序到STM32F103VE上,现在遇到两个问题,帮忙看一下:
1,在调试程序的时候发现在WAV_Init()初始化中过不了,主要在下面红 {MOD}标注的那一句检查不过,注释掉那一句就能显示正常了,不知龙兄这条语句检查什么。(喟然我还没有连耳塞,还没焊音频头,明天焊个看是否听到音乐声音)
2,在第一点说显示正常其实不完全正确,这里就是出现进度条没有往前走,即没有横着走,而是竖着走了,正找原因。。
谢谢了。
u8 WAV_Init(u8* pbuf)//初始化并显示文件信息
{
 if(Check_Ifo(pbuf,"RIFF"))return 1;//RIFF标志错误
 wav1.wavlen=Get_num(pbuf+4,4);//文件长度,数据偏移4byte
 if(Check_Ifo(pbuf+8,"WAVE"))return 2;//WAVE标志错误
 if(Check_Ifo(pbuf+12,"fmt "))return 3;//fmt标志错误
 wav1.formart=Get_num(pbuf+20,2);//格式类别
 wav1.CHnum=Get_num(pbuf+22,2);//通道数
 CHanalnum=wav1.CHnum;
 wav1.SampleRate=Get_num(pbuf+24,4);//采样率
 wav1.speed=Get_num(pbuf+28,4);//音频传送速率
 wav1.ajust=Get_num(pbuf+32,2);//数据块调速数
 wav1.SampleBits=Get_num(pbuf+34,2);//样本数据位数
 Bitnum=wav1.SampleBits;
 if(Check_Ifo(pbuf+36,"data"))return 4;//data标志错误   1   //注释掉这一句就正常了,不知龙兄这里需要检查什么?
 wav1.DATAlen=Get_num(pbuf+40,4);//数据长度 
 ///////////////////////////////////////////////
 if(wav1.wavlen<0x100000)
 {
  LCD_ShowNum(170,30,(wav1.wavlen)>>10,3,16);//文件长度
  LCD_ShowString(200,30,"Kb");
 }
 else
 {
  LCD_ShowNum(170,30,(wav1.wavlen)>>20,3,16);//文件长度
  LCD_ShowString(200,30,"Mb");
 }
 if(wav1.formart==1)LCD_ShowString(170,50,"WAV PCM");
 if(wav1.CHnum==1)LCD_ShowString(170,70,"single");
 else LCD_ShowString(170,70,"stereo");
 LCD_ShowNum(170,90,(wav1.SampleRate)/1000,3,16);//采样率
 LCD_ShowString(200,90,"KHz");
 LCD_ShowNum(170,110,(wav1.speed)/1000,3,16);//传送速度
 LCD_ShowString(200,110,"bps");
 LCD_ShowNum(177,130,wav1.SampleBits,2,16);//样本数据位数
 LCD_ShowString(200,130,"bit");
 return 0;
}
螃蟹爱虫
2楼-- · 2019-07-24 06:52
第2个问题已找到原因解决了,还有第一个问题木知道。。。。
正点原子
3楼-- · 2019-07-24 08:04
什么时候你也搞个玩玩?
螃蟹爱虫
4楼-- · 2019-07-24 09:38
 精彩回答 2  元偷偷看……
螃蟹爱虫
5楼-- · 2019-07-24 14:56
说实话,想玩一下I2S+DAC芯片,可是现在好忙,抽不开身。。有心无力啊。
骤雨龙元
6楼-- · 2019-07-24 16:00
回复【27楼】螃蟹爱虫:
---------------------------------
哦,标准的WAV文件头信息中都是按照那样来存放标志信息,可能是你放的WAV文件不正规吧,这些字符标志错了不影响播放的,采样率、声道数、数据位数等关键参数不要出错就行了.不过很怀疑,一般不会出现不按照标准来的文件格式才对,这里错了,若出现字节偏移,那后面的就全错了.

一周热门 更多>