数码之家

标题: 用SMT32做了一个全损音乐播放器《源码上传》 [打印本页]

作者: 595953427@qq    时间: 2024-3-14 17:49
标题: 用SMT32做了一个全损音乐播放器《源码上传》
本帖最后由 595953427@qq 于 2024-3-15 18:15 编辑

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

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

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

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

[attach]2060180[/attach]



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

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)

[attach]2060162[/attach]


作者: jbm1    时间: 2024-3-14 18:28
这个能加上网络才有吸引力
作者: zhkrid    时间: 2024-3-14 19:12
jbm1 发表于 2024-3-14 18:28
这个能加上网络才有吸引力

这个单片机可以加网络的,外部加一个螃蟹芯片就行了,比如8201f
作者: gl542400    时间: 2024-3-14 20:05
音乐播放器  性价比不高
作者: 595953427@qq    时间: 2024-3-14 20:07
gl542400 发表于 2024-3-14 20:05
音乐播放器  性价比不高

不只是性价比不高,关键是音质太差
作者: devcang    时间: 2024-3-15 09:52
没试过stm,倒是用esp32玩过蓝牙传输的。
作者: inthsunshine    时间: 2024-3-15 09:58
本帖最后由 inthsunshine 于 2024-3-15 10:19 编辑

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


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



作者: 595953427@qq    时间: 2024-3-15 11:02
STM32的DAC输出音频,音质很差,怎么破?输出正弦波的时候波形还是很正常的,输出音频信号的时候质量就很差了
作者: 青木塬    时间: 2024-3-15 11:22
下一节:使用过音频DAC播放音乐
作者: liuhaob    时间: 2024-3-15 11:34
这个玩不转啊
作者: 阿强123    时间: 2024-3-15 11:59
是全无损音乐播放器吧?
作者: 595953427@qq    时间: 2024-3-15 12:38
wav里面是16位的音频数据,但是STM32的DAC只有12位,这里就损失了4位了,但是不知道为什么音质就是很差,而且程序很容易出错,今天把FreeRTOS升级到最新的11.0.1,出错情况好了很多,再把程序的逻辑优化一下
作者: 595953427@qq    时间: 2024-3-15 18:14
本帖最后由 595953427@qq 于 2024-3-15 18:19 编辑

优化了一下代码可以稳定运行,不会报错。
音质依然很渣。
放上源码,希望有共同兴趣的网友可以共同讨论。
我看了一下原作者的MP3解码思路,是在当前目录下寻找一个跟当前MP3文件同名的wav文件,如果找到了就播放wav文件,如果没有找到就把当前MP3文件在当前目录下转换成一个同名的WAV文件,然后再进行播放,最终还是播放wav文件,就没有必要再去做MA3的解码了。
PA9是串口打印,可以把程序的运行状态打印出来,串口波特率是921600。
如果不做长文件名识别或者把转换表格放到外部Flash,可以移植到STM32F103C8上,SRAM占用的并不多。
[attach]2060985[/attach]
作者: 网络孤客    时间: 2024-3-15 18:35
想音质好,用I2S输出,外接音频DAC
作者: 595953427@qq    时间: 2024-3-15 18:47
网络孤客 发表于 2024-3-15 18:35
想音质好,用I2S输出,外接音频DAC

我在B站上看到别人直接用单片机的DAC做的,音质就很好
作者: 网络孤客    时间: 2024-3-16 08:29
1、时钟频率是否为44.1k的整数倍
2、播放中断优先级要最高,

作者: 595953427@qq    时间: 2024-3-16 08:35
网络孤客 发表于 2024-3-16 08:29
1、时钟频率是否为44.1k的整数倍
2、播放中断优先级要最高,

DMA传输的,没有开定时中断
作者: 595953427@qq    时间: 2024-3-16 08:40
网络孤客 发表于 2024-3-16 08:29
1、时钟频率是否为44.1k的整数倍
2、播放中断优先级要最高,

频率不是44.1k的整数倍,只是接近,应该问题不大,我感觉音质差的主要原因是DAC的输出电压太高了,可以直接带动喇叭响了
作者: 595953427@qq    时间: 2024-3-16 08:46
网络孤客 发表于 2024-3-16 08:29
1、时钟频率是否为44.1k的整数倍
2、播放中断优先级要最高,

频率不是44.1k的整数倍,只是接近,应该问题不大,我感觉音质差的主要原因是DAC的输出电压太高了,而电流又不足,可以直接带动喇叭响了,由于电流不足,导致电压下降声音失真,看来要加个分压电路把DAC输出的电压降下来才行
作者: 网络孤客    时间: 2024-3-16 09:04
595953427@qq 发表于 2024-3-16 08:46
频率不是44.1k的整数倍,只是接近,应该问题不大,我感觉音质差的主要原因是DAC的输出电压太高了,而电流 ...

明白,加分压和耳放可能会好些
作者: chen131578    时间: 2024-3-19 09:10
想学习32,只是没时间了。羡慕。
作者: congzehao    时间: 2024-3-19 10:30
全损音乐是个啥音乐?
作者: 595953427@qq    时间: 2024-3-19 12:43
congzehao 发表于 2024-3-19 10:30
全损音乐是个啥音乐?

很大噪声,有点像收音机信号不好
作者: 595953427@qq    时间: 2024-3-19 12:44
chen131578 发表于 2024-3-19 09:10
想学习32,只是没时间了。羡慕。

如果只是单纯的学习单片机编程,还是很简单的,模拟电路就比较难了
作者: lmn2005    时间: 2024-3-19 13:07
厉害厉害!感谢大佬的分享!
作者: inthsunshine    时间: 2024-3-19 14:33
chen131578 发表于 2024-3-19 09:10
想学习32,只是没时间了。羡慕。

想学都来得及
作者: 傻木    时间: 2024-3-19 20:26
这个是大佬
很厉害
作者: bfsoho    时间: 2024-3-20 15:19
当我看到全损音乐播放器这几个字的瞬间确实震惊了一下
作者: zhuls    时间: 2024-3-20 16:17
595953427@qq 发表于 2024-3-19 12:43
很大噪声,有点像收音机信号不好

你这边说的噪声,有可能是数模转换时产生的量化噪声,示波器直测PA4/PA5能看到。
你的输出有没有加低通?加上之后会好很多的。
作者: sjh_7366    时间: 2024-3-20 17:18
发骚友必备之退烧良药
作者: lmn2005    时间: 2024-3-20 17:41
595953427@qq 发表于 2024-3-15 18:14
优化了一下代码可以稳定运行,不会报错。
音质依然很渣。
放上源码,希望有共同兴趣的网友可以共同讨论。

32f103能把mp3转换成wav吗?
作者: 595953427@qq    时间: 2024-3-20 18:25
lmn2005 发表于 2024-3-20 17:41
32f103能把mp3转换成wav吗?

可以,但是不能边转换边播放,只能先转换好,然后再播放
作者: 595953427@qq    时间: 2024-3-20 18:27
zhuls 发表于 2024-3-20 16:17
你这边说的噪声,有可能是数模转换时产生的量化噪声,示波器直测PA4/PA5能看到。
你的输出有没有加低通? ...

什么都没加,直接PA4和PA5输出接喇叭,连功放都不用。
输出正弦波的时候波形很好
作者: lmn2005    时间: 2024-3-21 07:56
本帖最后由 lmn2005 于 2024-3-21 07:58 编辑
595953427@qq 发表于 2024-3-20 18:25
可以,但是不能边转换边播放,只能先转换好,然后再播放

那也不太用处,如果有兴趣玩一玩还可以,但实际是没有用场的。
ST芯片出硬件解码mp3的单片机了吗?

作者: 595953427@qq    时间: 2024-3-21 09:11
lmn2005 发表于 2024-3-21 07:56
那也不太用处,如果有兴趣玩一玩还可以,但实际是没有用场的。
ST芯片出硬件解码mp3的单片机了吗?
...

ST这辈子都不太可能出硬解MP3的芯片
作者: lj6508    时间: 2024-3-21 10:18
本帖最后由 lj6508 于 2024-3-21 10:19 编辑
595953427@qq 发表于 2024-3-15 12:38
wav里面是16位的音频数据,但是STM32的DAC只有12位,这里就损失了4位了,但是不知道为什么音质就是很差,而 ...

12位,直接损失了94%的细节啊
作者: 595953427@qq    时间: 2024-3-21 11:35
lj6508 发表于 2024-3-21 10:18
12位,直接损失了94%的细节啊

是的,播放WAV文件的时候全是噪声,输出正弦波看起来还好
作者: imacg    时间: 2024-3-21 19:26
使用WAV无损文件,播放出来却是有损的声音?
作者: 12v16v6    时间: 2024-3-21 21:11
音质怎么样?
作者: inthsunshine    时间: 2024-3-21 22:23
本帖最后由 inthsunshine 于 2024-3-21 22:35 编辑
lmn2005 发表于 2024-3-20 17:41
32f103能把mp3转换成wav吗?

