Port Android di VCV Rack: costruisci patch modulari toccando lo schermo, con moduli di base integrati e pacchetti aggiuntivi installabili al volo.
RackDroid è un port per Android di VCV Rack, il celebre sintetizzatore modulare virtuale. Colleghi moduli (oscillatori, filtri, inviluppi, sequencer…) con dei cavi virtuali per creare suoni e patch, esattamente come in un rack modulare hardware — ma sul telefono, con un'interfaccia pensata per il tocco.
.rdmod, senza aggiornare l'app.All'avvio trovi una patch dimostrativa già funzionante: l'audio è già configurato e suona appena tocchi.
Su un telefono non puoi scorrere il rack mentre trascini un cavo, quindi collegare due moduli che non stanno mai insieme sullo schermo sarebbe quasi impossibile. La barra di parcheggio sul bordo sinistro dà a un capo del cavo un posto dove aspettare: lascialo in un buco, scorri dove vuoi, poi tiralo fuori sulla porta di destinazione. È attiva all'avvio e si accende/spegne dal pulsante parcheggio cavi nella barra dei tool.
In alto galleggia una card a vetro con due righe: i menu e i tool. La freccetta centrale in basso la richiude lasciando solo una linguetta (toccala per riaprirla); si richiude anche automaticamente quando apri un tutorial, per liberare lo schermo.
| Icona | Funzione |
|---|---|
| Griglia | Palette dei moduli: mostra/nasconde la barra dei moduli in basso. |
| Download | Gestore moduli: installa pacchetti .rdmod da file e disinstalla quelli installati. |
| Presa/cavo | Parcheggio cavi: mostra/nasconde la barra dove un capo del cavo aspetta mentre scorri (attiva all'avvio). Vedi capitolo 2. |
| Tavolozza | Tema: cambia i colori dell'interfaccia (barra, menu, fogli). |
| ↶ / ↷ | Annulla / Ripeti l'ultima azione. |
| Riquadro tratteggiato | Selezione multipla: mentre è accesa (ambra) un tocco su un modulo lo aggiunge alla scelta. Vedi sotto. |
| Fogli sovrapposti | Copia moduli selezionati. |
| Appunti | Incolla moduli copiati, vicino alla vista corrente. |
| Cestino (rosso) | Elimina i moduli selezionati. Chiede sempre conferma e dice quanti stanno per sparire. |
| Lucchetto contorno | Blocca layout: congela posizione dei moduli e cavi (le manopole restano attive). |
| Lucchetto pieno | Blocca tutto: congela anche i parametri. Attivo = ambra. Stato salvato tra le sessioni. |
| Piano | MIDI: cerca e collega controller MIDI Bluetooth LE. |
| Tastiera | Tastiera musicale a schermo (capitolo 6). |
| Cerchio rosso | Registra l'uscita audio su file WAV (capitolo 7). Diventa un quadrato di stop. |
| ⓘ | Info / crediti dell'app. |
Il pulsante selezione multipla cambia cosa fa un dito sul rack. Mentre è acceso:
I moduli scelti prendono un alone rosso tutt'intorno: il pannello resta leggibile, a differenza di un velo colorato sopra la grafica. Da qui puoi copiarli, incollarli o eliminarli con i pulsanti accanto.
La barra in basso è il modo rapido per aggiungere moduli. In fondo trovi i chip delle categorie; toccandone uno si apre sopra una striscia scorrevole di anteprime dei moduli di quella categoria.
Ogni anteprima ha un pallino ⓘ in alto a destra: toccandolo si apre una scheda con nome, marca, plugin, tag e descrizione del modulo (cos'è e cosa fa).
Scorri verso il basso sulla striscia dei moduli per richiuderla (la barra dei chip resta al suo posto). In alternativa tocca di nuovo il chip attivo. Lo scorrimento orizzontale e il trascinamento verso l'alto sul rack non ne sono influenzati.
I menu si aprono come pannelli dal basso. Si chiudono toccando fuori, con “indietro”, oppure scorrendoli verso il basso.
| Menu | Cosa contiene |
|---|---|
| File | Nuovo, apri, salva la patch; condividi la patch (foglio di sistema). |
| Modifica | Annulla / ripeti e comandi di modifica. |
| Visualizza | Tensione dei cavi e Opacità dei cavi (cursori 0–100%), più altre opzioni di visualizzazione. |
| Motore | Impostazioni del motore audio (frequenza di campionamento, ecc.). |
| Aiuto | Guida e libreria dei tutorial. |
Il tasto Tastiera apre in basso una tastiera di pianoforte a schermo: le note suonano attraverso il driver “Computer keyboard/mouse” di Rack (1V/oct + gate). Le frecce ‹ › ai lati spostano l'ottava; il pulsante ✕ in alto a destra la chiude.
Il tasto MIDI avvia la ricerca di controller MIDI Bluetooth LE: seleziona il dispositivo per collegarlo e suonare i moduli MIDI.
Il tasto Registra cattura l'uscita audio in un file WAV. Ripremendolo
la registrazione si ferma e il file viene salvato in
Documents/RackDroid/, raggiungibile da qualunque file manager
(nessun permesso speciale richiesto).
Al primo avvio parte il tour dell'interfaccia a spotlight: venti passi che illuminano a turno le due righe di strumenti, i lucchetti, la palette, il gestore dei moduli e il parcheggio cavi, spiegano i gesti del rack e dedicano un passo a ciascuno dei cinque menu — File, Modifica, Visualizza, Motore e Aiuto — dicendo cosa c'è dentro e poi aprendolo davvero, con il tempo di guardarlo. Il tour fa quello che racconta: inquadra da solo i tuoi moduli, apre la palette, sposta un modulo, ingrandisce e scorre il rack, traccia un cavo da un'uscita a un ingresso con i jack compatibili accesi, e accende il tasto della selezione multipla mettendo l'alone rosso su un paio di moduli per muoverli insieme. È una dimostrazione, non una modifica: nessun cavo viene collegato davvero, alla fine ogni modulo torna alla posizione esatta di prima, la selezione viene tolta e la vista torna a zoom e posizione di partenza. Puoi rivederlo quando vuoi, anche sopra una patch a cui stai lavorando, da Aiuto ▸ Rivedi il tour.
Dal menu Aiuto apri poi la Guida (indice per argomenti) e la libreria dei tutorial: 30 costruzioni guidate passo-passo su 5 livelli, dalle basi (primo suono, filtro, inviluppo) a tecniche avanzate (hard sync, Karplus–Strong, patch generative, droni ambient). Le schede dei tutorial appaiono in alto per non coprire la palette.
Sempre presenti nell'app, senza installare nulla:
| Pacchetto | Moduli | Contenuto |
|---|---|---|
| Core | integrati | Audio, MIDI e I/O del motore. |
| Fundamental | 39 | VCO, VCF, VCA, ADSR, LFO, SEQ-3, Delay, Mixer, Scope, Quantizer, Noise, S&H… |
| RackDroid Drums | 14 | Voci di batteria/percussioni originali nella tradizione dell'808. |
Tutti gli altri pacchetti (Bogaudio, Valley, Audible, Impromptu, Befaco, Grande, HetrickCV, ecc.) si scaricano e si installano come .rdmod — vedi capitolo seguente.
Un pacchetto di moduli è un file .rdmod. Puoi aggiungerne quanti vuoi
senza aggiornare l'app. Ci sono due modi.
.rdmod (da Download o ovunque siano).Copia i file .rdmod in questa cartella (visibile in qualsiasi file manager, nessun permesso richiesto) e riavvia l'app:
Android/data/org.rackdroid/files/Modules/
Nel gestore Moduli ogni pacchetto installato ha un pulsante Disinstalla. I moduli spariscono subito dalla palette; quelli che avevi già inserito nel rack restano attivi fino al riavvio dell'app (un modulo nativo non può essere rimosso da un motore in esecuzione).
Android vieta di caricare una libreria nativa .so direttamente dalla memoria condivisa (namespace del linker + W^X). Quindi l'app:
filesDir/user/plugins/<slug>);.so di sola lettura e chiama System.load() di Java (l'unico modo per soddisfare il namespace del linker);nativeLoadUserPlugin → dlopen(RTLD_NOLOAD) → registrazione).
Un plugin è compatibile con RackDroid se è compilato contro lo stesso ABI del motore
rack_engine dell'app (arm64-v8a). Un .so di terze parti o con ABI
diverso non verrà caricato (viene saltato).
È un semplice zip con al primo livello:
plugin.json # il manifest del pacchetto (deve avere "slug") res/… # pannelli SVG e altri asset caricati a runtime libplugin_<nome>.so # la libreria nativa, per QUESTO motore RackDroid
{
"slug": "MioPack",
"name": "Il mio pacchetto",
"version": "2.0.0",
"license": "GPL-3.0-or-later",
"brand": "MioBrand",
"author": "Nome",
"description": "Descrizione del pacchetto",
"modules": [
{
"slug": "MioVCO",
"name": "Mio VCO",
"description": "Oscillatore controllato in tensione",
"tags": ["Oscillator"]
}
]
}
Lo slug del plugin e dei moduli non deve contenere /. I tags determinano in quale categoria della palette appare il modulo (es. Oscillator→VCO, Filter→VCF).
Il codice del modulo è C++ VCV Rack standard. Il target si aggiunge come libreria condivisa collegata a rack_engine:
add_library(plugin_mio SHARED ${MIO_SOURCES})
target_link_libraries(plugin_mio PUBLIC rack_engine)
target_compile_options(plugin_mio PRIVATE
-I${MIO_DIR}/src -O3 -funsafe-math-optimizations)
Costruito con la NDK per arm64-v8a (STL c++_shared), come l'app.
Metti insieme il .so (stripato), il plugin.json e la cartella res/, e comprimi in zip:
mkdir pack && cd pack cp .../obj/arm64-v8a/libplugin_mio.so . cp path/to/mio/plugin.json . cp -r path/to/mio/res . zip -r ../MioPack.rdmod .
Nel repository lo script scripts/make_rdmods.sh automatizza questo per tutti i pacchetti non di base, prendendo il .so dalla cartella di build di CMake e mappando le risorse.
.so deve essere costruito con la stessa versione del motore rack_engine dell'app installata. Un mismatch = pacchetto saltato. Anche un pacchetto con lo stesso slug di uno già presente (es. un modulo di base) viene saltato.La versione che scarichi da GitHub può controllare da sola se ne è uscita una più recente. Te lo chiede una volta, al primo avvio dopo il giro introduttivo: se rifiuti non si collega mai, e puoi cambiare idea più tardi da ⓘ ▸ Controlla aggiornamenti. Se accetti, guarda una volta al giorno e ti propone la nuova versione con le sue note; scaricarla e installarla resta una tua scelta, e Android chiede comunque conferma prima di installare.
api.github.com, che in quel momento vede il tuo indirizzo IP — come per
qualsiasi sito. Nessun account, nessun identificativo, nessuna statistica d'uso.La versione pubblicata su Google Play non ha questa funzione e non chiede nemmeno il permesso di rete: lì è lo store a occuparsi degli aggiornamenti.
Distribuire codice nativo che viene eseguito da fuori Google Play viola le
policy di Play. Perciò la cartella di side-load e l'installazione da file sono
pensate per la build sideload / GitHub. Una build per Play dovrebbe consegnare
i pacchetti extra tramite Play asset packs / feature delivery (è Play a servire
il .so), riusando lo stesso caricatore “estrai in memoria privata +
System.load”.
RackDroid è un port di VCV Rack (GPLv3). Grafica e moduli originali dove indicato. Progetto: github.com/nowheel/RackDroid · Manuale generato per la versione 0.1.2.