合成器 Midi播放器 + 蓝牙音频

ESP32-S31 Korvo-1 智能多功能合成器与蓝牙音频播放器
English | 中文
基于乐鑫新一代双核 320MHz RISC-V 旗舰 SoC ESP32-S31(ESP32-S31 Korvo-1 开发板)构建的高保真、多功能嵌入式音频工作站系统。
工程采用纯 C 语言编写,底层驱动与应用层深度模块化解耦,集成了 AMY 16 复音双音色库合成器、标准 MIDI 文件 (.mid) 解析与播放引擎、经典蓝牙 A2DP Hi-Fi 无线音箱、ESP32-S31 片上硬件 ASRC 异步采样率转换、800×480 RGB 触控电容屏交互系统 (LVGL 9) 以及 Core 1 专属 32-bit 实时软件音频混音器。
📑 目录
- 🌟 核心特性
- 🖥️ 硬件环境与引脚映射
- 🛠️ 开发与编译环境配置
- 🚀 快速开始 (编译与烧录)
- ⚡ 软件架构与双核调度模型
- 🖲️ 人机交互操作指南
- 📁 工程代码目录结构
- ❓ 常见问题排查 (FAQ)
🌟 核心特性
- 🎹 AMY 16 复音多算法合成引擎:支持 DX7 (128 款 FM 经典音色) 与 Juno-6 (128 款模拟经典音色) 双音色库。内置 160 个独立振荡器,支持多振荡器堆叠、包络调制(ADSR)、滤波与算法合成。
- 🎵 标准 SMF (.mid) 乐曲播放器:完整解析标准 MIDI 文件格式 (SMF Format 0 & Format 1 多轨同步)。解析 VLQ 变长增量时间,自动追踪 Set Tempo (0xFF 0x51) 动态速度并建立微秒级时间轴。内置精选乐曲《美丽的神话.mid》,同时支持从 SD 卡动态热插拔读取并播放任意 .mid 文件。
- 📡 蓝牙 Classic A2DP 音频接收 (无线音箱模式):设备广播名:ESP32S31-Audio,支持 iPhone、Android(小米/华为/OPPO等)、Windows 及 Mac 免驱直连。支持 AVRCP 媒体协议,实现手机与开发板之间的音量同步调节与远程播控。内置 UTF-8 字符安全过滤算法,防止手机中文蓝牙名称在屏幕上出现缺失字模的方框乱码。
- 🎛️ ESP32-S31 硬件 ASRC 与实时 32-bit 软件音频混音:硬件 ASRC 协处理器加速:接入 ESP32-S31 片上专用硬件 ASRC 外设 (components/esp_asrc),由底层硬件自动完成 48kHz / 32kHz ➡️ 44.1kHz 的高保真异步采样率变换,CPU 占用近乎为 0。Core 1 专属音频任务:作为系统唯一的 I2S DMA 写入端,彻底消除多任务并发写 DMA 引发的破音、撕裂与杂音。即兴合奏伴奏:支持在手机蓝牙播放背景音乐的同时,手指在屏幕上随时弹奏触控钢琴,实现零延迟、无杂音完美叠加混音。
- 🖥️ 800×480 宽屏触控 UI (LVGL 9):3 个完整八度(C3 ~ B5 共 36 键)触控钢琴键盘,支持手指直接点击发声与多点触控。MIDI 播放与蓝牙音频双向联动,琴键根据演奏音符实时呈现青色/品红色高亮闪烁。提供 Bank 切换、音色切换、八度调节、音量增减、MIDI 播放/暂停及实时 ADSR 参数显示。
🖥️ 硬件环境与引脚映射
1. 核心硬件规格
- 主控芯片:ESP32-S31 (双核 32-bit RISC-V @ 320 MHz, 具备 PIE 矢量扩展指令集)。
- 存储配置:16 MB QIO Flash + 8 MB Octal PSRAM (运行于 200 MHz 高速模式)。
- 音频 Codec:ES8389 高保真双工音频编解码芯片。
- 功放系统:NS4150B 双声道立体声 PA 功放,连接板载双扬声器。
- 显示触摸:800×480 RGB565 液晶屏 + GT1151 电容式多点触摸芯片。
- 外部存储:MicroSD (TF) 卡槽,采用 SDMMC 4-bit 高速接口 (SD3.0 / U1)。
2. 全外设 GPIO 引脚分配表 (硬件基准定义)
| 外设模块 | 功能 / 信号名称 | GPIO 引脚 | 硬件工作特性与说明 |
|---|---|---|---|
| RGB LCD 液晶屏 | 数据线 (16-bit RGB565) PCLK (像素时钟 ~18MHz) HSYNC (行同步) VSYNC (场同步) DE (数据使能) DISP (显示使能) | GPIO8 ~ GPIO19, GPIO33 ~ GPIO36 GPIO40 GPIO44 GPIO45 GPIO43 GPIO38 | esp_lcd RGB 并行总线,PSRAM 双缓冲,防画面撕裂 |
| GT1151 电容触摸屏 | I2C SDA I2C SCL | GPIO0 GPIO1 | 与音频 Codec 共用 I2C 主线,支持手指多点连续触控 |
| ES8389 音频 Codec | I2C SDA / SCL I2S MCLK (主时钟) I2S SCLK/BCLK (位时钟) I2S WS (左右声道帧时钟) I2S DOUT (DAC 播音) I2S DIN (ADC 录音) | GPIO0 / GPIO1 (I2C 地址 0x20) GPIO2 GPIO3 GPIO4 GPIO5 GPIO6 | 标准 Philips I2S 格式,统一工作于 44.1kHz 16-bit 双声道 Stereo 模式 |
| NS4150B PA 功放 | PA_EN (功放使能控制) | GPIO7 | 高电平使能 (Active HIGH),开启左右双立体声扬声器 |
| MicroSD 卡 (SDMMC) | CLK / CMD D0 / D1 / D2 / D3 PWR_EN (供电控制) | GPIO24 / GPIO25 GPIO20 / GPIO21 / GPIO22 / GPIO23 GPIO39 | PWR_EN 为低电平使能 (Active LOW: 0=供电),SDMMC 4-bit 40MHz 挂载至 /sdcard |
| 片上硬件 ASRC | 片上协处理器 | 片上硬件内部通道 | 硬件异步重采样,支持 48kHz/32kHz 自动硬件转 44.1kHz |
| WS2812 状态灯 | DIN (单线控制) | GPIO37 | ESP-IDF RMT 外设驱动,支持呼吸、渐变彩虹灯效 |
| 物理按键 (4 按键) | ADC1 通道 1 | GPIO42 | 单 ADC 阶梯分压网络:SET、MODE、VOL-、VOL+ |
🛠️ 开发与编译环境配置
1. 操作系统支持
- Windows 10 / 11 64-bit (推荐使用 ESP-IDF PowerShell)
- Linux (Ubuntu 20.04 / 22.04 LTS 或更新)
- macOS (Apple Silicon M1/M2/M3 或 Intel)
2. ESP-IDF 工具链版本
- 必须使用 ESP-IDF v6.1 或更新分支(因 ESP32-S31 为新一代双核 RISC-V 芯片,需 v6.1 版本的 HAL 与编译器支持)。
- 验证指令:idf.py --version (输出应包含 v6.1 或以上)。
3. 组件依赖与架构
本项目已自包含所有专属硬件驱动组件,无需额外从外部网络下载私有包:
- components/amy: 经过 RISC-V 双核多线程优化的 AMY 16 复音合成器内核。
- components/esp_asrc: 乐鑫 ESP32-S31 硬件 ASRC 专用重采样驱动。
- components/esp_audio_effects: 乐鑫音频音效底层算法支持库。
- components/gmf_fft: 针对 RISC-V PIE 指令集深度汇编优化的高吞吐 FFT 组件。
🚀 快速开始 (编译与烧录)
第一步:设置 ESP-IDF 环境变量
在终端中激活 ESP-IDF v6.1 环境:
- Windows PowerShell:. "C:\Espressif\tools\Microsoft.release-v6.1.PowerShell_profile.ps1"
- Linux / macOS Bash:. $HOME/esp/esp-idf/export.sh
第二步:设置目标芯片并编译
首次编译或清理后编译,可执行:
# 1. 设定芯片目标为 esp32s31 (首次构建时执行)idf.py set-target esp32s31# 2. 编译整个工程 (包含 Bootloader、分区表、内嵌乐曲与固件)idf.py build编译成功后,终端将输出 Project build complete. 并生成 build/esp32s31_midiplayer.bin。
第三步:烧录固件与串口监视
使用 Type-C 数据线连接开发板至电脑,执行一键烧录并启动串口监控(请将 COM7 替换为您电脑上的实际端口号):
- Windows:idf.py -p COM7 flash monitor
- Linux / macOS:idf.py -p /dev/ttyUSB0 flash monitor
💡 提示:按快捷键 Ctrl + ] 可随时退出串口监控终端。
评论 (0)
评论
登录后即可评论