第三方解码库
作者: 天臆    时间: 2024-3-22 14:12
解码MP3有专门的libmp3, 用STM32解码过MP3 通过USBHOST 控制USB AUDIO 设备 播放,音质还行
作者: 595953427@qq    时间: 2024-6-17 20:41
音乐播放器的音质终于正常了,效果还不错,有兴趣的可以下载试一下。

由于从wav文件读取到的数据是有符号的,STM32的DAC只能接收无符号数据,所以要把从wav文件读到的有符号数据转换成无符号数据,这样DAC输出的声音才正常。
下面是修改了的代码,上电后会从NorFlash和SD卡中搜索.wav文件进行播放。
按键可以控制下一曲。
[attach]2138181[/attach]
[attach]2138182[/attach]

作者: 595953427@qq    时间: 2024-6-17 20:54
STM32F103的12位DAC播放音乐效果真的不错。
[attach]2138243[/attach]
作者: inthsunshine    时间: 2024-6-18 06:55
本帖最后由 inthsunshine 于 2024-6-18 06:59 编辑
12v16v6 发表于 2024-3-21 21:11
音质怎么样?

我更关心的是RTOS对资源(CPU和内存)的占用

另外大致了解一下minimp3对内存要求不低,栈25k, 输入缓冲16k,加起来 41k, 相比之下spiritMP3就少多了,但那个要用回调函数比较不友好

作者: 595953427@qq    时间: 2024-6-18 17:30
inthsunshine 发表于 2024-6-18 06:55
我更关心的是RTOS对资源(CPU和内存)的占用

另外大致了解一下minimp3对内存要求不低,栈25k, 输入缓冲16k, ...

CPU占用不高,SRAM要36K以上才行
作者: 595953427@qq    时间: 2024-6-18 19:51
lj6508 发表于 2024-3-21 10:18
12位,直接损失了94%的细节啊

为什么是97%?
作者: lj6508    时间: 2024-6-19 08:19
595953427@qq 发表于 2024-6-18 19:51
为什么是97%?

是94%,自己算啊
作者: 595953427@qq    时间: 2024-6-19 11:34
lj6508 发表于 2024-6-19 08:19
是94%,自己算啊

我数学不好,怎么算的
作者: 南天音乐    时间: 2024-6-20 11:45
wav,还需要软解吗本身就是pcm数据流了
作者: lj6508    时间: 2024-6-20 12:54
595953427@qq 发表于 2024-6-19 11:34
我数学不好,怎么算的

2^12/2^16啊
作者: 595953427@qq    时间: 2024-6-20 14:17
lj6508 发表于 2024-6-20 12:54
2^12/2^16啊

原来是这样呀,这个是理论值,实际听效果还是可以的,音质不是特别好,能听个响。
作者: inthsunshine    时间: 2024-6-20 18:53
595953427@qq 发表于 2024-6-20 14:17
原来是这样呀,这个是理论值,实际听效果还是可以的,音质不是特别好,能听个响。 ...

要好还是得I2S
作者: 595953427@qq    时间: 2024-6-20 19:43
inthsunshine 发表于 2024-6-20 18:53
要好还是得I2S

也就做来玩玩,不是做专业的播放器
作者: lj6508    时间: 2024-6-21 10:48
595953427@qq 发表于 2024-6-20 14:17
原来是这样呀,这个是理论值,实际听效果还是可以的,音质不是特别好,能听个响。 ...

毕竟瓶颈一般都在人耳和发声设备,编码解码性能基本够了
作者: 595953427@qq    时间: 2024-6-21 11:28
用单片机的DAC直接播放声音,省一个音频解码芯片,电路更简洁

作者: inthsunshine    时间: 2024-6-21 22:30
595953427@qq 发表于 2024-6-21 11:28
用单片机的DAC直接播放声音,省一个音频解码芯片,电路更简洁

音频dac有很便宜的,cs4344才2-3块, 支持192K采样率, 不该省的地方千万别省,大幅牺牲效果真心不值得


作者: 595953427@qq    时间: 2024-6-22 13:35
最新修改的代码在44楼
作者: jackacysu454    时间: 2024-9-8 14:43
反正音质差,怪怪的,很不爽




欢迎光临 数码之家 (https://www.mydigit.cn/) Powered by Discuz! X3.4