合成器 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 GPIO38esp_lcd RGB 并行总线,PSRAM 双缓冲,防画面撕裂
GT1151 电容触摸屏I2C SDA I2C SCLGPIO0 GPIO1与音频 Codec 共用 I2C 主线,支持手指多点连续触控
ES8389 音频 CodecI2C 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 GPIO39PWR_EN 为低电平使能 (Active LOW: 0=供电),SDMMC 4-bit 40MHz 挂载至 /sdcard
片上硬件 ASRC片上协处理器片上硬件内部通道硬件异步重采样,支持 48kHz/32kHz 自动硬件转 44.1kHz
WS2812 状态灯DIN (单线控制)GPIO37ESP-IDF RMT 外设驱动,支持呼吸、渐变彩虹灯效
物理按键 (4 按键)ADC1 通道 1GPIO42单 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)

评论

登录后即可评论

暂无数据
暂无数据