数码之家

 找回密码
 立即注册
搜索
查看: 912|回复: 42

[STM] 用SMT32做了一个全损音乐播放器《源码上传》

[复制链接]
发表于 2024-3-14 17:49:45 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 595953427@qq 于 2024-3-15 18:15 编辑

经过几天的研究和代码移植,全损音乐播放器终于有声音了

外围电路简单,只需要外接SD卡存放音乐文件就行了,不需要音频解码芯片,使用CPU软解WAV,目前只支持.wav文件
芯片可以使用STM32F103xE,需要有64K的SRAM,虽然没有全部用完,需要有SD卡接口,使用SDIO方式连接
采用FreeRTOS系统。
后面有时间了再研究让它支持.mp3文件。

wav解码后的声音从PA4和PA5输出

下面是烧录文件,芯片采用外部8MHz晶振,源码在13楼

Objects.rar (493.56 KB, 下载次数: 1)



我是从这里下载的开源代码,感谢原作者的开源

https://gitee.com/Ficusdx/mp3-player-based-on-stm32

基于单片STM32的mp3解码器wav播放器: SD卡使用,在fatfs的管理下,可在根目录选择文件,可使用任意功放(非解码)驱动扬声器,使用开源代码minimp3解码器把mp3文件解码成pcm数据,再创建wav文件,可解码wav文件,使用STM32外设12位DAC播放音乐。 (gitee.com)

基于单片STM32的mp3解码器wav播放器: SD卡使用,在fatfs的管理下,可在根目录选择文件,可使用任意功放(非解码)驱动扬声器,使用开源代码minimp3解码器把mp3文件解码成pcm数据,再创建wav文件,可解码wav文件,使用STM32外设12位DAC播放音乐。 (gitee.com)

IMG_20240314_175025.jpg

打赏

参与人数 3家元 +150 收起 理由
网络孤客 + 30 優秀文章
家睦 + 90
不长叶子的树 + 30

查看全部打赏

发表于 2024-3-14 18:28:36 | 显示全部楼层
这个能加上网络才有吸引力
回复 支持 反对

使用道具 举报

发表于 2024-3-14 19:12:06 | 显示全部楼层
jbm1 发表于 2024-3-14 18:28
这个能加上网络才有吸引力

这个单片机可以加网络的,外部加一个螃蟹芯片就行了,比如8201f
回复 支持 反对

使用道具 举报

发表于 2024-3-14 20:05:23 | 显示全部楼层
音乐播放器  性价比不高
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-14 20:07:31 | 显示全部楼层
gl542400 发表于 2024-3-14 20:05
音乐播放器  性价比不高

不只是性价比不高,关键是音质太差
回复 支持 反对

使用道具 举报

发表于 2024-3-15 09:52:46 来自手机浏览器 | 显示全部楼层
没试过stm,倒是用esp32玩过蓝牙传输的。
回复 支持 反对

使用道具 举报

发表于 2024-3-15 09:58:01 | 显示全部楼层
本帖最后由 inthsunshine 于 2024-3-15 10:19 编辑

我没用fatfs,自己写fat32支持,中文文件名现在能显示,昨晚测试了长文件名,能提取出来,unicode字库还没弄,所以长文件名还没显示


学单片机,做播放器是挺好的一个实践,既能学习又有乐趣


回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-15 11:02:53 | 显示全部楼层
STM32的DAC输出音频,音质很差,怎么破?输出正弦波的时候波形还是很正常的,输出音频信号的时候质量就很差了
回复 支持 反对

使用道具 举报

发表于 2024-3-15 11:22:27 | 显示全部楼层
下一节:使用过音频DAC播放音乐
回复 支持 反对

使用道具 举报

发表于 2024-3-15 11:34:57 | 显示全部楼层
这个玩不转啊
回复 支持 反对

使用道具 举报

发表于 2024-3-15 11:59:30 | 显示全部楼层
是全无损音乐播放器吧?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-15 12:38:11 | 显示全部楼层
wav里面是16位的音频数据,但是STM32的DAC只有12位,这里就损失了4位了,但是不知道为什么音质就是很差,而且程序很容易出错,今天把FreeRTOS升级到最新的11.0.1,出错情况好了很多,再把程序的逻辑优化一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-15 18:14:33 | 显示全部楼层
本帖最后由 595953427@qq 于 2024-3-15 18:19 编辑

优化了一下代码可以稳定运行,不会报错。
音质依然很渣。
放上源码,希望有共同兴趣的网友可以共同讨论。
我看了一下原作者的MP3解码思路,是在当前目录下寻找一个跟当前MP3文件同名的wav文件,如果找到了就播放wav文件,如果没有找到就把当前MP3文件在当前目录下转换成一个同名的WAV文件,然后再进行播放,最终还是播放wav文件,就没有必要再去做MA3的解码了。
PA9是串口打印,可以把程序的运行状态打印出来,串口波特率是921600。
如果不做长文件名识别或者把转换表格放到外部Flash,可以移植到STM32F103C8上,SRAM占用的并不多。
STM32F103ZE WAV播放器 2024-03-15.rar (3.72 MB, 下载次数: 0)
回复 支持 反对

使用道具 举报

发表于 2024-3-15 18:35:38 | 显示全部楼层
想音质好,用I2S输出,外接音频DAC
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-15 18:47:41 | 显示全部楼层
网络孤客 发表于 2024-3-15 18:35
想音质好,用I2S输出,外接音频DAC

我在B站上看到别人直接用单片机的DAC做的,音质就很好
回复 支持 反对

使用道具 举报

发表于 2024-3-16 08:29:09 | 显示全部楼层
1、时钟频率是否为44.1k的整数倍
2、播放中断优先级要最高,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-16 08:35:36 来自手机浏览器 | 显示全部楼层
网络孤客 发表于 2024-3-16 08:29
1、时钟频率是否为44.1k的整数倍
2、播放中断优先级要最高,

DMA传输的,没有开定时中断
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-16 08:40:41 来自手机浏览器 | 显示全部楼层
网络孤客 发表于 2024-3-16 08:29
1、时钟频率是否为44.1k的整数倍
2、播放中断优先级要最高,

频率不是44.1k的整数倍,只是接近,应该问题不大,我感觉音质差的主要原因是DAC的输出电压太高了,可以直接带动喇叭响了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-16 08:46:23 来自手机浏览器 | 显示全部楼层
网络孤客 发表于 2024-3-16 08:29
1、时钟频率是否为44.1k的整数倍
2、播放中断优先级要最高,

频率不是44.1k的整数倍,只是接近,应该问题不大,我感觉音质差的主要原因是DAC的输出电压太高了,而电流又不足,可以直接带动喇叭响了,由于电流不足,导致电压下降声音失真,看来要加个分压电路把DAC输出的电压降下来才行
回复 支持 反对

使用道具 举报

发表于 2024-3-16 09:04:27 | 显示全部楼层
595953427@qq 发表于 2024-3-16 08:46
频率不是44.1k的整数倍,只是接近,应该问题不大,我感觉音质差的主要原因是DAC的输出电压太高了,而电流 ...

明白,加分压和耳放可能会好些
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-28 18:22 , Processed in 0.140400 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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