
LitePlayer-青乐播放器
简介
心沉静,音绵长。 静心聆听,纯粹之音。 音符为伴,静享时光。 我做了一台简单的音乐播放器——青乐(Yue)播放器
简介:心沉静,音绵长。 静心聆听,纯粹之音。 音符为伴,静享时光。 我做了一台简单的音乐播放器——青乐(Yue)播放器开源协议
:GPL 3.0
描述
心沉静,音绵长。
音符为伴,静享时光。
我做了一台简单的音乐播放器——青乐(Yue)播放器



使用说明:
>>插入SD卡,打开电源开关
<<机器显示LO(Loading)正在加载和初始化
<<加载和初始化成功,机器显示HI(Hello),播放指示灯慢速闪烁,表示欢迎,随后进入音乐播放
<<机器进入音乐播放状态,屏幕上显示当前播放的曲目编号
>>使用拨轮键切歌,音量调节键调节音量
提示:
初始化后屏幕显示TF-ER表示没有TF卡或者TF卡不被支持,同时LED快速闪烁,机器会重试初始化卡
播放音乐中,机器显示Fr-ER表示音乐格式不被支持
目前机器支持<96K的16比特,24比特WAV文件,请将文件拷贝到TF卡的MUSIC文件夹
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
一、项目故事
青乐播放器,它是音乐的纯粹之选。我们不追求繁杂的功能,没有音乐社交的喧嚣,没有庞大音乐库的纷扰,也没有丰富音效均衡器的修饰,甚至不必刻意的将音乐以列表的形式分类。它所追求的,是为你带来一个简单的、清净的音乐体验。戴上耳机,打开开关,内存卡中珍藏的、百听不厌的音乐,将带你进入一个宁静的音乐世界。
或许你会认为,没有音乐社交的纷扰,没有庞大音乐库的繁杂,也没有丰富音效均衡器的修饰,甚至连简单的播放列表都不支持的播放器就是一个堪比陋室铭的项目,但是在这个信息爆炸的年代,青乐能为你带来最简单的、最清净的音乐体验。将内存卡中挚爱的音乐拷贝进去,连接耳机,打开开关,即刻沉浸于你最爱的音乐之中。
在当下,音乐软件和播放器功能日益丰富,青乐播放器却独树一帜,致力于为你提供一个清净、愉悦的音乐播放体验。愿青乐与戴上耳机的你,共同分享内存卡中那一首首珍藏的音乐,让音乐的纯粹在心中流淌。
二、项目设计
2.1 LitePlayer播放器定义
字如其名,LitePlayer播放器的定义——纯净的音乐体验,简洁的使用体验。
2.2 拟定面向两类核心用户
1.享受型用户,青乐播放器提供清净的音乐体验,适合音乐爱好者带上耳机,纯净的品味音乐的维导
2.网络型用户/股东型用户:通过开源的方式向其他用户推广播放器。不仅整个项目坚持全开源,而且在设计时在硬件和软件上预留一定的升级空间,便于有需求的开源创客进行创意升级,发挥青乐播放器的价值
2.3 项目档次
产品将设计两个档次:清享款和进阶款
清享款致力于打造点单质朴的音乐体验,同时具备一定的升级空间供后续的升级。
进阶款则在坚持清享款“清净的享受音乐”的核心目标上清享款的基础上,对清享款的交互和功能丰富化,并且支持更大的升级空间
注:本项目将开源清享款的原型机,后续会根据大家的反馈对清享款进行升级,期待大家的建议。
2.4 拟定设计方案
接下来便是设计方案的拟定
三、软硬件设计方案
3.1 播放器基础硬件架构
对于一台音乐播放器,应该具有以下硬件:
1.MCU:这里的MCU不仅仅是整个播放器的控制核心,对于一个基于全软件解码的音频播放器而言,MCU还充当了音频软件解码的解码器。
2.硬件音频解码芯片:例如VS1003,VS1053,通过接受MCU传送机的音频文件流自动解码播放。
3.音频DAC:将单片机解码的数字PCM信号通过扬声器或耳机输出,通常通过I2S接收来自单片机的音频数据流。
4.音频ADC:不具备录音功能的播放器一般可以不带,通过采集音频输入通道,可以是麦克风或者是线路输入,将输入信号量化成采样信号后发送给MCU,一般通过I2S进行通讯。
5.大容量存储设备:存储媒体文件的存储介质,这里可以是SD卡
6.交互类器件:包括屏幕,触摸屏,按键,旋钮,拨杆等交互类器件。
7.USB:负责外部供电,模拟USB/U盘,程序下载和固件升级
8.电源管理:包括为各模块提供电源的LDO,电源开关,锂电池及锂电池充电器。
3.2 硬件删减
3.2.1 将播放器硬件的设计方案罗列出来
(请直接前往3.2.2的直方图)
3.2.2 并且按照精简性 - 必要性绘制直方图:
3.2.3 精简硬件框图
LitePlayer的设计理念是带给大家一个简单纯净的音乐播放器,在硬件架构上有必要删减冗余硬件,硬件删减的原则是必要性为主导,精简性优先。
即优先考虑相应硬件阀杆的必要性,同必要性的硬件中精简性优先。
若某硬件必要,但并不精简,则更换方案,寻求出更精简的方案。
非必要原件且不精简的考虑删除。
精简后的硬件架构如图:(虚线部分为拟定删减的功能)
3.2.4 最终设计方案确定
根据硬件删减框图,得到最终硬件设计方案:
四、硬件架构分析
4.1 MCU
MCU选择的是我熟悉的ESP32S3,除了我对这个方案比较熟悉之外,ESP32S3能提供足够的性能和足够的硬件外设,便于后续对播放器软件的升级和Advance版的设计。
值得注意的是,因为ESP32S3的35 36 37引脚与单片机内部的PSRAM和SPIFLASH连接,这三个引脚在分配的时候不能被使用
4.2 媒体存储设备
综合硬件结构复杂度,硬件媒体存储设备这里选用的是TF卡,TF卡能提供大容量的媒体存储空间,外围电路简单,且综合成本也比较低.
4.3 音频编解码芯片
项目中使用一颗ES8388芯片作为音频DAC输出的芯片,ES8388支持双通道音频输出,双通道音频输入,但是这里我们只是用其中一个音频输出通道,未使用音频输入通道.
这里重点讲一下项目中选用的ES8388音频编解码芯片
4.3.1 独立的LDO对音频芯片供电
使用一颗独立的RT9013对音频芯片的模拟电源进行供电:
这颗LDO在PCB上的位置靠近ES8388(这个布局方式是否妥当,还请大家提出建议)

