Created
September 8, 2025 11:42
-
-
Save louspringer/a476dd3db3e7e4cc1b7e0a46f3a3dcb4 to your computer and use it in GitHub Desktop.
Awesome zoom whoopee cushion set up
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| <svg xmlns="http://www.w3.org/2000/svg" width="1320" height="760" viewBox="0 0 1320 760"> | |
| <defs> | |
| <style> | |
| .box { fill: #f7f7f7; stroke: #222; stroke-width: 2; rx: 14; ry: 14; } | |
| .title { font: bold 20px sans-serif; fill: #111; } | |
| .text { font: 16px sans-serif; fill: #222; } | |
| .small { font: 14px monospace; fill: #333; } | |
| .arrow { stroke: #222; stroke-width: 2; marker-end: url(#arrowhead); fill: none; } | |
| .arrow-soft { stroke: #666; stroke-dasharray: 6 6; stroke-width: 2; marker-end: url(#arrowheadSoft); fill: none; } | |
| .chip { fill: #e9f2ff; stroke: #1d3f72; stroke-width: 2; rx: 10; ry: 10; } | |
| .act { fill: #fff6e5; stroke: #7a4a00; stroke-width: 2; rx: 10; ry: 10; } | |
| .io { fill: #eefaf0; stroke: #1f6a2f; stroke-width: 2; rx: 10; ry: 10; } | |
| .warn { fill: #fff3cd; stroke: #856404; stroke-width: 2; rx: 10; ry: 10; } | |
| .danger { fill: #fdecea; stroke: #7b241c; stroke-width: 2; rx: 10; ry: 10; } | |
| .legend { font: 14px sans-serif; fill: #333; } | |
| </style> | |
| <marker id="arrowhead" markerWidth="10" markerHeight="7" refX="10" refY="3.5" orient="auto"> | |
| <polygon points="0 0, 10 3.5, 0 7" fill="#222" /> | |
| </marker> | |
| <marker id="arrowheadSoft" markerWidth="10" markerHeight="7" refX="10" refY="3.5" orient="auto"> | |
| <polygon points="0 0, 10 3.5, 0 7" fill="#666" /> | |
| </marker> | |
| </defs> | |
| <!-- Title --> | |
| <text x="660" y="40" text-anchor="middle" class="title">Clip Cushion™ — Audio-Level Triggered Gag System</text> | |
| <text x="660" y="68" text-anchor="middle" class="small">Yellow: peak ≥ –10 dBFS (≥ 80 ms) • Red: peak ≥ –3 dBFS (≥ 30 ms) • Cooldowns: Yellow 1.5 s, Red 3 s • Priority: Red suppresses Yellow for 2 s</text> | |
| <!-- Row 1: Input chain --> | |
| <rect x="60" y="110" width="230" height="120" class="io"/> | |
| <text x="175" y="140" text-anchor="middle" class="text">Mic: Electro‑Voice RE20</text> | |
| <text x="175" y="168" text-anchor="middle" class="small">Dynamic • ~–56.5 dBV/Pa • 2–4" off‑axis</text> | |
| <text x="175" y="196" text-anchor="middle" class="small">Pop filter • No phantom (48V off)</text> | |
| <line x1="290" y1="170" x2="340" y2="170" class="arrow"/> | |
| <rect x="340" y="110" width="230" height="120" class="io"/> | |
| <text x="455" y="140" text-anchor="middle" class="text">Interface: MOTU M4</text> | |
| <text x="455" y="168" text-anchor="middle" class="small">Gain ≈ 55–60 dB • 24‑bit/48 kHz</text> | |
| <text x="455" y="196" text-anchor="middle" class="small">Keep peaks in yellow, avoid red</text> | |
| <line x1="570" y1="170" x2="620" y2="170" class="arrow"/> | |
| <rect x="620" y="100" width="260" height="140" class="chip"/> | |
| <text x="750" y="130" text-anchor="middle" class="text">Level Monitor & Trigger Logic</text> | |
| <text x="750" y="158" text-anchor="middle" class="small">Peak detector: attack 5–10 ms • release 150–250 ms</text> | |
| <text x="750" y="186" text-anchor="middle" class="small">Hysteresis: re‑arm when < (threshold – 3 dB) for ≥ 200 ms</text> | |
| <!-- Branches: software and hardware --> | |
| <line x1="750" y1="240" x2="750" y2="290" class="arrow"/> | |
| <!-- Software branch --> | |
| <rect x="420" y="290" width="320" height="140" class="box"/> | |
| <text x="580" y="318" text-anchor="middle" class="text">Software Output Path</text> | |
| <text x="580" y="346" text-anchor="middle" class="small">Play local WAV: yellow → “pffft”, red → “BRAAAP”</text> | |
| <text x="580" y="374" text-anchor="middle" class="small">Route to monitors only (no loopback to call)</text> | |
| <!-- Hardware branch --> | |
| <rect x="760" y="290" width="320" height="140" class="box"/> | |
| <text x="920" y="318" text-anchor="middle" class="text">Hardware Output Path</text> | |
| <text x="920" y="346" text-anchor="middle" class="small">Send UDP/OSC/Serial to ESP32</text> | |
| <text x="920" y="374" text-anchor="middle" class="small">Duty guard: ≤ 1.5 s in any 10 s window</text> | |
| <line x1="580" y1="240" x2="580" y2="290" class="arrow"/> | |
| <line x1="920" y1="240" x2="920" y2="290" class="arrow"/> | |
| <!-- Threshold cards --> | |
| <rect x="80" y="300" width="300" height="60" class="warn"/> | |
| <text x="230" y="335" text-anchor="middle" class="text">Yellow Threshold</text> | |
| <text x="230" y="360" text-anchor="middle" class="small">peak ≥ –10 dBFS for ≥ 80 ms → small toot • cooldown 1.5 s</text> | |
| <rect x="80" y="380" width="300" height="60" class="danger"/> | |
| <text x="230" y="415" text-anchor="middle" class="text">Red Threshold</text> | |
| <text x="230" y="440" text-anchor="middle" class="small">peak ≥ –3 dBFS for ≥ 30 ms → big BRAAAP • cooldown 3 s</text> | |
| <!-- Call apps --> | |
| <rect x="60" y="510" width="240" height="110" class="box"/> | |
| <text x="180" y="540" text-anchor="middle" class="text">Call / DAW</text> | |
| <text x="180" y="568" text-anchor="middle" class="small">Zoom • Discord • DAW</text> | |
| <text x="180" y="596" text-anchor="middle" class="small">Optional: soft limiter at –3 dBFS</text> | |
| <!-- ESP32 block --> | |
| <rect x="910" y="460" width="160" height="110" class="chip"/> | |
| <text x="990" y="490" text-anchor="middle" class="text">ESP32</text> | |
| <text x="990" y="518" text-anchor="middle" class="small">State machine • cooldowns</text> | |
| <text x="990" y="544" text-anchor="middle" class="small">GPIO → driver</text> | |
| <!-- Driver & Actuator --> | |
| <rect x="1090" y="460" width="190" height="110" class="act"/> | |
| <text x="1185" y="490" text-anchor="middle" class="text">Actuator</text> | |
| <text x="1185" y="518" text-anchor="middle" class="small">MOSFET + diode → pump / solenoid / servo</text> | |
| <text x="1185" y="544" text-anchor="middle" class="small">Inflate/press whoopee cushion</text> | |
| <!-- Arrows among lower blocks --> | |
| <line x1="750" y1="170" x2="230" y2="300" class="arrow-soft"/> | |
| <line x1="750" y1="170" x2="230" y2="380" class="arrow-soft"/> | |
| <line x1="260" y1="170" x2="180" y2="510" class="arrow-soft"/> | |
| <line x1="740" y1="360" x2="740" y2="440" class="arrow-soft"/> | |
| <line x1="1080" y1="360" x2="990" y2="460" class="arrow"/> | |
| <line x1="1070" y1="515" x2="1090" y2="515" class="arrow"/> | |
| <line x1="1250" y1="515" x2="1270" y2="515" class="arrow"/> | |
| <!-- Legend --> | |
| <rect x="430" y="640" width="460" height="90" class="box"/> | |
| <text x="660" y="666" text-anchor="middle" class="legend"> | |
| Legend: Green = I/O • Blue = Logic/Microcontroller • Orange = Actuation • Yellow = Warning threshold • Red = Over threshold | |
| </text> | |
| <text x="660" y="692" text-anchor="middle" class="legend"> | |
| Hysteresis prevents chatter • Cooldowns avoid spam • Red overrides Yellow | |
| </text> | |
| </svg> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment