diff --git a/LEGGIMI.md b/LEGGIMI.md deleted file mode 100644 index c0ca5c4..0000000 --- a/LEGGIMI.md +++ /dev/null @@ -1,34 +0,0 @@ -# PlayPiano - -Pianoforte virtuale a 88 tasti con spartiti (MIDI e MusicXML), pentagramma, modalità apprendimento, -compositore di idee e generazione con IA locale tramite Ollama. - -## Usarlo nel browser -Doppio clic su `Avvia PlayPiano.command` (macOS). Apre l'app su http://localhost:8765. - -## App desktop (macOS, Windows, Linux) -Serve Node.js 20 o superiore. - - npm install # solo la prima volta - npm start # avvia l'app desktop in prova - -### Creare i pacchetti - npm run dist:mac # dist/PlayPiano--arm64.dmg (Apple Silicon) e PlayPiano-.dmg (Intel) - npx electron-builder --win zip --x64 # versione portatile per Windows - npx electron-builder --linux tar.gz --x64 # versione portatile per Linux - -L'AppImage per Linux richiede strumenti per processori Intel. Su un Mac con chip Apple si costruisce con Docker: - - docker run --rm --platform linux/amd64 -v "$PWD":/project -w /project \ - electronuserland/builder:wine /bin/bash -lc "npx electron-builder --linux AppImage --x64" - -L'installer Windows (.exe) non si può produrre da un Mac con chip Apple. Si costruisce su un PC Windows con -`npm install` e `npm run dist:win`, oppure su GitHub con il flusso `.github/workflows/build.yml`. - -I pacchetti finiscono nella cartella `dist/`. - -## Note -- I pacchetti non sono firmati con un certificato a pagamento. Su macOS, al primo avvio: clic destro sull'app e poi "Apri". - Su Windows: "Ulteriori informazioni" e poi "Esegui comunque". -- Le idee con IA richiedono Ollama in esecuzione sullo stesso computer (http://localhost:11434). -- Campioni di pianoforte: Salamander Grand Piano di Alexander Holm, licenza CC-BY 3.0 (vedi `samples/LEGGIMI.txt`). diff --git a/README.md b/README.md new file mode 100644 index 0000000..f770154 --- /dev/null +++ b/README.md @@ -0,0 +1,116 @@ +# 🎹 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). diff --git a/docs/screenshot.jpg b/docs/screenshot.jpg new file mode 100644 index 0000000..4ea49f4 Binary files /dev/null and b/docs/screenshot.jpg differ