4.3.2 音频地与系统底线进行隔离
通常 GND 返回电流 Ireturn 的变化比较大,如果 GND 处理得不好,就会导致 GND 电位明显浮动。对于音频 CODEC来讲,这种 GND 电位变化也是一种明显的噪声,而且往往这种噪声很难消除。一个正确的处理办法是将音频 GND 和系统的 GND 分开,使音频 GND 的返回电流与系统 GND 的返回电流没有公共的返回路径或尽量减少公共的返回路径。有两种 GND 的处理方式,这里讲我使用的一种:用一个小电阻或磁珠做 GND 隔离
建议用一个小电阻或磁珠做 GND 隔离,项目中使用的PCB设计为双层板,没有完整的GND 层,很难分割出一个完整的音频 GND 的时候使用。按照设计指南的要求,我们通常将音频CODEC、音频功放、MICROPHONE 等与音频相关的器件的 GND 定义为音频 GND(AGND),然后用一个小电阻或磁珠与系统地(GND)连接起来。这样可以保证音频的返回电流只在 AGND 网络中流动,然后通过小电阻或磁珠返回到 GND。而其他噪声较大的器件的返回电流被约束在 GND 网络中,不会干扰音频 GND。
这里的电路使用一个0R的电阻(R20 实际上建议使用一颗4.7K的电阻将GND与AGND进行隔离)
于此同时:在器件摆放时,一定要将与音频 GND 相关的器件摆放在一起(白色网络为AGND网络)
由于音频 GND 上的返回电流最后仍然会通过小电阻或磁珠返回到系统地,所以,在一定程度上,系统地与音频地会共用返回路径。在 LAYOUT 时,要注意尽量减少他们之间共用的返回路径,也就是说要仔细考虑音频器件的布局及小电阻或磁珠的摆放位置
4.3.3 电源退耦合电容和VMID VREF ADCVREF的滤波电容
为获取更优质的音频质量,注意这些滤波电容
4.3.4 I2S音频总线布线注意
建议 I2S 信号的走线长度基本相等。(紫色为I2S音频总线)
最好在 I2S MCLK、I2S SCLK、I2S LRCK 上串联 33 欧姆的小电阻。在这里,我们串联的是22R的电阻
如果走线过长,比如超过 10cm,最好在 I2S MCLK、I2S SCLK、I2S LRCK 与 GND 之间预留一个 33pF 的并联电容。这一点我们未使用到,注意留意即可
关于ES8388芯片的电路设计和PCB LAYOUT,大家可以参考附件-->ES8388应用电路设计与PCB LAYOUT注意事项(文件来自顺芯)
4.4 交互类器件
交互类器件分为显示器件和输入器件,这里按照这两个部分来讲解
4.4.1 输入器件------按键
使用拨轮按键完成上下曲切割操作
使用轻触按键进行音量调节,暂停播放控制,保证在使用过程中的稳定性
4.4.2 显示器件-----屏幕
项目中并未使用常见的LCD屏或者是OLED屏幕,转而使用一块两位半的段码显示屏,用于显示重要的系统提示信息和正在播放的信息
屏幕使用的是大连奇耘电子的两位半LCD段码屏
2位半数字7段式LCD显示屏宽温宽视角液晶数码管QYT31697长期现货-淘宝网
理论上屏幕支持单片机直接驱动(实测屏幕的COM端和段码端之间的电位差为3.3V时屏幕正常点亮,单片机使用STM32和51可以直接驱动)
但为了便于单片机对屏幕的驱动,这里驱动电路为屏幕官方推荐的驱动芯片-----HT1621
最终显示效果(本人这片芯片在焊接的时候有点坏了,因此显示效果不佳,见谅)
4.4.3 显示器件-----LED
项目中使用两颗LED,一颗指示充电状态,另一颗作为系统指示灯指示当前系统状态.
4.5 USB连接器
这里使用的是12Pin的Type C母座,支持USB2.0
通过这个USB Type C母座,使用Type C数据线连接,配和VSCode ESP-IDF即可直接下载程序
同时这个USB母座与ESP32S3的USB连接,在硬件上支持了完成了ESP32模拟U盘的USB连接硬件实现
4.6 电源管理
4.6.1 电源能量流
能量流图与我之前设计的NS4168视频播放器一致,这里再简单讲讲:
仅使用电池时,电池经过开关后直接给LDO供电
使用外部供电打开开关时,由TP4055同时给锂电池供电和LDO供电
为了保证系统运行的稳定性,请焊接电池做负载后再打开开关,避免电流不足,充电芯片状态反复跳变
4.6.2 锂电池充电电路
锂电池充电电路使用的是TP4055,这块外围元器件数量少,支持可编程充电电流,最大支持500mA的充电芯片无疑是这套项目的最佳选择
(建议使用充电电路,若不使用充电电路,请使用导线将BATT_VCC和USB_VBUS短接)
项目中使用实体开关作为整个项目的电源电源开关
注:可编程电流与电阻R28之间的关系如图:
4.6.3 LDO
项目中使用两颗LDO,输出3.3V的电压为整个项目的硬件进行供电,其中一颗负责整个电路的数字电路进行供电,另一颗为ES8388芯片提供解码器所需要的模拟电源
在电路中还有两颗稳压二极管,其中一颗与USB_VBUS并联,防浪涌,另一颗接在数字电源的RT9013上
4.7 完成
以上为硬件设计的具体方案,我们使用嘉立创EDA专业版设计原理图和PCB,并且通过嘉立创打板,焊接以下为成品:
(LCD驱动芯片在调试的时候反复拆焊,焊糊了,见谅)
备注:展示的图片为第一版验证机的PCB,第二板(即当前开源版本)优化了部分元器件的布局位置,并且在四个螺丝柱位置开槽,方便外壳固定
五、项目外壳设计
我为项目设计了一个简单的外壳,外壳遵循简单,纯粹的原则,去除所有的过设计,只保留最简单存粹的白牌体验.
1.前壳:
前壳主要是为这些器件进行开槽----屏幕 按键 SD卡卡槽 开关开槽,并且提供支柱,螺丝柱对PCB进行支撑和固定
前壳并没有丰富的装饰性设计,唯一的装饰性设计便是正面屏幕左上方的LitePlayer的LOGO
2.后壳
后壳为耳机座和TypeC进行开槽
同样,后壳的设计遵循简单存粹的设计原则,留给用户的只是清朗简洁的设计语言
3.按键和电源开关拨杆
包括按键和电源开关的拨杆(电源开关拨杆:左 按键:右)
所设计的外壳文件参考附件(供大家参考)
备注 : 我使用的建模软件为SolidWorks2022 建模文件夹中提供了3MF的模型文件和STL的模型文件,也包括SolidWorks2022上设计的模型源文件
六、软件设计
这里主要讲一下播放器程序的设计,项目开发中产生的工程文件都以开源的形式进行上传,以下是开源工程的说明:
00_HT1621_888 |
为HT1621的驱动程序 |
01_music_no_Screen |
测试SD卡 ES8388进行WAV文件的播放 本工程不使用按键和任何屏幕,便于最初的测试和后续的代码移植或功能增删改 |
02_music_SmgDsiplay | 在01的基础上增加对LCD屏幕的支持 |
03_music_SmgDsiplay_WithKey | 在02的基础上,增加对上/下一曲按键的支持 |
04_music_SmgDsiplay_WithKey_All | 在03的基础上增加更多的按键以及交互的支持,本项目的玩整体便是此项目 |
6.1 LCD-HT1621驱动程序
HT1621再ESP32上的初始化流程如下所示:
至于初始化,显示内容等程序的代码请参考工程文件,这里就不再赘述了
这里再简单的提一下HT1621的内存映射表:
6.3WAV文件解码程序
截自开源前,项目支持WAV音频解码,这里简单的讲解以下WAV音频解码的流程
这里讲述一个最简单的WAV音频解码器的工作流程,如下流程图所示
第一步>>程序读取WAV文件头,获取到正确的文件头信息,若信息不正确则返回文件格式不支持,若信息正确则保存配置信息
第二步>>保存的配置信息将用来配置I2S接口和I2S设备,完成配置后即可进入WAV播放状态
第三步>>进入WAV播放状态前,创建用于填充PCM音频流的定时器中断或任务,确保能传送音频流到I2S
这里值得注意的是,ESP32S3的I2S数据流不需要我们很按照时间的传送,这就意味着我们可以通过创建一个RTOS任务的方式循环向I2S进行PCM音频数据流填充
第四步>>任务启动,进入播放状态
第五步>>填充的过程中检查文件播放是否正常,是否达到文件末尾,是否有其他指令,并且根据指令控制I2S的状态(播放/停止)以及文件填充的状态
文件填充的方式采用一次定量的从文件中取出一定字节的数据,若某次取出数据后剩余的数据量刚好为0或者无法被再被整除一次,那么表示文件已经播放到末尾
完整的WAV播放器框图请参考6.4
6.4简单的实现我们的LitePlayer
在我们已经了解基础硬件的使用及驱动方式,并且明白WAV文件的解码方式后,通过组合,我们便可以编写出一个完整的音乐播放器
前面我提到,一个音乐播放器或许会具备以下功能,我们还是按照功能的必要性 - 精简性绘制直方图:
经过删减,以必要性优先,精简性为主导,确定LitePlayer需要具备的功能,如下:
整个程序的框图如下:
程序的执行流程如下:
1.播放器电源启动,初始化硬件
2.检查Music文件夹且扫描Music文件夹下是否包含音乐文件
3.按照文件顺序(Index)顺序读取文件夹内的文件,判断是不是WAV文件
4.打开WAV文件,并且按照6.3中所述的流程进行播放
5.播放状态下用户可以进行操作
6.4 人机交互方式
本项目中的大头便是LCD屏幕的显示,以
下列出LCD屏幕会显示的内容以及相应的含义
状态 | 显示 | 内容 |
开机初始化 | LO | Loading,即加载中 |
找不到内存卡或内存卡不被支援 | TF->ER | TF Card Error TF卡不存在或者TF卡不被支持,请检查卡 |
初始化成功 | HI | Hello,欢迎使用 |
播放音乐 | 01 | 当前播放的曲目的ID |
文件格式不被支援 | FR->ER | 当前播放的文件格式不被支援 |
七、项目演示
7.1项目的准备
第一步>>>克隆PCB,PCB打样,PCB装配
第二步>>当你已经完成PCB复刻制版并且焊接元器件,并且保证在PCB装配上没有任何的问题后,我们便可以开始烧录固件,并且带着期待的心情准备欣赏音乐
第三步>成功后,打印外壳,进行外壳装配,安装SD卡,打开开关,欣赏音乐
7.2演示视频说明
演示视频背景音乐为录音笔录音,后期与视频流合并
测试用的音频格式均为44100Hz,16比特的WAV(使用转码软件由128Kbps 16Bit 44100Hz的MP3转码而得)
录音使用的录音笔为雅马哈PR7(录音格式16bit/48KHz/PCM)
演示视频位于附件
设计图

BOM


评论