专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
传个自己写的WAV播放器程序,直接内部DAC输出,无需外接芯片
2019-07-21 08:38
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
9591
49
936
因为内部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文件不正规吧,这些字符标志错了不影响播放的,采样率、声道数、数据位数等关键参数不要出错就行了.不过很怀疑,一般不会出现不按照标准来的文件格式才对,这里错了,若出现字节偏移,那后面的就全错了.
加载中...
首页
上一页
2
3
4
5
6
7
8
9
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
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;
}
---------------------------------
哦,标准的WAV文件头信息中都是按照那样来存放标志信息,可能是你放的WAV文件不正规吧,这些字符标志错了不影响播放的,采样率、声道数、数据位数等关键参数不要出错就行了.不过很怀疑,一般不会出现不按照标准来的文件格式才对,这里错了,若出现字节偏移,那后面的就全错了.
一周热门 更多>