simple_piano

Example of the component espressif/esp_audio_render v0.8.0
# 简单钢琴示例

- [English Version](./README.md)
- 例程难度:⭐⭐⭐

## 例程简介

- 本例程基于 `esp_audio_render` 实现复音钢琴播放。
- 例程演示 4 条音轨(旋律、和声、低音、琶音)实时生成与混音,并通过板载音频编解码器播放。

### 典型场景

- 学习多流 PCM 渲染与混音流程
- 验证实时合成音频的性能和稳定性
- 通过 UART 实现交互式按键按下/释放控制

## 环境配置

### 硬件要求

- 推荐开发板:[ESP32-S3-Korvo2](https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/dev-boards/user-guide-esp32-s3-korvo-2.html) 或 [ESP32-P4-Function-EV-Board](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32p4/esp32-p4-function-ev-board/user_guide.html)
- 可用的音频输出设备(扬声器或耳机)

### 默认 IDF 分支

本例程支持 IDF `release/v5.4` (>= v5.4.3) 和 `release/v5.5` (>= v5.5.2)。

## 编译和下载

### 编译准备

```bash
cd $YOUR_GMF_PATH/packages/esp_audio_render/examples/simple_piano
idf.py gen-bmgr-config -l
idf.py gen-bmgr-config -b esp32_s3_korvo2_v3
```

> [!NOTE]
> 如果切换为其他 `esp_board_manager` 支持的开发板,请按相同步骤执行并替换板型名称。
> 自定义开发板请参考 [自定义开发板指南](https://github.com/espressif/esp-gmf/blob/main/packages/esp_board_manager/docs/how_to_customize_board_cn.md)。

### 编译与烧录

```bash
idf.py build
idf.py -p PORT flash monitor
```

## 如何使用例程

### 流程介绍

```mermaid
flowchart LR
  GEN[按轨道生成音符 PCM] --> W0[流 0 旋律]
  GEN --> W1[流 1 和声]
  GEN --> W2[流 2 低音]
  GEN --> W3[流 3 琶音]
  W0 --> MIX[esp_audio_render 混音]
  W1 --> MIX
  W2 --> MIX
  W3 --> MIX
  MIX --> SINK[esp_codec_dev 播放输出]
```

### 功能和用法

例程会演奏《小星星》,共 4 条音轨:

- 轨道 0:旋律
- 轨道 1:和声
- 轨道 2:低音
- 轨道 3:琶音

默认输出配置:

- 采样率:16 kHz
- 位宽:16 bit
- 声道:单声道

主要执行流程:

1. 初始化音频 DAC 并创建 render 实例。
2. 打开 4 条 render 流并创建 `song_render`。
3. 按块生成音符 PCM 并写入对应流。
4. 混音后通过 `esp_codec_dev` 输出。

### **启用实时钢琴功能**(可选)
启用通过UART的交互式钢琴控制:

1. **在[piano_example.c](main/piano_example.c)中启用功能并重新构建**:
   ```c
   #define SUPPORT_REALTIME_TRACK
   ```

2. **使用Python控制器**(在另一个终端中):
   ```bash
   # 安装依赖
   pip install pyserial

   # 运行钢琴控制器
   python3 piano_key.py --port /dev/ttyUSB0 --baud 115200
   ```

3. **实时钢琴演奏**:
   - **数字1-7**:C4-B4(中八度)
   - **字母Q-U**:C5-B5(高八度)
   - **ESC**:停止钢琴
   - **Ctrl+C**:退出控制器

## 故障排除

### 无声音输出

- 确认 DAC 设备初始化成功(`ESP_BOARD_DEVICE_NAME_AUDIO_DAC`)。
- 检查 `esp_codec_dev_set_out_vol` 音量设置。
- 确认扬声器/耳机硬件连接正常。

### 实时控制无响应

- 确认 UART0 与主机串口工具连接正常。
- 确认命令格式正确(如 `P:C4`、`R:C4`、`P:ESC`)。

## 技术支持

- 技术支持论坛:[esp32.com](https://esp32.com/viewforum.php?f=20)
- 问题反馈与功能建议:[GitHub issue](https://github.com/espressif/esp-gmf/issues)

To create a project from this example, run:

idf.py create-project-from-example "espressif/esp_audio_render=0.8.0:simple_piano"

or download archive (~23.17 KB)