Initial commit: Arduino Uno Q USB Audio Synth project

- USB gadget (UAC1 + MIDI) with boot persistence
- USB host mode with auto-detection
- Pure Data synth patch with ALSA + UDP netreceive MIDI input
- MIDI rawmidi-to-UDP bridge (midi-bridge.py)
- LED matrix visualization (led-matrix-viz.py via arduino-router RPC)
- MCU sketch for LED matrix control (Arduino_RouterBridge + ArduinoGraphics)
- Conftest/OPA Rego policy validation suite for .pd files
- gen_synth_pd.py: programmatic .pd file generator
- System services: midi-bridge, led-matrix-viz, pd-synth-auto, usb-role-detect
- Justfile with deploy, enable, diagnostic recipes
- Diagnostic script (diag.sh)
This commit is contained in:
2026-06-22 22:46:36 -07:00
commit 8cd796e3dd
38 changed files with 2681 additions and 0 deletions
+79
View File
@@ -0,0 +1,79 @@
#N canvas 0 0 900 500 10;
#X obj 5 5 loadbang;
#X msg 5 25 pd dsp 1;
#X connect 0 0 1 0;
#X text 20 10 -- NOTE BUTTONS (click to play) --;
#X text 22 50 C3;
#X obj 20 70 bng 15 15 0 1 0 0 empty empty -2 -8 0 10 -262144 -1 -1;
#X msg 20 100 48 100;
#X obj 20 130 noteout;
#X connect 4 0 5 0;
#X connect 5 0 6 0;
#X text 62 50 D3;
#X obj 60 70 bng 15 15 0 1 0 0 empty empty -2 -8 0 10 -262144 -1 -1;
#X msg 60 100 50 100;
#X obj 60 130 noteout;
#X connect 8 0 9 0;
#X connect 9 0 10 0;
#X text 102 50 E3;
#X obj 100 70 bng 15 15 0 1 0 0 empty empty -2 -8 0 10 -262144 -1 -1;
#X msg 100 100 52 100;
#X obj 100 130 noteout;
#X connect 12 0 13 0;
#X connect 13 0 14 0;
#X text 142 50 F3;
#X obj 140 70 bng 15 15 0 1 0 0 empty empty -2 -8 0 10 -262144 -1 -1;
#X msg 140 100 53 100;
#X obj 140 130 noteout;
#X connect 16 0 17 0;
#X connect 17 0 18 0;
#X text 182 50 G3;
#X obj 180 70 bng 15 15 0 1 0 0 empty empty -2 -8 0 10 -262144 -1 -1;
#X msg 180 100 55 100;
#X obj 180 130 noteout;
#X connect 20 0 21 0;
#X connect 21 0 22 0;
#X text 222 50 A3;
#X obj 220 70 bng 15 15 0 1 0 0 empty empty -2 -8 0 10 -262144 -1 -1;
#X msg 220 100 57 100;
#X obj 220 130 noteout;
#X connect 24 0 25 0;
#X connect 25 0 26 0;
#X text 262 50 B3;
#X obj 260 70 bng 15 15 0 1 0 0 empty empty -2 -8 0 10 -262144 -1 -1;
#X msg 260 100 59 100;
#X obj 260 130 noteout;
#X connect 28 0 29 0;
#X connect 29 0 30 0;
#X text 302 50 C4;
#X obj 300 70 bng 15 15 0 1 0 0 empty empty -2 -8 0 10 -262144 -1 -1;
#X msg 300 100 60 100;
#X obj 300 130 noteout;
#X connect 32 0 33 0;
#X connect 33 0 34 0;
#X text 20 210 -- CONTROLS --;
#X obj 30 230 hsl 128 15 0 127 64 0 0 0 empty Filter-CC -2 -8 0 10 -262144 -1 -1 7200 1;
#X obj 30 270 ctlout 74;
#X connect 36 0 37 0;
#X text 20 310 -- AUDIO MONITOR --;
#X obj 30 330 adc~ 1;
#X obj 30 370 *~;
#X obj 30 410 dac~ 1 2;
#X obj 140 330 hsl 128 15 0 100 50 0 0 0 empty Monitor-Volume -2 -8 0 10 -262144 -1 -1 7200 1;
#X obj 140 370 / 100;
#X connect 39 0 40 0;
#X connect 40 0 41 0;
#X connect 40 0 41 1;
#X connect 42 0 43 0;
#X connect 43 0 40 1;
+64
View File
@@ -0,0 +1,64 @@
#N canvas 0 0 900 550 10;
#X obj 20 20 notein;
#X obj 80 50 pack 0 0;
#X obj 80 80 unpack 0 0;
#X obj 20 110 s midi-pitch;
#X obj 80 110 s midi-vel;
#X obj 400 20 netreceive -u 8081;
#X obj 400 60 route midi;
#X obj 400 100 route 144 128;
#X obj 400 140 unpack 0 0;
#X obj 480 140 unpack 0 0;
#X obj 400 180 s midi-pitch;
#X obj 480 180 s midi-vel;
#X obj 20 160 r midi-vel;
#X obj 20 190 r midi-pitch;
#X obj 20 220 stripnote;
#X obj 20 260 mtof;
#X obj 20 290 env~ 50 200 0.7 400;
#X obj 140 260 osc~;
#X obj 140 290 *~ 0.3;
#X obj 220 260 osc~;
#X obj 220 290 *~ 0.3;
#X obj 180 330 +~;
#X obj 180 360 *~ 0.5;
#X obj 180 400 lop~;
#X obj 180 460 *~;
#X obj 320 460 *~;
#X obj 250 530 dac~;
#X obj 350 330 hsl 128 15 100 18000 10000 0 0 0 empty Cutoff -2 -8 0 10 -262144 -1 -1 7200 1;
#X obj 350 430 hsl 128 15 0 100 40 0 0 0 empty Volume -2 -8 0 10 -262144 -1 -1 7200 1;
#X obj 350 460 / 100;
#X connect 0 0 1 0;
#X connect 0 1 1 1;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 2 1 4 0;
#X connect 5 0 6 0;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 7 1 9 0;
#X connect 8 0 10 0;
#X connect 8 1 11 0;
#X connect 9 0 10 0;
#X connect 9 1 11 0;
#X connect 12 0 14 1;
#X connect 13 0 14 0;
#X connect 14 0 15 0;
#X connect 15 0 17 0;
#X connect 15 0 19 0;
#X connect 17 0 18 0;
#X connect 19 0 20 0;
#X connect 18 0 21 0;
#X connect 20 0 21 1;
#X connect 21 0 22 0;
#X connect 22 0 23 0;
#X connect 23 0 24 0;
#X connect 14 0 16 0;
#X connect 16 0 24 1;
#X connect 24 0 25 0;
#X connect 27 0 23 1;
#X connect 28 0 29 0;
#X connect 29 0 25 1;
#X connect 25 0 26 0;
#X connect 25 0 26 1;