brutality
BRUTALITY ENGINE — Manuale Tecnico
BRUTALITY ENGINE — MANUAL SCRIPTUM & GUIDA TECNICA COMPLETA
Autori & Sviluppo: Marco Tarabella, LLM Google Ai studio - Claude Sonnet (poco) Versione Piattaforma: 2.5 (Dual-Engine Parallel Ambient Matrix & Kiosk Edition)
Target Hardware: Linux Minimal (x86_64, i686, PowerPC G4) | JACK Audio Server | Openbox
PARTE 1 — INTRODUZIONE E ARCHITETTURA DI SISTEMA
BRUTALITY ENGINE è un’infrastruttura musicale standalone per Linux scritta in C++17. Progettata per girare su hardware datato e recuperato (notebook/netbook con CPU Celeron, Intel Centrino o PowerPC, poca RAM e schede grafiche integrate), la piattaforma trasforma la macchina in uno strumento musicale hardware dedicato: all’accensione il sistema mostra esclusivamente la propria interfaccia grafica senza desktop environment o distrazioni.
Il nome deriva dall’estetica brutalista dell’interfaccia: essenziale, ad altissimo contrasto, priva di orpelli estetici inutili e focalizzata al 100% sulla stabilità real-time e sulle prestazioni dal vivo.
┌──────────────────────────────────────────────┐
│ BRUTALITY ENGINE (C++17) │
│ (Step Sequencer + Drum Machine + DSP FX) │
└──────────────────────┬───────────────────────┘
│
┌─────────────────────────────────┼─────────────────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌───────────────────────┐ ┌───────────────────────┐
│ JACK AUDIO │ │ SOOPERLOOPER (OSC) │ │ HARDWARE CONTROLLER │
│ Real-Time │ │ 4 Tracce Discrete │ │ (Akai / StarryPad / │
│ Callback │ │ Looping Engine │ │ Launchpad / FCB) │
└──────────────┘ └───────────────────────┘ └───────────────────────┘
Caratteristiche Principali
- Step Sequencer Ritmico: 8 pattern × 8 tracce × fino a 32 step per pattern.
- Time Signature Libera: Gestione di qualsiasi suddivisione ritmica (4/4, 5/4, 7/8, 10/8, tempi asimmetrici).
- Motore Drum Machine PCM: 8 tracce indipendenti con controlli di Volume, Pan, Mute, Solo e Accent.
- Dual Parallel DSP Bus (
brutality_fx): Due motori DSP complessi in esecuzione parallela simultanea (Space Engine + Movement Engine). - Generatore Modale Generativo (7 Modi Greci): Algoritmo di Random Walk camaleontico con memoria Snapshot (“La Foto”) ed escursione nelle “Valli del Silenzio”.
- Sync MIDI Dual-Slave: Sincronizzazione al campione (sample-accurate) con SooperLooper tramite
jack_midi_clocke co-jittering. - Kiosk Mode Totale: Boot automatico senza tastiera/mouse, autologin TTY1, X11 minimale con Openbox.
- Automazione USB Automount: Importazione ed esportazione automatica di banchi sonori, loop e registrazioni multitraccia da/verso chiavette USB.
Hardware Supportato ed Architetture
- 64-BIT Acer Celeron / x86_64 (Piattaforma di Produzione Corrente): CPU Celeron Dual-Core, 4GB RAM, SSD, Ubuntu 20.04 Minimal. Risorse audio gestite via JACK2 nativo.
- 32-BIT Amilo-Pro / i686: Fujitsu Siemens con Intel Centrino Duo 32-bit, chip grafico i915, Ubuntu 20.04 Minimal.
- 32-BIT PowerPC iBook G4 (Ramo Storico/Legacy): Apple Laptop PowerPC 7447a (Big-Endian), Debian Jessie 8, backend OpenGL 2.1, memory ordering
acquire/releasededicato per architettura weakly-ordered.
Stack Tecnologico
- C++17: Linguaggio di programmazione ad altissime prestazioni.
- Dear ImGui: Interfaccia grafica immediate mode ultra-leggera.
- SDL2: Gestione della finestra grafica, eventi di input e contesto OpenGL.
- OpenGL 2.1 / 3.x: Rendering grafico ad alta frequenza di aggiornamento.
- JACK Audio Connection Kit: Audio real-time ad uscite discrete e bridge MIDI nativo.
PARTE 2 — CONTROLLI E SUPERFICI DI COMANDO
1. Controlli da Tastiera Fisica
La griglia e le funzioni di sistema si editano interamente da tastiera senza l’uso del mouse:
| Tasto / Combinazione | Funzione Operativa |
|---|---|
| Spazio | Transport Play / Stop globale. |
| Invio / KP Invio | Attiva/Disattiva la modalità di registrazione (REC Mode). |
| Esc | Chiusura immediata di Brutality / Annullamento Pop-up. |
| Ctrl + B | Apre il Pop-up di immissione numerica diretta del BPM (invio per confermare). |
| Ctrl + R | SYNC RESET: Riavvia jack_midi_clock al BPM attuale e ricollega le porte MIDI. |
| Ctrl + J | REC JAM: Avvia/Ferma la registrazione multicanale della sessione (jam_recorder.sh). |
| Ctrl + S | Apre la finestra di salvataggio del banco pattern su file .bin. |
| Ctrl + L | Apre la sidebar di caricamento pattern (↑/↓ per navigare, → per caricare). |
| Ctrl + T | Apre l’editor avanzato della Time Signature (Step totali e gruppi ritmici). |
| Ctrl + W | Toggle hardware Wi-Fi On/Off via rfkill. |
| Shift + Ctrl + W | Mostra/Nasconde il pannello diagnostico Info di Sistema (IP, Wi-Fi, CPU Load). |
| F6 | Mostra/Nasconde la sidebar dei Sound Banks (scansionati in ordine alfabetico A-Z). |
| F9 | Attiva la modalità MIDI Learn per mappare qualsiasi controller esterno. |
| Backspace / Canc | Cancella il pattern selezionato (con Shift: cancella solo la traccia selezionata). |
| Shift + C / Shift + V | Copia e Incolla del pattern selezionato negli appunti di memoria. |
| A, S, D, F, G, H, J, K | Seleziona la traccia corrispondente (KICK, SNARE, HHCL, HHOP, TOM LO, TOM HI, CLAP, RIM). |
| 1 .. 8 | Toggle step 1..8 (Pagina 1: step 1..8). Con Tab: imposta l’Accent. |
| Q .. I | Toggle step 9..16 (Pagina 1: step 9..16). Con Tab: imposta l’Accent. |
| Shift + 1..8 | Toggle step 17..24 (Pagina 2). |
| Shift + Q..I | Toggle step 25..32 (Pagina 2). |
| Z, X, C, V, B, N, M, , | Mute / Unmute diretto delle tracce 1..8. |
| C | Attiva/Disattiva il metronomo integrato (Volume di default: 0.4). |
| M | Commuta la modalità di regolazione volume tra Master e Traccia. |
| ← / → | Seleziona il pattern precedente o successivo. |
2. Controllo da Novation Launchpad (Mini 2 / MK2)
Il Launchpad viene rilevato in modalità Hotplug automatica. Supporta layout sia decimali che geometrici.
Tasti Laterali (Colonna di Destra, dal basso verso l’alto):
- Tasto 0: REC Mode On/Off.
- Tasto 1: Play / Stop.
- Tasto 2: Master Mute On/Off.
- Tasto 3: Metronomo On/Off.
- Tasto 4: Song Mode On/Off (riproduzione sequenziale dei pattern).
- Tasto 5: Random Mode On/Off (estrazione casuale di pattern non vuoti).
- Tasto 6: Apre/Chiude la Sidebar dei Sound Banks.
Tasti Superiori (Prima riga in alto):
- CC 104 / 105 (← / →): Scorrimento Pagine Sequencer (o cambio volume se usato con Shift).
- CC 106 / 107: Selezione Pattern precedente / successivo.
- CC 108: Mute/Unmute della traccia correntemente selezionata.
- CC 109: Commuta la modalità di visualizzazione della griglia (SEQ \(\rightarrow\) MPC \(\rightarrow\) MIXER).
- CC 110: Variazione dello Swing a scatti del +20%.
- CC 110 (Tenuto - Shift BPM): Permette di cambiare il BPM usando le frecce CC 104/105.
- CC 111 (Tenuto - Shift VOL): Permette di cambiare il Volume Master usando le frecce CC 104/105.
3. Akai MPD26 (Controller analogico Fader & Knob)
L’Akai MPD26 pilotando il demone brutality_fx sul Canale MIDI 11 o 12 (CC 20..31) costituisce il pannello di controllo fisico tattile per i due motori DSP.
- Manopole K1..K6 (CC 20..25): Governano i 6 Macro-Parametri superiori del Bus attivo.
- Fader F1..F6 (CC 26..31): Governano i 6 Parametri Espressivi inferiori del Bus attivo.
4. Donner StarryPad Mini (SINCO)
Lo StarryPad Mini (Canale MIDI 10 / Indice 9) è suddiviso in 4 Pagine Virtuali selezionabili tramite la riga superiore di Pad:
┌─────────────┬─────────────┬─────────────┬─────────────┐
│ PAD 13 │ PAD 14 │ PAD 15 │ PAD 16 │
│ Pagina 0 │ Pagina 1 │ Pagina 2 │ Pagina 3 │
│ (SL Speeds) │ (SL Actions)│ (Bus A DSP) │ (Bus B DSP) │
└─────────────┴─────────────┴─────────────┴─────────────┘
Layout in Pagina 2 (BUS A - Space Engine) e Pagina 3 (BUS B - Movement Engine):
- Pads 1, 2, 3, 4 (Note 36..39): Attivano/Disattivano l’invio dei Loop 1, 2, 3, 4 al Bus FX (Bordo Verde Fluo sui box GUI).
- Pad 5 (Nota 40): Attiva/Disattiva l’invio delle Drums Brutality al Bus FX.
- Pads 6..12 (Note 41..47): Attivano/Disattivano i 7 Modi Generativi Greci (Tasto illuminato di Arancio su GUI).
- Pad 15 (Nota 50): Seleziona la Pagina 2 (Bus A) sul display e commuta l’Akai MPD26 sul controllo del Bus A (Bordo Verde Fluo attorno al pannello sinistro).
- Pad 16 (Nota 51): Seleziona la Pagina 3 (Bus B) sul display e commuta l’Akai MPD26 sul controllo del Bus B (Bordo Verde Fluo attorno al pannello destro).
PARTE 3 — ARCHITETTURA DSP DEI DUE RAMI (brutality_fx)
Il demone brutality_fx gestisce l’elaborazione del segnale. Nel corso dello sviluppo sono stati creati due rami di codice, entrambi stabili e compilabili.
🏛️ RAMO 1 (LEGACY / EXPERIMENTAL): XR-1 & COLLIDE 4
File sorgente salvato: /root/BrutalityEngine/brutality_fx_HR1Collide.cpp
Questo ramo è orientato alla modulazione ad anello ed allo spostamento spettrale spinto.
GLOSSARIO CONCETTUALE DSP (Ramo 1):
- Modulazione ad Anello (Ring Modulation): Moltiplicazione matematica tra il segnale audio ed un’onda portante. Elimina le frequenze fondamentali generando frequenze somma (\(f_{in} + f_{car}\)) e differenza (\(f_{in} - f_{car}\)), producendo timbri metallici o robotici.
- LFO (Low Frequency Oscillator): Oscillatore a bassissima frequenza (\(0.1\text{Hz} .. 10\text{Hz}\)) utilizzato non per generare suono udibile, ma per muovere ciclicamente altri parametri (volume, frequenza, filtri).
- Hilbert Transform (Quadratura di Fase): Rete di filtri All-Pass che sdoppia il segnale audio in due copie sfasate di \(90^\circ\). Permette al Frequency Shifter di isolare le bande laterali (LSB/USB) senza generare cancellazioni di fase.
┌───────────────────────────┐
│ XR-1 RING MODULATOR │
│ (Pads 3-12 / CC 20-29) │
└─────────────┬─────────────┘
│
▼
┌───────────────────────────┐
│ COLLIDE 4 SPECTRAL SHIFTER│
│ (Pads 1-12 / CC 20-31) │
└───────────────────────────┘
1. XR-1 Ring Modulator (Pads 3..12 su Akai CC 20..29)
- K1 Carrier Freq (20Hz..1520Hz): Regola l’intonazione della portante.
- K2 Waveform Morph (Seno \(\rightarrow\) Triangolo \(\rightarrow\) Quadra): Aumenta il contenuto armonico della portante.
- K3 Pre-amp Saturation (1x..5x): Saturatore
fast_tanh()pre-modulazione per dare sustain alle code. - K4 Sub-Octave Level (0..100%): Miscela un oscillatore a -1 ottava per preservare il “peso” dei bassi.
- K5 LFO Rate (0.1Hz..10Hz): Velocità dell’oscillatore di modulazione.
- K6 LFO Depth (0..100%): Ampiezza dell’escursione dell’LFO.
- F1 LFO Target (Tremolo vs Pitch Sweep): Commuta l’LFO tra il controllo di ampiezza ed il controllo di frequenza.
- F2 Low-Pass Filter: Filtro ad un polo post-effetto per eliminare stridori ad alta frequenza.
- F3 Dry/Wet Mix: Miscela segnale originale/effetto. 10.F4 Output Volume: Volume di uscita del modulo.
2. Collide 4 Quadrature Spectral Computer (Pads 1..12 su Akai CC 20..31)
- K1 Shift Freq Coarse (0..1000Hz): Spostamento lineare dello spettro in Hz (distrugge le relazioni armoniche).
- K2 Shift Freq Fine (0..10Hz): Micro-spostamento per creare battimenti lenti e chorus tridimensionale.
- K3 Feedback Amount (0..95%): Genera le “Spirali Spettrali” (echi che salono o scendono continuamente di intonazione).
- K4 Delay Time (10ms..1000ms): Distanza temporale tra le ripetizioni della spirale.
- K5 Delay Low-Pass Filter: Smorza le alte frequenze ad ogni ciclo simulando i delay analogici BBD.
- K6 Delay High-Pass Filter: Elimina l’accumulo di sub-bassi nel loop di feedback.
- F1 Sideband Balance (LSB \(\rightarrow\) USB): Decide se lo spostamento va verso il basso (LSB) o verso l’alto (USB).
- F2 Hilbert Phase Width: Introduce microscopiche imperfezioni nella rete di Hilbert per creare effetti flanger/comb.
- F3 Feedback Drive: Saturazione valvolare applicata esclusivamente alle code del delay. 10.F4 Carrier Phase Mismatch: Sfasamento L/R dell’oscillatore da \(0^\circ\) a \(90^\circ\) per un’immagine stereo ultra-larga. 11.F5 Dry/Wet Mix: Miscela. 12.F6 Output Volume: Volume generale.
🌌 RAMO 2 (CORRENTE IN PRODUZIONE): SPACE & MOVEMENT ENGINES
File sorgente attivo: /root/BrutalityEngine/brutality_fx.cpp
Sviluppato con inspirazione a generi tipo Downtempo, Ambient, Post-Rock e Drone. Basa l’architettura su Macro Esponenziali (“Elastici”), Matrice FDN 4x4, Shimmer Cascading, Buffer Granulare Circolare e la regola dei Volumi Indipendenti K1/K2.
GLOSSARIO CONCETTUALE DSP (Ramo 2):
- Matrice FDN (Feedback Delay Network): Architettura di riverberazione ad altissima fedeltà composta da linee di ritardo multiple interconnesse da una matrice unitaria di Hadamard. Ricrea la complessità acustica delle grandi cattedrali senza risonanze metalliche.
- Shimmer Cascading: Circuito di pitch-shifting (+12 semitoni) inserito dentro il loop di retroazione del riverbero. Ogni eco rientra nel pitch-shifter salendo di un’ottava ad ogni ciclo, generando cascate armoniche infinite.
- Eventide Microshift: Micro-sfasamento temporale e d’intonazione (\(\pm 250\) campioni) tra il canale destro e sinistro che espande la tridimensionalità dello spettro stereo.
- Buffer Circolare Granulare: Memoria ad anello continuo (3 secondi) in cui l’audio viene continuamente registrato e riletto da puntatori multipli (Reverse, Grain Window) a velocità ed instabilità variabili.
La Regola dei Volumi Indipendenti: K1 e K2
\[\text{USCITA FINALE} = (\text{Audio Pulito} \times K_1) + (\text{Effetto Spaziale} \times K_2)\]
- K1 (CC 20) — DRY DIRECT PASS: Volume del segnale pulito del loop (\(0\% \rightarrow 100\%\)).
- K2 (CC 21) — PURE WET GAIN: Volume del segnale processato dai DSP (\(0\% \rightarrow 100\%\)).
- Immunità al Random: K1 e K2 non vengono mai toccati dall’algoritmo random e partono sempre da 0.0 all’avvio.
BUS A: “SPACE ENGINE” (PAGINA 2)
Un processore d’ambiente profondo basato su matrice FDN 4x4 con lunghezza dei delay basati su numeri primi (\(3109, 3911, 4657, 5237\) campioni).
┌─────────────────────────────────────────────────────────┐
│ BUS A: SPACE ENGINE │
└────────────────────────────┬────────────────────────────┘
│
┌─────────────────────────────────────────────┴─────────────────────────────────────────────┐
│ │
▼ ▼
K1: DRY LEVEL (Direct Pass) K2: PURE WET LEVEL
│ │
│ ┌──────────────┐ ┌─────────────────┐ ┌────────────────┐ ┌──────────────┐ │
└──►│ Predelay ├──►│ Microshift ├──►│ Matrice FDN 4x4├──►│ Mid/Side 3D ├──────────┤
│ (0..180ms) │ │ Detune (±200smp)│ │ (Hadamard Mix) │ │ Stereo Width │ │
└──────────────┘ └─────────────────┘ └───────┬────────┘ └──────────────┘ │
│ │
└─► Cascading Shimmer (+12st Feedback)─┘
│
Uscita Finale ◄─────────────────────────────────────────────────────────────────────────────┘
Mappa Parametri Bus A (Akai MPD26 CC 20..31):
- K1 (CC 20) — DRY LEVEL: Volume del segnale pulito diretto.
- K2 (CC 21) — WET LEVEL: Volume del segnale spaziale processato.
- K3 (CC 22) — SPACE MORPH (Macro \(x^2\)): Escursione esponenziale che muove contemporaneamente:
- Predelay (\(0 \rightarrow 180\text{ms}\))
- Reverb Size (\(0.15 \rightarrow 1.0\))
- Decay Time (\(0.05 \rightarrow 0.93\))
- Diffusion Density
- K4 (CC 23) — HARMONIC CLUSTER: Introduce progressivamente il Microshift Eventide e lo Shimmer all’ottava superiore (+12st).
- K5 (CC 24) — MOD SWELL: Modulazione ciclica Flanger/Chorus dentro la coda per evitare la staticità.
- K6 (CC 25) — TILT & WARMTH: Saturatore valvolare
fast_tanh()+ filtro di smorzamento delle alte frequenze (Damping). - F1 (CC 26) — FREEZE HOLD (Continuo 0..100%): Estende il Decay fino al \(95\%\), congelando l’audio in un drone infinito.
- F2 (CC 27) — CASCADING SHIMMER: Reinietta il segnale con pitch-shift all’ingresso della matrice FDN per creare cascate d’angeli.
- F3 (CC 28) — DETUNE DEPTH: Regola la profondità dello sfasamento stereo (\(\pm 200\) campioni).
- F4 (CC 29) — LFO SPEED (\(0.1\text{Hz} .. 6.0\text{Hz}\)): Velocità dell’oscillazione spaziale.
- F5 (CC 30) — DIFFUSION DENSITY: Densità delle riflessioni AllPass (da echi distinti a nebbia densa).
- F6 (CC 31) — 3D STEREO WIDTH: Espansione della matrice Mid/Side oltre la carreggiata degli altoparlanti.
BUS B: “MOVEMENT ENGINE” (PAGINA 3)
Un motore d’esplorazione temporale e granulare basato su un buffer circolare di 3 secondi (132.300 campioni).
┌─────────────────────────────────────────────────────────┐
│ BUS B: MOVEMENT ENGINE │
└────────────────────────────┬────────────────────────────┘
│
┌─────────────────────────────────────────────┴─────────────────────────────────────────────┐
│ │
▼ ▼
K1: DRY LEVEL (Direct Pass) K2: PURE WET LEVEL
│ │
│ ┌──────────────┐ ┌─────────────────┐ ┌────────────────┐ ┌──────────────┐ │
└──►│ Ring Buffer ├──►│ Reverse Pointer ├──►│ Ping-Pong Delay├──►│ Tube Sat & ├──────────┤
│ 3s (132k smp)│ │ (Speed/Jitter) │ │ con Feedback │ │ SVF Filter │ │
└──────────────┘ └─────────────────┘ └────────────────┘ └──────────────┘ │
│
Uscita Finale ◄─────────────────────────────────────────────────────────────────────────────┘
Mappa Parametri Bus B (Akai MPD26 CC 20..31):
- K1 (CC 20) — DRY LEVEL: Volume del segnale pulito diretto.
- K2 (CC 21) — WET LEVEL: Volume del segnale granulare processato.
- K3 (CC 22) — TIME WARP & REVERSE: Transizione da Tape Delay lineare a Ping-Pong Stereo, fino al 100% Reverse Swell.
- K4 (CC 23) — GRANULAR CHAOS: Instabilità delle particelle e jitter d’intonazione casuale.
- K5 (CC 24) — TUBE SATURATION: Calore analogico valvolare via
fast_tanh(). - K6 (CC 25) — FILTER MORPH: Transizione dal filtro passa-basso profondo a passa-alto etereo.
- F1 (CC 26) — GRANULAR FREEZE: Congela la scrittura sul buffer, mettendo in loop infinito gli ultimi 3 secondi.
- F2 (CC 27) — FEEDBACK REGEN: Rigenerazione della coda del delay (cap di sicurezza al 92%).
- F3 (CC 28) — GRAIN SIZE (\(200\text{ms} .. 3200\text{ms}\)): Dimensione delle finestre di lettura.
- F4 (CC 29) — PING-PONG SPREAD: Rimbalzo stereo tridimensionale Destra/Sinistra.
- F5 (CC 30) — PITCH JITTER: Instabilità del pitch di riproduzione dei grani.
- F6 (CC 31) — OUTPUT DRIVE: Spinta di guadagno finale del canale wet.
PARTE 4 — MOTORE GENERATIVO DEI 7 MODI GRECI (PADS 6..12)
I Pad da 6 a 12 dello StarryPad Mini governano il Motore Generativo Camaleontico, basato sulle corrispondenze timbriche dei 7 Modi della musica classica e jazz.
[ Pressione Pad 6..12 ]
│
▼
┌─────────────────────┐
│ SNAPSHOT "FOTO" │ ──► Salva lo stato manuale delle manopole (K3..F6)
└──────────┬──────────┘
│
▼ (Rampa Camaleontica di 3.5 Secondi)
┌─────────────────────┐
│ RANDOM WALK CON │ ──► 4 LFO lenti (0.04Hz, 0.07Hz, 0.11Hz, 0.16Hz)
│ "VALLI DI SILENZIO" │ Se LFO < 0.0 ──► Parametro = 0.0 (Silenzio/Piattezza)
└──────────┬──────────┘
│
[ Ripressione Pad 6..12 ]
│
▼ (Rampa di Ritorno in 3.5s)
┌─────────────────────┐
│ RIPRISTINO FOTO │ ──► Il suono scivola di nuovo alla configurazione manuale
└─────────────────────┘
Principi Funzionali:
- Fotografia dello Stato (Snapshot): Alla pressione del pad, il sistema congela la posizione iniziale delle manopole. Disattivando il modo, i parametri scivolano di nuovo verso la “Foto” in 3.5 secondi.
- Indipendenza dei Bus: Se sei in Pagina 2 (Bus A), il random agisce solo sul Bus A. Il Bus B rimane invariato.
- “La Caccia al Silenzio” (Valli a Zero): Le 4 onde LFO generatrici hanno un offset negativo: \[\text{LFO}_1 = \sin(2\pi \cdot 0.04 \cdot t) \times 0.9 - 0.2\] Quando l’onda scende sotto lo zero, la funzione
clamp_val()porta il parametro a0.0, creando periodici vuoti di silenzio ed azzeramento dei filtri, rendendo la generazione sonora viva ed organica.
Mappa dei 7 Modi Greci:
- PAD 6 — Modo Ionico (Solare, Luminoso, Stabile): Spazio ampio, Shimmer leggero e delay pulito.
- PAD 7 — Modo Dorico (Caldo, Jazz/Funk Space): Microshift Eventide, calore valvolare e Reverse al 50%.
- PAD 8 — Modo Frigio (Misterioso, Orientale, Tensione): Riverbero scuro (Damping alto), Sub-Bassi (-12st) e filtri chiusi.
- PAD 9 — Modo Lidio (Celestiale, Gravità Zero): Shimmer +12st al massimo, Decay lunghissimo (95%) e pioggia granulare.
- PAD 10 — Modo Misolidio (Pulsante, Ipnotico, Groove): Modulazioni LFO ritmiche sul filtro e sulla fase stereo.
- PAD 11 — Modo Eolio (Malinconico, Cattedrale Eterea): Abisso Blackhole profondo con LFO lentissimo (0.05Hz) e Reverse continuo.
- PAD 12 — Modo Locrio (Freeze Spaziale, Dissonante): FREEZE HOLD ATTIVO, massima estensione stereo e caos granulare.
PARTE 5 — ARCHITETTURA DI SISTEMA, SCRIPT ED AUTOMAZIONI
1. Sincronizzazione Dual-Slave e Co-Jittering
I quarzi della CPU e della scheda audio fisica differiscono impercettibilmente di pochi PPM (parti per milione). Per evitare la deriva temporale tra Brutality e SooperLooper, entrambi i software sono configurati come Slave rispetto a un unico master clock: jack_midi_clock.
┌───────────────────────────┐
│ JACK Audio Transport │
│ (Master Card Hardware) │
└─────────────┬─────────────┘
│
▼
┌───────────────────────────┐
│ jack_midi_clock │
│ (Genera 0xF8 dai frame) │
└─────────────┬─────────────┘
│
┌────────────┴────────────┐
▼ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ BRUTALITY (C++) │ │ SOOPERLOOPER │
│ (Slave) │ │ (Slave) │
└─────────────────────┘ └─────────────────────┘
Il bridge a2jmidid introduce un micro-jitter (1..5ms) sui tick MIDI. Grazie al principio del Co-Jittering, questo jitter colpisce entrambi i software contemporaneamente e nella stessa direzione: l’allineamento relativo tra il sequencer di Brutality e i loop di SooperLooper rimane perfetto all’infinito.
2. Cambio BPM in Performance (restart_clock.sh)
All’avvio, jack_midi_clock gira a un BPM fisso. Cambiando il BPM dall’interfaccia di Brutality o da tastiera (Ctrl + B),e richiamando il SYNC con (Ctrl +R) si invoca lo script /root/restart_clock.sh [NUOVO_BPM].
Lo script termina l’istanza corrente di jack_midi_clock, ne avvia una nuova con il valore aggiornato ed attesta dinamicamente che la porta mclk_out si registri in JACK per ricablare le connessioni MIDI senza bloccare il thread audio real-time.
3. Automazione USB — Banchi Sonori e Registrazioni (pyvolca_automount.sh)
Gestito dalle regole udev (/etc/udev/rules.d/99-pyvolca-automount.rules), lo script gestisce automaticamente l’inserimento di chiavette USB:
- Purge File Mac/Windows: Elimina automaticamente file spazzatura come
._*e.DS_Store. - Conversione e Sanificazione Audio Automatici via FFmpeg: Scansiona le cartelle dei Sound Bank e converte qualsiasi file
.wav(anche se registrato a 32-bit Float con Edison o a 48kHz) in formato PCM 16-bit 44.1kHz Mono compatibile con il loader C++. - Esportazione Loop e Jams: Rileva i file
sl_*.wavdi SooperLooper e le registrazioni multitraccia dijam_recorder.sh, spostandoli nelle cartelleRECORDED_LOOPSeRECORDED_JAMSdella chiavetta USB. - Scrittura Sicura: Esegue il comando
syncprima di smontare il volume per prevenire la corruzione dei file audio.
4. Ottimizzazione RAM Disk (tmpfs) per le Registrazioni
Per evitare colli di bottiglia e XRUN durante la registrazione audio multicanale su hardware datato, la cartella temporanea /tmp viene montata in RAM fisica tramite /etc/fstab:
tmpfs /tmp tmpfs defaults,noatime,nosuid,nodev,size=1500M 0 0
- Flusso Audio (8 canali @ 16-bit / 44.1 kHz): ~352.8 KB/s (~21 MB al minuto).
- Alla pressione di STOP REC (
Ctrl + J),FFmpeglegge il file grezzo/tmp/live_master.wavdalla RAM, compila il file WAV/MP4 finale nella cartella persistente/root/BrutalityEngine/recordingsed svuota la RAM.Generando sia un file per ascolto rapido STEREO sia un file wav multitrack 8 canali.
5. Corazzatura Anti-Crash del Motore C++
Il codice di brutality_fx.cpp integra 4 livelli di protezione real-time:
DelayLine::read()con Bounds-Checking: Forza la lettura dei buffer entro i limiti fisici dell’array (clamp_val). Rende impossibile la generazione di Segmentation Fault.sanitize()Anti-NaN / Anti-Inf: Intercetta e azzera all’istante qualsiasi campione audio corrotto o infinito:- Feedback Cap al 92..95%: Impedisce alle code di riverbero o delay di andare in runaway matematico.
Soft-Clip Limiter
fast_tanh(): Protegge le uscite della scheda audio Behringer UMC404HD da qualsiasi picco o saturazione incontrollata.
6. Backup e Ripristino Totale del Kiosk Mode (crea_backup_totale.sh)
Per creare un archivio compresso .tar.gz completo di tutti i file di codice, configurazioni Openbox, sessioni SooperLooper e regole di sistema, esegui:
Il file verrà salvato in /home/brutality/brutality_files/brutality_full_backup_YYYY-MM-DD_HH-MM-SS.tar.gz.
Comando di Ripristino Disastro su Sistema Pulito:
PARTE 6 — GUIDA DI COMPILAZIONE E MANUTENZIONE RAPIDA
Compilazione dell’Intero Sistema:
cd /root/BrutalityEngine
# 1. Compilazione del Demone FX (Bus A e Bus B Paralleli)
g++ -O3 -std=c++17 /root/BrutalityEngine/brutality_fx.cpp -o /root/BrutalityEngine/brutality_fx -ljack -lpthread -lrt
# 2. Compilazione della GUI Principale (Simmetria 12+12)
g++ -O3 -std=c++17 main.cpp imgui/imgui.cpp imgui/imgui_draw.cpp imgui/imgui_tables.cpp imgui/imgui_widgets.cpp imgui/backends/imgui_impl_sdl2.cpp imgui/backends/imgui_impl_opengl3.cpp -o brutality -lSDL2 -lGL -ljack -lpthread -lrt
Commenti