brutality

BRUTALITY ENGINE — Manuale Tecnico

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_clock e 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

  1. 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.
  2. 32-BIT Amilo-Pro / i686: Fujitsu Siemens con Intel Centrino Duo 32-bit, chip grafico i915, Ubuntu 20.04 Minimal.
  3. 32-BIT PowerPC iBook G4 (Ramo Storico/Legacy): Apple Laptop PowerPC 7447a (Big-Endian), Debian Jessie 8, backend OpenGL 2.1, memory ordering acquire/release dedicato 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)

  1. K1 Carrier Freq (20Hz..1520Hz): Regola l’intonazione della portante.
  2. K2 Waveform Morph (Seno \(\rightarrow\) Triangolo \(\rightarrow\) Quadra): Aumenta il contenuto armonico della portante.
  3. K3 Pre-amp Saturation (1x..5x): Saturatore fast_tanh() pre-modulazione per dare sustain alle code.
  4. K4 Sub-Octave Level (0..100%): Miscela un oscillatore a -1 ottava per preservare il “peso” dei bassi.
  5. K5 LFO Rate (0.1Hz..10Hz): Velocità dell’oscillatore di modulazione.
  6. K6 LFO Depth (0..100%): Ampiezza dell’escursione dell’LFO.
  7. F1 LFO Target (Tremolo vs Pitch Sweep): Commuta l’LFO tra il controllo di ampiezza ed il controllo di frequenza.
  8. F2 Low-Pass Filter: Filtro ad un polo post-effetto per eliminare stridori ad alta frequenza.
  9. 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)

  1. K1 Shift Freq Coarse (0..1000Hz): Spostamento lineare dello spettro in Hz (distrugge le relazioni armoniche).
  2. K2 Shift Freq Fine (0..10Hz): Micro-spostamento per creare battimenti lenti e chorus tridimensionale.
  3. K3 Feedback Amount (0..95%): Genera le “Spirali Spettrali” (echi che salono o scendono continuamente di intonazione).
  4. K4 Delay Time (10ms..1000ms): Distanza temporale tra le ripetizioni della spirale.
  5. K5 Delay Low-Pass Filter: Smorza le alte frequenze ad ogni ciclo simulando i delay analogici BBD.
  6. K6 Delay High-Pass Filter: Elimina l’accumulo di sub-bassi nel loop di feedback.
  7. F1 Sideband Balance (LSB \(\rightarrow\) USB): Decide se lo spostamento va verso il basso (LSB) o verso l’alto (USB).
  8. F2 Hilbert Phase Width: Introduce microscopiche imperfezioni nella rete di Hilbert per creare effetti flanger/comb.
  9. 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:

  1. 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.
  2. Indipendenza dei Bus: Se sei in Pagina 2 (Bus A), il random agisce solo sul Bus A. Il Bus B rimane invariato.
  3. “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 a 0.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:

  1. Purge File Mac/Windows: Elimina automaticamente file spazzatura come ._* e .DS_Store.
  2. 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++.
  3. Esportazione Loop e Jams: Rileva i file sl_*.wav di SooperLooper e le registrazioni multitraccia di jam_recorder.sh, spostandoli nelle cartelle RECORDED_LOOPS e RECORDED_JAMS della chiavetta USB.
  4. Scrittura Sicura: Esegue il comando sync prima 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), FFmpeg legge il file grezzo /tmp/live_master.wav dalla RAM, compila il file WAV/MP4 finale nella cartella persistente /root/BrutalityEngine/recordings ed 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:

  1. 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.
  2. sanitize() Anti-NaN / Anti-Inf: Intercetta e azzera all’istante qualsiasi campione audio corrotto o infinito:

  3. Feedback Cap al 92..95%: Impedisce alle code di riverbero o delay di andare in runaway matematico.
  4. 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:

Commenti