Una versione modernizzata e più semplice da usare del progetto originale Dan12/Launchpad.
Launchpad è un'applicazione web che simula un controller Launchpad direttamente nel browser: puoi suonare sample con tastiera e mouse, cambiare sound pack, aggiungere nuove canzoni e gestire quelle installate senza modificare manualmente il codice.
Stato del progetto: questa fork nasce da una codebase legacy basata originariamente su Ruby on Rails 4.2.
Il progetto è stato progressivamente modernizzato ed è attualmente basato su Ruby 3.3.12 e Rails 7.1.6.La modernizzazione è ancora in corso, con particolare attenzione a sicurezza, semplificazione dell'architettura e rimozione delle dipendenze legacy residue.
- Launchpad virtuale utilizzabile direttamente dal browser
- Controllo tramite tastiera e mouse
- Riproduzione audio MP3/WAV/OGG tramite Howler.js
- Supporto a 4 chain da 48 pad ciascuna
- Sound pack built-in
- Aggiunta di nuove canzoni tramite Song Builder
- Validazione automatica dei manifest e dei sound pack
- Installazione delle canzoni senza modificare
keyboard.js - Gestione delle canzoni installate
- Rimozione delle user song tramite Manage Songs
- Persistenza delle canzoni utente in
user_data/ - Ambiente Docker riproducibile
- Launcher Windows per avvio, stop e visualizzazione log
- Suite automatica di test Rails
Per utilizzare Launchpad non è necessario installare manualmente Ruby, Rails, Bundler, SQLite o altre dipendenze.
Serve solamente:
Docker Desktop
Puoi scaricarlo dal sito ufficiale:
https://www.docker.com/products/docker-desktop/
Dopo l'installazione, avvia Docker Desktop e attendi che Docker sia pronto.
Scarica o clona questa repository.
Con Git:
git clone https://github.com/LordSkull/Launchpad.git
cd LaunchpadPoi fai doppio clic su:
START_LAUNCHPAD.bat
Il launcher:
- verifica che Docker sia disponibile;
- avvia o ricostruisce l'ambiente Launchpad se necessario;
- prepara l'ambiente Rails locale;
- avvia il server web;
- apre il browser su:
http://localhost:3000
Il primo avvio può richiedere alcuni minuti perché Docker deve scaricare l'immagine Ruby e installare le dipendenze del progetto.
Gli avvii successivi sono normalmente molto più rapidi.
Fai doppio clic su:
STOP_LAUNCHPAD.bat
Le canzoni aggiunte dall'utente vengono mantenute.
Se Launchpad non parte, fai doppio clic su:
CHECK_LAUNCHPAD_LOGS.bat
Verranno mostrate le ultime righe dei log del container.
Apri:
http://localhost:3000
La pagina principale contiene il Launchpad virtuale e l'elenco delle canzoni disponibili.
Puoi utilizzare:
- tastiera del computer;
- mouse;
- controlli della pagina.
Il selettore nella pagina principale permette di scegliere tra layout US (predefinito) e Italian. La scelta viene ricordata nel localStorage del browser e non modifica le canzoni, che continuano ad associare i sample agli indici dei pad.
Nel layout US il pad 48 usa il tasto \; nel layout italiano la quarta riga inizia con il tasto < della tastiera ISO.
Il Launchpad è organizzato in 4 chain, ognuna composta da 48 pad.
Dalla pagina principale premi:
+ Add Song
Si aprirà il Song Builder.
Il builder permette di:
- scegliere uno ZIP contenente i sample;
- impostare nome e BPM;
- configurare le 4 chain;
- assegnare i sample ai 48 pad;
- impostare i pad
hold to play; - configurare gruppi di pad collegati;
- validare il pacchetto;
- installare direttamente la canzone.
Non è necessario modificare manualmente JavaScript o altri file del progetto.
Il sound pack utilizza una struttura come questa:
sounds/
├── chain1/
│ ├── kick.wav
│ ├── vocal.mp3
│ ├── synth.ogg
│ └── ...
├── chain2/
│ ├── snare.wav
│ └── synth.mp3
├── chain3/
│ └── ...
└── chain4/
└── ...
Ogni chain può contenere i sample utilizzati dai suoi 48 pad. I formati supportati possono essere mescolati liberamente nella stessa song.
Il Song Builder permette poi di associare ogni file al pad desiderato.
- MP3 (
.mp3) - WAV (
.wav) - OGG/Vorbis (
.ogg)
Le estensioni vengono riconosciute senza distinzione tra maiuscole e minuscole. Le nuove song conservano nel mapping il nome completo del sample, ad esempio kick.wav, vocal.mp3 o synth.ogg. I manifest legacy che usano mapping senza estensione restano compatibili: ad esempio, kick continua a essere interpretato come kick.mp3.
Per ottenere risultati migliori è consigliato partire da materiale già preparato, ad esempio:
- Launchpad project file;
- sample pack;
- stem;
- loop;
- vocal chop;
- effetti;
- one-shot.
La separazione automatica di una canzone completa in voce, batteria, basso e altri stem può essere utile come punto di partenza, ma normalmente è comunque necessario scegliere e tagliare manualmente le parti musicalmente interessanti.
Dalla home premi:
Manage Songs
La pagina distingue tra due categorie.
Sono le canzoni incluse direttamente nel progetto.
Non vengono rimosse dalla normale interfaccia.
Sono le canzoni installate dall'utente.
Per rimuoverne una premi:
Remove
e conferma l'operazione.
La configurazione e il relativo sound pack vengono eliminati dal relativo spazio utente.
Le canzoni installate dall'utente vengono conservate in:
user_data/
└── songs/
├── nome_canzone/
│ ├── song.json
│ └── sounds.zip
└── ...
Questi dati sono separati dal codice dell'applicazione.
Questo significa che:
- installare una canzone non modifica
keyboard.js; - rimuovere una canzone non modifica il sorgente;
- ricostruire il container Docker non cancella normalmente le user song;
- aggiornare l'applicazione è più semplice;
- le song installate possono essere gestite senza modificare la repository.
Launchpad gestisce attualmente due tipi principali di canzoni.
Built-in songs
↓
metadata JavaScript
↓
ZIP statici
↓
browser
User songs
↓
Song Builder
↓
manifest + ZIP
↓
LocalSongsController
↓
SongManifest
↓
ZipEntries
↓
UserSongStore
↓
user_data/songs
↓
browser
Il vecchio sistema basato sul model ActiveRecord Song è stato rimosso.
Le user song moderne non dipendono dal database Rails.
Se hai clonato la repository tramite Git:
git pullpoi riavvia Launchpad con:
START_LAUNCHPAD.bat
Docker ricostruirà automaticamente l'ambiente quando necessario.
I dati presenti in user_data/ rimangono separati dal codice del progetto.
Se compare:
[ERROR] Docker was not found.
installa Docker Desktop, avvialo e riprova.
Assicurati che Docker Desktop sia aperto e abbia completato l'avvio.
Poi prova nuovamente:
START_LAUNCHPAD.bat
Controlla che non ci sia già un'altra istanza Rails o Launchpad attiva.
Puoi fermare il container Launchpad con:
STOP_LAUNCHPAD.bat
Prova un hard refresh del browser:
Ctrl + Shift + R
I browser moderni possono impedire l'avvio automatico dell'audio.
Clicca una volta nella pagina e poi premi uno dei pad.
Il Song Builder e il backend eseguono controlli sul pacchetto.
Verifica in particolare:
- struttura dello ZIP;
- cartelle delle chain;
- nomi dei sample;
- mapping dei pad;
- manifest della canzone;
- eventuali valori o indici non validi.
Per maggiori dettagli puoi consultare i log:
CHECK_LAUNCHPAD_LOGS.bat
La baseline attuale utilizza:
Ruby 3.3.12
Rails 7.1.6
Bundler 2.4.22
Puma
Sprockets
SQLite 1.4.2
JavaScript
Howler.js
Zip.js
Il progetto deriva da una codebase molto più vecchia e alcune dipendenze e parti dell'architettura sono ancora in fase di revisione.
Durante la modernizzazione sono già state eliminate diverse dipendenze e componenti legacy non più utilizzati, tra cui il vecchio sistema di autenticazione, il MIDI editor legacy, SassC, CoffeeScript, sdoc, byebug e altri componenti storici.
Build e avvio:
docker compose up -d --buildLog:
docker compose logs -f launchpadShell nel container:
docker compose exec launchpad bashRails console:
docker compose exec launchpad bundle exec rails consoleStop:
docker compose downLa repository include una suite automatica di test Rails.
Eseguila con:
docker compose exec launchpad bundle exec rails testLa suite copre, tra le altre cose:
- parsing e validazione dei manifest;
UserSongStore;- parsing ZIP;
- API HTTP delle user song;
- installazione e rimozione;
- endpoint legacy rimossi;
- isolamento dei dati utilizzati dai test.
Launchpad/
├── app/
│ ├── assets/
│ │ ├── javascripts/
│ │ └── stylesheets/
│ ├── controllers/
│ ├── services/
│ └── views/
├── config/
├── db/
├── public/
│ ├── song_builder.html
│ └── ...
├── script/
├── test/
├── user_data/
│ └── songs/
├── docker/
├── Dockerfile
├── compose.yaml
├── START_LAUNCHPAD.bat
├── STOP_LAUNCHPAD.bat
├── CHECK_LAUNCHPAD_LOGS.bat
└── README.md
La struttura può evolvere ulteriormente durante la modernizzazione.
La priorità del progetto è preservare il comportamento del Launchpad mentre la codebase viene modernizzata e resa più robusta.
- rendere il progetto nuovamente eseguibile;
- creare un ambiente Docker riproducibile;
- aggiungere un Song Builder;
- validare manifest e sound pack;
- installare canzoni dalla UI;
- separare le user song dal codice;
- aggiungere Manage Songs;
- aggiungere Remove Song;
- aggiungere test automatici;
- caratterizzare l'API delle user song;
- rimuovere il sistema di autenticazione legacy;
- rimuovere il MIDI editor legacy;
- rimuovere i model ActiveRecord legacy;
- rimuovere diverse dipendenze Ruby non più utilizzate;
- migrare da Rails 4.x a Rails 7.1;
- migrare da Ruby 2.x a Ruby 3.3;
- completare il security hardening;
- migliorare la protezione dei percorsi filesystem e dei symlink;
- introdurre limiti più robusti per ZIP e manifest;
- rendere le installazioni delle user song atomiche;
- migliorare la gestione degli errori HTTP;
- rimuovere ActiveRecord e SQLite se non più necessari;
- aggiungere CI con GitHub Actions;
- migliorare l'interfaccia del Song Builder;
- modernizzare progressivamente il frontend;
- continuare l'aggiornamento verso versioni Rails più recenti.
Launchpad nasce da un'applicazione Rails legacy ed è ancora in fase di hardening.
L'ambiente Docker fornito è pensato principalmente per:
- utilizzo locale;
- sviluppo;
- test.
Per impostazione predefinita il servizio Docker viene pubblicato solamente sull'interfaccia locale:
127.0.0.1:3000
e non viene quindi esposto automaticamente alla rete LAN.
Non è comunque consigliato esporre direttamente l'applicazione su Internet finché non sarà completata la revisione delle superfici di sicurezza.
Le aree attualmente oggetto di revisione includono:
- rendering sicuro dei dati controllabili dall'utente;
- protezione CSRF;
- confinamento dei percorsi filesystem;
- gestione dei symlink;
- installazioni atomiche;
- limiti sulle risorse ZIP;
- limiti sui manifest;
- gestione degli errori delle API.
Questo progetto deriva dalla repository originale:
Dan12/Launchpad
La fork mantiene il concetto originale di Launchpad virtuale e aggiunge strumenti per facilitarne installazione, utilizzo, manutenzione e gestione delle canzoni.
Repository della fork:
https://github.com/LordSkull/Launchpad
Il progetto originale è distribuito con licenza MIT.
La licenza del codice non implica automaticamente diritti sul materiale audio incluso o utilizzato con il progetto.
Controlla sempre separatamente i diritti relativi a:
- sample audio;
- sound pack;
- canzoni;
- stem;
- project file di terze parti.
Il fatto che un sound pack sia disponibile online non implica automaticamente il diritto di ridistribuirlo.