OscPocketO – 基于 Arduino 的紧凑型合成器与鼓机
项目简介
OscPocketO 是一个便携式音乐工作室,仅使用 Arduino 和 LCD 键盘扩展板即可实现合成器和鼓机功能,并支持多设备同步。该项目基于 Mozzi 音频合成库开发,灵感来源于其他便携式音乐制作设备。
核心特性
- 双模式运行:合成器模式与鼓机模式,通过 SELECT 键切换
- 16 步音序器:每个模式包含 16 个 1/16 音符步进
- 多设备同步:支持主从同步模式(Conductor/Player),可串联多台设备
- 参数深度编辑:波形、包络、滤波器、调制、音高等全参数控制
- EEPROM 存储:断电保存模式与设置
- 实时演奏模式:键盘模式(合成器)与独奏模式(鼓机)
硬件清单
| 组件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO | 1 | 核心控制器 |
| LCD Keypad Shield (1602 带按键) | 1 | 需将 D10 引脚弯曲避开,用于音频输出 |
| 3.5mm 音频母座 | 1 | 连接 D10 与 GND |
| 母对母杜邦线 | 2 | 用于同步信号线制作 |
| 公对公杜邦线 | 2 | 用于同步地线制作 |
| 电烙铁及焊锡 | 1套 | 焊接连接用 |
硬件连接指南
1. LCD Keypad Shield 改装
将 Shield 上对应 Arduino D10 的引脚向外弯曲 90°,使其不接触 Arduino 的 D10,因为 D10 需作为音频 PWM 输出引脚(Mozzi 库默认用 D9,但 D9 被 LCD 占用)。
2. 音频输出接线
- 音频插座尖端(信号)焊接彩色导线,连接 Arduino D10(可在 Shield 背面的 D10 焊盘处焊接)
- 音频插座套筒(地)焊接黑色导线,连接 Shield 顶部的 GND 引脚
注意:直连家庭音响可能过载,建议使用耳机或调音台。
3. 同步接口制作
- 剪裁母对母杜邦线一半,分别焊接到 D11 (SYNC IN)、D12 (SYNC OUT) 和 GND
- 制作同步地线:取一根长公对公杜邦线,中间剥皮,焊接一段剪短的公头线,实现三设备共地
4. 组装入盒
将电路板固定在合适外壳内,固定音频插座与同步线缆,增强耐用性。
软件安装与配置
1. 安装 Mozzi 库
从 Mozzi 官网 下载并安装库。
2. 修改 Mozzi 音频输出引脚
打开 Mozzi 库目录下的 AudioConfigStandardPlus.h,将以下四行的 A/B 对调:
#define AUDIO_CHANNEL_1_OUTPUT_REGISTER OCR1B
#define AUDIO_CHANNEL_2_OUTPUT_REGISTER OCR1A
#define AUDIO_CHANNEL_1_PIN TIMER1_B_PIN
#define AUDIO_CHANNEL_2_PIN TIMER1_A_PIN
这将音频输出从默认的 D9 移至 D10。
3. 上传 OscPocketO 固件
在 Arduino IDE 中打开 code_synth/code_synth.ino(合成器)或 code_drums/code_drums.ino(鼓机)并上传。
合成器模式详解
操作界面
使用 SELECT 切换模式,UP/DOWN 调整数值,LEFT/RIGHT 移动光标。板载 LED 随音符触发闪烁。
主要模式与参数
| 模式 | 功能说明 |
|---|---|
| START | 启动/停止音序器 |
| SYNC | 同步模式:NONE(无)、INT(内部时钟,主模式)、EXT(外部时钟,从模式) |
| PATTERN | 选择当前模式(共多个模式位) |
| EDIT | 编辑当前模式音符(MIDI 值,1 小节 16 步) |
| STATE | 编辑音符开关:X=开,O=关 |
| TEMPO | 设置音序器速度 |
| GATE | 设置音符门限时长(1/16 音符的百分比) |
| SHIFT | 移调(UP/DOWN)与序列平移(LEFT/RIGHT) |
| WAVEFORM | 振荡器 1 波形:SIN、TRI、SAW、SQUARE |
| ATTACK / RELEASE | 包络攻击/释放时间(毫秒) |
| FILTERMODE | 低通滤波器调制模式:FIXED、RANDOM、SLOW(4 小节)、FAST(1 小节) |
| CUTOFF / RESONANCE | 滤波器截止频率与共振(0-255) |
| WAVEFORM2 / DETUNE2 | 振荡器 2 波形与去调音(Hz) |
| PLAY | 键盘模式:LEFT/UP/DOWN/RIGHT 对应当前模式前 4 个音符 |
| TOOLS | 工具菜单(按 UP 进入):S=保存、L=加载、R=随机模式、B=低音型模式、C=复制模式 |
鼓机模式详解
音色映射
每个步进的数值由以下音色值相加得到:
- Kick (底鼓) = 1
- Snare (军鼓) = 2
- Hihat (踩镲) = 4
- Clap (拍手) = 8
- Crash (碎镲) = 16
- Tom (通通鼓) = 32
例:值 17 = Kick (1) + Crash (16)
编辑模式
| 模式 | 功能 |
|---|---|
| EDITKICK | 设置底鼓频率、释放时间、音高下降斜率 |
| EDITSNARE | 设置军鼓频率、释放时间、斜率 |
| EDITHIHAT | 设置踩镲频率(阶跃值)与释放时间 |
| EDITCLAP | 设置拍手释放时间 |
| EDITCRASH | 设置碎镲释放时间 |
| EDITTOM | 设置通通鼓频率、释放时间、斜率 |
| PLAY | 独奏模式:LEFT=Kick, UP=Snare, DOWN=Tom, RIGHT=Crash |
| TOOLS | S=保存、L=加载、R=随机、B=重复型、C=复制 |
多设备同步设置
接线拓扑
- 所有设备 GND 共地
- Conductor(主设备):SYNC OUT → Player1(从设备 1)SYNC IN
- Player1 SYNC OUT → Player2 SYNC IN,以此类推
配置步骤
- 所有设备 START: Stop
- Conductor: SYNC = INT
- Player(s): SYNC = EXT,然后 START: Play
- Conductor: START: Play 开始同步运行
同步运行时,仅 Conductor 可调整 Tempo;所有设备均可切换模式与调整音色。
故障排查提示
- LCD 显示异常:反复按键经过 TOOLS 菜单可复位 LCD
- 音频无输出:检查 D10 引脚是否正确弯曲、Mozzi 库修改是否生效、音频插座焊接是否可靠
- 同步失败:检查共地连接、SYNC IN/OUT 接线顺序、同步模式设置
项目资源
- 代码与构建指南:https://oscillator.se/arduino!
- Mozzi 库:https://sensorium.github.io/Mozzi/
制造工艺