e450189858
Lint & Validate / lint (push) Has been cancelled
- build-guide.md: Boot medium options table, USB/NVMe flash instructions, EEPROM boot order setup, first-boot wizard boot config step - user-manual.md: Required hardware lists all 3 boot targets, EEPROM bootstrap instructions, NVMe HAT recommendation for live use - hardware-compatibility.md: New storage/boot media section with NVMe HAT compatibility table (official, Pimoroni, Geekworm) - Obsidian wiki: Build section with all 3 targets + EEPROM config - developer-guide.md: Added (from task completion)
726 lines
23 KiB
Markdown
726 lines
23 KiB
Markdown
# User Manual — Raspberry Pi Real-Time Audio Mixer
|
|
|
|
Comprehensive guide to operating the RPi Audio Mixer — from hardware setup to
|
|
live streaming.
|
|
|
|
## Table of Contents
|
|
|
|
1. [Hardware Setup](#1-hardware-setup)
|
|
2. [First Boot & Setup Wizard](#2-first-boot--setup-wizard)
|
|
3. [Web Control Surface](#3-web-control-surface)
|
|
4. [Touchscreen UI](#4-touchscreen-ui)
|
|
5. [MIDI Controller Operation](#5-midi-controller-operation)
|
|
6. [Multi-Track Recording](#6-multi-track-recording)
|
|
7. [Backing Tracks](#7-backing-tracks)
|
|
8. [Live Streaming](#8-live-streaming)
|
|
9. [Session Management](#9-session-management)
|
|
10. [OSC / DAW Integration](#10-osc--daw-integration)
|
|
11. [Plugins & Effects](#11-plugins--effects)
|
|
12. [Fader Automation & Scenes](#12-fader-automation--scenes)
|
|
|
|
---
|
|
|
|
## 1. Hardware Setup
|
|
|
|
### Required Equipment
|
|
|
|
- Raspberry Pi 4 Model B (4GB+ RAM)
|
|
- USB audio interface (class-compliant UAC2)
|
|
- Boot media (choose one):
|
|
- **SD card** (16GB+, Class A2) — good for dev/testing
|
|
- **USB SSD** via USB 3.0 — more reliable, but shares USB bus with audio
|
|
- **NVMe SSD + HAT** (PCIe) — **recommended for live use** — no bus contention
|
|
- 5V/3A USB-C power supply
|
|
- **Optional:** HDMI touchscreen, USB MIDI controller, Ethernet cable, USB camera
|
|
|
|
> 💡 **Storage recommendation:** For live performances and recording, use an NVMe
|
|
> HAT (official RPi, Pimoroni, or Geekworm) with a 128GB+ NVMe SSD. It uses
|
|
> dedicated PCIe lanes and won't compete with your USB audio interface for bandwidth.
|
|
|
|
### Connections
|
|
|
|
```
|
|
┌──────────────────────┐
|
|
USB Audio ←──→ │ │
|
|
Interface │ Raspberry Pi 4B │──→ HDMI Touchscreen
|
|
│ │
|
|
MIDI Controller ──│ │──→ Ethernet (router)
|
|
│ │
|
|
USB Camera ───│ │
|
|
└──────────────────────┘
|
|
│
|
|
5V/3A Power
|
|
```
|
|
|
|
1. Connect the USB audio interface to a **USB 3.0 (blue) port** — these have
|
|
dedicated bandwidth and lower latency than USB 2.0 ports
|
|
2. Connect MIDI controllers to any remaining USB port
|
|
3. Connect the HDMI touchscreen (if using)
|
|
4. Connect Ethernet for reliable networking (WiFi works but can cause audio dropouts)
|
|
5. Insert the SD card and power on
|
|
|
|
### USB Audio Interface Setup
|
|
|
|
The system auto-detects class-compliant USB audio interfaces. For interfaces
|
|
with multiple modes (e.g., Behringer UMC1820), ensure the device is in the
|
|
correct mode before powering on the Pi.
|
|
|
|
Verified interfaces: see [docs/hardware-compatibility.md](hardware-compatibility.md)
|
|
|
|
---
|
|
|
|
## 2. First Boot & Setup Wizard
|
|
|
|
### Booting for the First Time
|
|
|
|
1. Insert your boot media (SD, USB SSD, or NVMe) into the Pi
|
|
2. Connect audio interface, MIDI controllers, and network
|
|
3. Power on
|
|
|
|
> ⚡ If booting from USB SSD or NVMe, the Pi's EEPROM must be configured to try
|
|
> your boot device first. The setup wizard includes an EEPROM configuration step,
|
|
> or you can configure it manually beforehand:
|
|
> ```bash
|
|
> sudo rpi-eeprom-config --edit
|
|
> # USB boot: BOOT_ORDER=0xf41
|
|
> # NVMe boot: BOOT_ORDER=0xf614
|
|
> ```
|
|
|
|
On first boot, the **setup wizard** runs automatically on the HDMI display (or
|
|
serial console). It walks through:
|
|
### Wizard Steps
|
|
|
|
1. **Welcome screen** — language selection
|
|
2. **Audio interface detection** — the wizard scans USB for audio devices and
|
|
presents a list. Select your interface.
|
|
3. **WiFi configuration** — scan for networks, enter password. Skip for Ethernet.
|
|
4. **Hostname** — set a custom hostname (default: `pi-mixer`)
|
|
5. **API key** — auto-generated and displayed. **Write this down** — you need it
|
|
for web UI access. Can be changed later.
|
|
6. **JACK settings** — buffer size and sample rate:
|
|
- **Low latency** (128 frames @ 48kHz, ~2.7ms) — for live monitoring
|
|
- **Stable** (256 frames @ 48kHz, ~5.3ms) — for plugin-heavy sessions
|
|
- **Maximum stability** (512 frames @ 48kHz, ~10.7ms) — for recording
|
|
7. **Reboot** — system restarts into normal operation
|
|
|
|
### Re-running the Wizard
|
|
|
|
```bash
|
|
sudo touch /force-firstboot && sudo reboot
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Web Control Surface
|
|
|
|
Access the mixer from any device on the same network via the web UI.
|
|
|
|
### Access
|
|
|
|
```
|
|
http://pi-mixer.local:8080
|
|
```
|
|
|
|
Or use the IP address:
|
|
```bash
|
|
# Find the Pi's IP
|
|
ssh pi@pi-mixer.local "ip addr show | grep 'inet '"
|
|
# Open http://<ip-address>:8080
|
|
```
|
|
|
|
### Authentication
|
|
|
|
Enter the API key from the setup wizard. The key is also stored in:
|
|
```bash
|
|
grep API_KEY /etc/systemd/system/mixer-api.service
|
|
```
|
|
|
|
### Mixer View
|
|
|
|
The main mixer screen shows:
|
|
|
|
```
|
|
┌─────────┬─────────┬─────────┬─────────┬─────────┐
|
|
│ CH 1 │ CH 2 │ CH 3 │ ... │ Master │
|
|
│ ┌─────┐ │ ┌─────┐ │ ┌─────┐ │ │ ┌─────┐ │
|
|
│ │█████│ │ │███░░│ │ │█░░░░│ │ │ │████░│ │
|
|
│ │█████│ │ │███░░│ │ │█░░░░│ │ │ │████░│ │
|
|
│ │█████│ │ │███░░│ │ │█░░░░│ │ │ │████░│ │
|
|
│ │█████│ │ │███░░│ │ │█░░░░│ │ │ │████░│ │
|
|
│ └─────┘ │ └─────┘ │ └─────┘ │ │ └─────┘ │
|
|
│ -3 dB │ 0 dB │ -∞ dB │ │ -6 dB │
|
|
│ [M][S] │ [M][S] │ [M][S] │ │ [M][D] │
|
|
└─────────┴─────────┴─────────┴─────────┴─────────┘
|
|
```
|
|
|
|
- **Fader** — drag up/down to adjust volume (-60 dB to +12 dB)
|
|
- **M** button — mute the channel (red when active)
|
|
- **S** button — solo the channel (yellow when active)
|
|
- **Channel label** — tap to open channel detail panel
|
|
|
|
### Channel Detail Panel
|
|
|
|
Tap a channel label to open:
|
|
|
|
- **3-band EQ** — Low (20-500 Hz), Mid (200-8000 Hz), High (2000-20000 Hz)
|
|
with frequency, gain (±15 dB), and Q controls
|
|
- **Compressor** — threshold, ratio, attack, release, makeup gain
|
|
- **Gate** — threshold, range
|
|
- **Gain** — preamp gain (-20 to +60 dB)
|
|
- **Pan** — stereo position
|
|
- **FX Sends** — send level to Aux A and Aux B
|
|
- **Phase invert** — toggle
|
|
|
|
### Master Section
|
|
|
|
- **Master Volume** — main output level
|
|
- **Mute** — silence all outputs
|
|
- **Dim** — reduce output by -20 dB (for talkback)
|
|
- **Monitor Volume** — control room monitor level
|
|
- **Phones Volume** — headphone output level
|
|
|
|
### Navigation Tabs
|
|
|
|
- **Mixer** — channel strips and master
|
|
- **Routing** — JACK routing matrix (drag connections between ports)
|
|
- **Plugins** — plugin browser and chain editor
|
|
- **Session** — save/load sessions, setlists
|
|
- **Record** — multi-track recording controls
|
|
- **Stream** — live streaming controls
|
|
- **Settings** — API key, network, display, audio config
|
|
|
|
### Keyboard Shortcuts (Web UI)
|
|
|
|
| Key | Action |
|
|
|-----|--------|
|
|
| `1-8` | Select channel 1-8 |
|
|
| `↑/↓` | Adjust fader ±1 dB |
|
|
| `Shift+↑/↓` | Adjust fader ±0.1 dB |
|
|
| `M` | Toggle mute on selected channel |
|
|
| `S` | Toggle solo on selected channel |
|
|
| `Space` | Transport play/stop |
|
|
| `R` | Start/stop recording |
|
|
| `Esc` | Deselect channel |
|
|
|
|
---
|
|
|
|
## 4. Touchscreen UI
|
|
|
|
The Kivy-based touch UI runs directly on the HDMI display — no browser needed.
|
|
|
|
### Screen Layout
|
|
|
|
The UI has four screens, cycled by swiping or pressing ESC:
|
|
|
|
1. **Mixer Surface** — faders, meters, mute/solo for all 16 channels + master
|
|
2. **Routing Matrix** — drag to connect JACK audio ports
|
|
3. **Plugin Chain** — per-channel plugin slots with drag-and-drop
|
|
4. **Settings** — brightness, display timeout, DPI override
|
|
|
|
### Touch Gestures
|
|
|
|
| Gesture | Action |
|
|
|---------|--------|
|
|
| Swipe up/down on fader | Adjust volume |
|
|
| Tap fader cap | Select channel |
|
|
| Double-tap fader | Set to 0 dB (unity) |
|
|
| Swipe left/right | Navigate between screens |
|
|
| Long-press mute/solo | Latch mode (stays until pressed again) |
|
|
| Pinch (routing screen) | Zoom routing matrix |
|
|
|
|
### Launch Options
|
|
|
|
```bash
|
|
# Local mixer
|
|
python3 main_touch.py
|
|
|
|
# Remote mixer
|
|
python3 main_touch.py --host 192.168.1.10 --api-key my-key
|
|
|
|
# Force DPI (for non-standard displays)
|
|
KIVY_DPI=220 python3 main_touch.py
|
|
```
|
|
|
|
### Hardware Buttons (if available)
|
|
|
|
Some touchscreens include physical buttons that can be mapped:
|
|
|
|
```bash
|
|
# Example udev rule for Waveshare 5" buttons
|
|
# Maps KEY_UP/DOWN to channel select
|
|
```
|
|
|
|
---
|
|
|
|
## 5. MIDI Controller Operation
|
|
|
|
Connect any class-compliant USB MIDI controller to control mixer parameters.
|
|
|
|
### Supported Controllers
|
|
|
|
The MIDI engine auto-detects controllers. Pre-configured mappings exist for:
|
|
|
|
- **Behringer X-Touch** — 8 motorized faders, transport, scribble strips
|
|
- **Akai MIDImix** — 8 faders, 24 knobs, 16 buttons
|
|
- **Korg nanoKONTROL 2** — 8 faders, 8 knobs, transport
|
|
- **Novation Launch Control XL** — 8 faders, 24 knobs, 16 buttons
|
|
|
|
See [docs/hardware-compatibility.md](hardware-compatibility.md) for the full list
|
|
and custom mapping instructions.
|
|
|
|
### MIDI Learn Mode
|
|
|
|
Map any MIDI controller to any mixer parameter without editing config files:
|
|
|
|
1. **Enter learn mode:**
|
|
```bash
|
|
curl -X POST http://pi-mixer.local:8080/midi/learn/start \
|
|
-H "X-API-Key: your-key"
|
|
```
|
|
Or press the "Learn" button in the web UI or touch UI.
|
|
|
|
2. **Click the parameter** you want to map (e.g., Channel 3 Volume)
|
|
|
|
3. **Move the physical control** on your MIDI controller (fader, knob, or button)
|
|
|
|
4. The mapping is saved automatically. Exit learn mode:
|
|
```bash
|
|
curl -X POST http://pi-mixer.local:8080/midi/learn/stop \
|
|
-H "X-API-Key: your-key"
|
|
```
|
|
|
|
### MIDI Clock Sync
|
|
|
|
The mixer can act as MIDI clock master or slave:
|
|
|
|
- **Master mode:** mixer transport controls tempo; connected devices sync to it
|
|
- **Slave mode:** mixer follows external MIDI clock from a drum machine or DAW
|
|
|
|
Configure via the web UI → Settings → MIDI or via API:
|
|
```bash
|
|
# Set as slave
|
|
curl -X PUT http://pi-mixer.local:8080/midi/clock/mode \
|
|
-H "X-API-Key: your-key" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"mode": "slave"}'
|
|
```
|
|
|
|
### NRPN Support
|
|
|
|
High-resolution 14-bit NRPN messages are supported for parameters that benefit
|
|
from fine control (filter frequency, Q, etc.). The MIDI engine auto-detects
|
|
NRPN vs. CC messages from your controller.
|
|
|
|
---
|
|
|
|
## 6. Multi-Track Recording
|
|
|
|
Record up to 16 channels simultaneously to individual WAV files.
|
|
|
|
### Recording Setup
|
|
|
|
1. **Arm tracks** — in the web UI, click the **R** (record arm) button on each
|
|
channel you want to record. Armed channels show a red indicator.
|
|
|
|
2. **Set recording directory:**
|
|
The default is `/data/recordings/session_NNN/`. Change via:
|
|
```bash
|
|
curl -X PUT http://pi-mixer.local:8080/recording/path \
|
|
-H "X-API-Key: your-key" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"path": "/data/recordings/live-set-2026"}'
|
|
```
|
|
|
|
3. **Configure recording format:**
|
|
- Bit depth: 16-bit, 24-bit, or 32-bit float
|
|
- Sample rate: inherits from JACK (48 kHz default)
|
|
- Punch in/out: set in/out points for selective recording
|
|
|
|
### Recording Controls
|
|
|
|
| Action | Web UI | API |
|
|
|--------|--------|-----|
|
|
| Start recording | Press **⏺ Record** | `POST /transport/command {"command": "record"}` |
|
|
| Stop recording | Press **⏹ Stop** | `POST /transport/command {"command": "stop"}` |
|
|
| Punch in | Automatic at marker | `POST /recording/punch/in {"channel": 3}` |
|
|
| Punch out | Automatic at marker | `POST /recording/punch/out {"channel": 3}` |
|
|
| New take | Creates new take file | `POST /recording/take/new` |
|
|
|
|
### Recording Tips
|
|
|
|
- **Use a fast SD card** — Class A2 minimum for 16-track recording.
|
|
Class A1 works for 8 tracks or fewer.
|
|
- **Monitor disk space** with `df -h /data`. The web UI shows a disk meter.
|
|
- **Punch in/out** is seamless — no clicks or gaps at edit points.
|
|
- **Auto-save** backs up session state every 30 seconds during recording.
|
|
- Each recording session creates a timestamped directory:
|
|
`/data/recordings/session_001/` containing `channel_01.wav` through
|
|
`channel_16.wav` plus `session_metadata.json`.
|
|
|
|
---
|
|
|
|
## 7. Backing Tracks
|
|
|
|
Play synchronized backing tracks alongside live inputs.
|
|
|
|
### Setup
|
|
|
|
1. **Upload tracks** to `/data/backing/`:
|
|
```bash
|
|
scp my-backing.wav pi@pi-mixer.local:/data/backing/
|
|
```
|
|
|
|
2. **Supported formats:** WAV (16/24/32-bit), FLAC, MP3, AIFF, OGG
|
|
|
|
3. **Create a playlist** via the web UI → Backing Tracks → New Playlist, or:
|
|
```bash
|
|
curl -X POST http://pi-mixer.local:8080/backing/playlist \
|
|
-H "X-API-Key: your-key" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"name": "Set 1", "tracks": ["intro.wav", "song1.wav", "song2.flac"]}'
|
|
```
|
|
|
|
### Playback Modes
|
|
|
|
- **One-shot** — play once and stop
|
|
- **Loop** — repeat indefinitely
|
|
- **Segue** — auto-advance to next track with configurable crossfade (0.5-10s)
|
|
- **Playlist** — sequential playback with optional transitions
|
|
|
|
### Transport Controls
|
|
|
|
| Control | Description |
|
|
|---------|-------------|
|
|
| Play | Start playback from current position |
|
|
| Stop | Stop and return to start |
|
|
| Pause | Pause at current position |
|
|
| Skip →| | Next track |
|
|
| Skip |← | Previous track |
|
|
| Loop | Toggle loop mode |
|
|
| Count-in | Play 1-2 bar count-in before playback |
|
|
|
|
### Metronome / Click Track
|
|
|
|
The built-in metronome provides a click track routed to a dedicated output:
|
|
|
|
- **Tempo:** 20-300 BPM (tap tempo supported)
|
|
- **Time signature:** 1/4 through 13/8
|
|
- **Sounds:** click, beep, sidestick, custom samples
|
|
- **Output routing:** typically phones or a dedicated aux output
|
|
|
|
```bash
|
|
# Set tempo and enable click
|
|
curl -X PUT http://pi-mixer.local:8080/transport/tempo \
|
|
-H "X-API-Key: your-key" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"bpm": 128}'
|
|
curl -X POST http://pi-mixer.local:8080/transport/metronome/on \
|
|
-H "X-API-Key: your-key"
|
|
```
|
|
|
|
---
|
|
|
|
## 8. Live Streaming
|
|
|
|
Stream audio and video to YouTube, Twitch, Facebook Live, or any RTMP server.
|
|
|
|
### Quick Start — Stream to YouTube
|
|
|
|
1. **Get your stream key** from YouTube Studio → Go Live → Stream Settings
|
|
|
|
2. **Connect a USB camera** (or use Raspberry Pi Camera Module)
|
|
|
|
3. **Start streaming** via the web UI → Stream, or:
|
|
```bash
|
|
curl -X POST http://pi-mixer.local:8080/stream/start \
|
|
-H "X-API-Key: your-key" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"platform": "youtube",
|
|
"stream_key": "your-youtube-stream-key",
|
|
"video_source": "usb",
|
|
"audio_source": "mixer_master",
|
|
"bitrate_video": 4500,
|
|
"bitrate_audio": 192
|
|
}'
|
|
```
|
|
|
|
### Platform Presets
|
|
|
|
| Platform | Video Bitrate | Audio Bitrate | Resolution | Notes |
|
|
|----------|--------------|---------------|------------|-------|
|
|
| YouTube | 4500-9000 Kbps | 192 Kbps | 1080p30/720p60 | H.264 recommended |
|
|
| Twitch | 4500-6000 Kbps | 160 Kbps | 1080p30/720p60 | Max 6000 Kbps |
|
|
| Facebook | 4000 Kbps | 128 Kbps | 720p30 | Max 720p |
|
|
| Custom RTMP | User-defined | User-defined | User-defined | Any RTMP server |
|
|
|
|
### Scenes
|
|
|
|
Create named scenes with different camera angles and overlays:
|
|
|
|
```bash
|
|
# Save current camera/layout as scene
|
|
curl -X POST http://pi-mixer.local:8080/stream/scenes/wide-shot/save \
|
|
-H "X-API-Key: your-key"
|
|
|
|
# Switch scenes
|
|
curl -X POST http://pi-mixer.local:8080/stream/scenes/close-up/load \
|
|
-H "X-API-Key: your-key"
|
|
```
|
|
|
|
### Streaming Tips
|
|
|
|
- **Use Ethernet** — WiFi can cause dropped frames. If using WiFi, reduce
|
|
bitrate to 2500 Kbps.
|
|
- **Monitor bitrate** — the web UI shows a real-time bitrate meter. If it
|
|
drops, reduce video bitrate.
|
|
- **Dedicated audio bus** — route the stream audio to a subgroup for
|
|
independent level control vs. live PA.
|
|
- **CPU headroom** — 16 channels + streaming uses ~60% CPU on RPi 4.
|
|
Reduce channel count or buffer size if you hit limits.
|
|
|
|
---
|
|
|
|
## 9. Session Management
|
|
|
|
Save and recall complete mixer states — all fader positions, EQ settings,
|
|
plugin states, routing, and transport.
|
|
|
|
### Save a Session
|
|
|
|
Via web UI → Session → Save, or:
|
|
```bash
|
|
curl -X POST http://pi-mixer.local:8080/sessions/save \
|
|
-H "X-API-Key: your-key" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"name": "Live at The Garage", "notes": "Soundcheck levels"}'
|
|
```
|
|
|
|
### Load a Session
|
|
|
|
```bash
|
|
curl -X POST "http://pi-mixer.local:8080/sessions/Live%20at%20The%20Garage/load" \
|
|
-H "X-API-Key: your-key"
|
|
```
|
|
|
|
### Setlists
|
|
|
|
Group sessions into setlists with configurable transitions:
|
|
|
|
1. Create a setlist:
|
|
```bash
|
|
curl -X POST http://pi-mixer.local:8080/setlists \
|
|
-H "X-API-Key: your-key" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"name": "Summer Tour Set",
|
|
"items": [
|
|
{"session": "Soundcheck", "transition": "cut"},
|
|
{"session": "Opener", "transition": "crossfade", "duration": 3.0},
|
|
{"session": "Main Set", "transition": "crossfade", "duration": 5.0},
|
|
{"session": "Encore", "transition": "wait"}
|
|
]
|
|
}'
|
|
```
|
|
|
|
2. Transition types:
|
|
- **Cut** — instant switch
|
|
- **Crossfade** — smooth transition over N seconds
|
|
- **Wait** — manual advance (press "Next")
|
|
|
|
### Auto-Save
|
|
|
|
The mixer auto-saves state every 30 seconds (configurable) to
|
|
`~/.config/rpi-mixer/sessions/_autosave_YYYY-MM-DD.json`. The last 10
|
|
auto-saves are kept (older ones are rotated out).
|
|
|
|
### Snapshots
|
|
|
|
Capture instantaneous snapshots without creating a full session:
|
|
|
|
```bash
|
|
# MIDI-mappable: assign a button to snapshot save/load
|
|
# Save snapshot 3 (0-127 snapshots available)
|
|
curl -X POST http://pi-mixer.local:8080/snapshots/3/save \
|
|
-H "X-API-Key: your-key"
|
|
|
|
# Load snapshot 3
|
|
curl -X POST http://pi-mixer.local:8080/snapshots/3/load \
|
|
-H "X-API-Key: your-key"
|
|
```
|
|
|
|
---
|
|
|
|
## 10. OSC / DAW Integration
|
|
|
|
The mixer exposes all parameters via Open Sound Control, enabling integration
|
|
with DAWs (Ableton Live, Reaper, Bitwig, Ardour) and custom controllers.
|
|
|
|
### OSC Server
|
|
|
|
- **Address:** `pi-mixer.local:9001` (UDP)
|
|
- **Endpoint format:** `/mixer/channel/<n>/<parameter>`
|
|
- **Value range:** 0.0 to 1.0 (normalized)
|
|
|
|
### Common OSC Commands
|
|
|
|
```
|
|
/mixer/channel/1/volume 0.75 # Set channel 1 volume to 0 dB
|
|
/mixer/channel/1/mute 1 # Mute channel 1
|
|
/mixer/channel/1/pan -0.5 # Pan channel 1 left
|
|
/mixer/channel/1/eq_low_gain 0.5 # Boost channel 1 low EQ by 7.5 dB
|
|
/mixer/master/volume 0.8 # Set master volume
|
|
/mixer/transport/play 1 # Start transport
|
|
/mixer/transport/stop 1 # Stop transport
|
|
/mixer/transport/tempo 128.0 # Set tempo to 128 BPM
|
|
```
|
|
|
|
### OSC Query
|
|
|
|
The server responds to OSC queries:
|
|
```
|
|
/mixer/channel/1/volume → returns current value
|
|
/mixer/channel/*/volume → returns all 16 channel volumes
|
|
```
|
|
|
|
### Ableton Live Setup
|
|
|
|
1. Add a new MIDI/OSC controller in Ableton preferences
|
|
2. Configure output to `pi-mixer.local:9001` (UDP)
|
|
3. Map Live's faders to `/mixer/channel/N/volume`
|
|
4. Map Live's transport to `/mixer/transport/play`, `/mixer/transport/stop`
|
|
|
|
---
|
|
|
|
## 11. Plugins & Effects
|
|
|
|
The mixer uses **Carla** as its plugin host, supporting LV2, VST2, and NAM
|
|
(Neural Amp Modeler) formats.
|
|
|
|
### Plugin Browser
|
|
|
|
Access via web UI → Plugins. Browse by category:
|
|
|
|
- **Dynamics** — compressors, gates, limiters, expanders
|
|
- **EQ** — parametric, graphic, shelving
|
|
- **Reverb** — plate, hall, room, spring
|
|
- **Delay** — digital, tape, ping-pong
|
|
- **Modulation** — chorus, flanger, phaser, tremolo
|
|
- **Distortion** — overdrive, fuzz, amp sims, NAM captures
|
|
- **Utility** — meters, analyzers, routing tools
|
|
|
|
### Per-Channel Plugin Chain
|
|
|
|
Each channel supports up to 8 plugin slots in series:
|
|
|
|
```
|
|
Input → [Gate] → [EQ] → [Comp] → [Amp] → [FX Slot 1] → [FX Slot 2] → Fader → Output
|
|
```
|
|
|
|
Plugins can be reordered by dragging in the UI.
|
|
|
|
### Aux Sends & Returns
|
|
|
|
Four aux buses (FX A through D) provide shared effects:
|
|
|
|
1. Route a channel to an aux via its **FX Send** knob
|
|
2. Insert effects on the aux return (e.g., reverb on Aux A, delay on Aux B)
|
|
3. Blend the wet signal with the channel strip's dry signal
|
|
4. Control the overall aux level via **FX Return** faders in the master section
|
|
|
|
### NAM (Neural Amp Modeler)
|
|
|
|
Load guitar/bass amp captures for realistic amp simulation:
|
|
|
|
1. Place `.nam` files in `/data/presets/nam/`
|
|
2. Insert a NAM plugin on a channel
|
|
3. Select the capture from the dropdown
|
|
4. Adjust input gain and output level
|
|
|
|
```bash
|
|
# Scan for new NAM models
|
|
curl -X POST http://pi-mixer.local:8080/plugins/scan \
|
|
-H "X-API-Key: your-key"
|
|
```
|
|
|
|
---
|
|
|
|
## 12. Fader Automation & Scenes
|
|
|
|
### Fader Automation
|
|
|
|
Record and playback fader movements:
|
|
|
|
1. **Arm automation** for a channel (click **A** button)
|
|
2. **Press Play** — fader movements are recorded
|
|
3. **Press Stop** — automation lane is saved
|
|
4. **Playback** — faders move automatically according to recorded automation
|
|
5. **Overwrite** — re-record by arming again
|
|
|
|
Automation modes:
|
|
- **Read** — playback recorded automation (fader is read-only)
|
|
- **Write** — record new automation (overwrites existing)
|
|
- **Touch** — record only while touching the fader
|
|
- **Latch** — record from first touch until stop
|
|
|
|
### Scenes
|
|
|
|
Scenes are snapshots of all fader positions that can be recalled instantly:
|
|
|
|
1. **Save a scene:**
|
|
```bash
|
|
curl -X POST http://pi-mixer.local:8080/scenes/Chorus/save \
|
|
-H "X-API-Key: your-key"
|
|
```
|
|
|
|
2. **Load a scene** (instant recall):
|
|
```bash
|
|
curl -X POST http://pi-mixer.local:8080/scenes/Chorus/load \
|
|
-H "X-API-Key: your-key"
|
|
```
|
|
|
|
3. **Next/Previous scene** (MIDI-mappable for footswitch control)
|
|
|
|
Modifier scenes only affect specific channels:
|
|
|
|
```bash
|
|
# Save a modifier scene that only changes channels 1-4
|
|
curl -X POST http://pi-mixer.local:8080/scenes/Vocals-Up/save \
|
|
-H "X-API-Key: your-key" \
|
|
-d '{"mode": "modifier", "channels": [1, 2, 3, 4]}'
|
|
```
|
|
|
|
---
|
|
|
|
## Appendix: REST API Quick Reference
|
|
|
|
All endpoints require `X-API-Key` header.
|
|
|
|
| Method | Endpoint | Description |
|
|
|--------|----------|-------------|
|
|
| GET | `/channels` | List all channel states |
|
|
| GET | `/channels/{n}` | Get channel n state |
|
|
| PUT | `/channels/{n}/parameter` | Set channel parameter |
|
|
| GET | `/mixes` | Master bus + aux + subgroups |
|
|
| PUT | `/mixes/parameter` | Set master parameter |
|
|
| GET | `/transport` | Transport state |
|
|
| PUT | `/transport/command` | Play/stop/record/loop |
|
|
| GET | `/routing` | JACK routing matrix |
|
|
| GET | `/plugins` | Plugin list |
|
|
| GET | `/scenes` | Scene list |
|
|
| POST | `/scenes/{name}/save` | Save current state as scene |
|
|
| POST | `/scenes/{name}/load` | Load a scene |
|
|
| GET | `/sessions` | Session list |
|
|
| POST | `/sessions/{name}/save` | Save session |
|
|
| POST | `/sessions/{name}/load` | Load session |
|
|
| POST | `/setlists` | Create setlist |
|
|
| GET | `/stream/status` | Streaming status |
|
|
| POST | `/stream/start` | Start streaming |
|
|
| POST | `/stream/stop` | Stop streaming |
|
|
| POST | `/recording/start` | Start recording |
|
|
| POST | `/recording/stop` | Stop recording |
|
|
| POST | `/midi/learn/start` | Enter MIDI learn mode |
|
|
| POST | `/midi/learn/stop` | Exit MIDI learn mode |
|
|
| GET | `/stats` | Server statistics |
|
|
| GET | `/ws` | WebSocket for real-time updates |
|