# 🎹 PlayPiano Pianoforte virtuale a 88 tasti per suonare, leggere spartiti, imparare brani e inventare musica. Funziona nel browser e come app desktop per macOS, Windows e Linux. **Provalo online:** https://melody.djluza.com/ ![PlayPiano con pentagramma, cascata di note e tastiera](docs/screenshot.jpg) ## Cosa fa - **Pianoforte a coda campionato** su tutti gli 88 tasti, da La0 a Do8, con registrazioni di uno Yamaha C5. Sono disponibili anche piano elettrico, organo, synth e archi. - **Tanti modi di suonare**: mouse, touch con più dita, tastiera del computer e tastiera MIDI. Pedale sustain, glissando e dinamica in base al punto in cui premi il tasto. - **Spartiti**: carica file MIDI (`.mid`) e MusicXML (`.musicxml`, `.xml`, `.mxl`), anche trascinandoli sulla pagina. - **Pentagramma** in chiave di violino e di basso, due righe per volta, con i nomi delle note (Do Re Mi oppure C D E). - **Cascata di note "spaziale"** che scende verso la tastiera e illumina il tasto da suonare. - **Modalità Apprendimento**: il brano avanza solo quando suoni la nota giusta. Puoi studiare una mano alla volta, rallentare fino al 25% e vedere il punteggio di precisione. - **Compositore di idee**: genera brani da 8 a 128 battute in sei stili, con tonalità, accordi, melodia e accompagnamento. - **Generatore di accordi**: 18 tipi di accordo con rivolti e 13 giri classici (pop, jazz, blues, canone di Pachelbel, andalusa e altri) in tutte le tonalità. - **Idee con IA locale**: descrivi a parole il brano che vorresti e un modello di [Ollama](https://ollama.com) sul tuo computer ne progetta la struttura. - **Registratore** ed **esportazione in MIDI** di qualsiasi brano caricato o generato. ## Comandi da tastiera | Tasti | Funzione | |---|---| | `Z` `X` `C` `V` `B` `N` `M` con `S` `D` `G` `H` `J` | ottava bassa, tasti bianchi e neri | | `Q` `W` `E` `R` `T` `Y` `U` `I` `O` `P` con `2` `3` `5` `6` `7` `9` `0` | ottava alta, tasti bianchi e neri | | `←` `→` | cambia ottava | | `Spazio` | pedale sustain | | `Invio` | avvia o mette in pausa il brano | | `Maiusc` + tasto | nota più forte | Le etichette sui tasti si adattano al layout della tua tastiera, italiana compresa. ## Come usarlo ### Online Apri https://melody.djluza.com/ con Chrome, Edge, Firefox o Safari. ### Sul tuo computer, nel browser Su macOS fai doppio clic su `Avvia PlayPiano.command`. Avvia un piccolo server locale e apre l'app su `http://localhost:8765`. Su altri sistemi, dalla cartella del progetto: python3 -m http.server 8765 --bind 127.0.0.1 Aprire direttamente `index.html` con un doppio clic funziona, ma con due limiti: i campioni del pianoforte vengono scaricati da internet e Ollama rifiuta le richieste della pagina. ### App desktop Scarica il pacchetto per il tuo sistema dalla pagina [Actions](../../actions) (sezione Artifacts dell'ultima compilazione riuscita) oppure dalle [Release](../../releases), se presenti. I pacchetti non sono firmati con un certificato a pagamento. Al primo avvio su macOS usa clic destro e poi "Apri". Su Windows scegli "Ulteriori informazioni" e poi "Esegui comunque". ## Idee con IA locale (Ollama) 1. Installa e avvia [Ollama](https://ollama.com), poi scarica un modello, per esempio `ollama pull gemma3:12b`. 2. Nell'app scrivi la descrizione del brano, scegli il modello e premi "Genera con IA". Il modello decide titolo, stile, tonalità, metrica, tempo, accordi e il motivo melodico di ogni sezione. Ogni valore viene verificato dall'app, che completa melodia e accompagnamento. Vanno bene i modelli "instruct" da circa 8 miliardi di parametri in su. Provati: `gemma3:12b` e `gemma4:26b`. Ollama accetta richieste solo da pagine servite su `localhost` e dall'app desktop. Per usare l'IA dal sito online, avvia Ollama consentendo il sito: OLLAMA_ORIGINS=https://melody.djluza.com ollama serve ## Sviluppo Tutta l'app è nel file `index.html`, senza dipendenze né passaggi di compilazione. | Percorso | Contenuto | |---|---| | `index.html` | l'intera applicazione web | | `samples/` | campioni del pianoforte, un mp3 ogni terza minore | | `esempi/` | brani di prova in formato MIDI, MusicXML e MXL | | `desktop/` | contenitore Electron e icona | | `.github/workflows/build.yml` | compilazione dei pacchetti desktop su GitHub | ### App desktop in locale Serve Node.js 20 o superiore. npm install # solo la prima volta npm start # avvia l'app desktop npm run dist:mac # crea i file .dmg nella cartella dist/ Da un Mac con chip Apple si ottengono anche le versioni portatili: npx electron-builder --win zip --x64 npx electron-builder --linux tar.gz --x64 L'installer per Windows e l'AppImage per Linux vengono compilati da GitHub Actions. Il flusso si avvia a mano dalla pagina Actions, oppure pubblicando un tag di versione, che crea anche una Release con i pacchetti: git tag v1.0.0 && git push origin v1.0.0 ### Pubblicazione del sito Il sito è composto da soli file statici: rsync -az index.html samples esempi utente@server:public_html/ ## Limiti noti - Gli spartiti in PDF o in foto non sono supportati: servono MIDI o MusicXML. - Sul pentagramma non vengono disegnate pause, legature di valore e travature. - Nei file MIDI le durate scritte sono dedotte dall'esecuzione, quindi possono risultare approssimate. - I ritornelli dei file MusicXML non vengono ripetuti. ## Crediti e licenze - Campioni di pianoforte: [Salamander Grand Piano](https://archive.org/details/SalamanderGrandPianoV3) di Alexander Holm, licenza CC-BY 3.0. - App desktop realizzata con [Electron](https://www.electronjs.org).