spArtitI è una (web)app (Python/FastAPI e Next.js) basata su software open source che trasforma l'URL di un video YouTube, un MP4 o un MP3 di pianoforte — solo o in un mix, anche solo uno spezzone — in MP3, MIDI, MusicXML e PDF con diteggiatura proposta. La sequenza di operazioni che esegue è: estrazione dell'audio con yt-dlp e FFmpeg, separazione facoltativa del pianoforte con Demucs, trascrizione con Transkun, partitura con music21 e PDF con MuseScore 4. Su un brano reale di 6,7 minuti la pipeline impiega circa 100 secondi su una GPU RTX 4070 con 8 GB di VRAM, circa 3,5 volte di più su CPU. Da poco accetta anche un PDF di spartito (anche scansionato) o un'immagine, riconosciuti con homr (OMR open source) e poi trattati come un MusicXML in ingresso. I limiti sono dichiarati:
- funziona meglio con il pianoforte solo;
- il tempo è stimato e correggibile;
- la diteggiatura è una proposta.
Ascoltare un brano e volerlo suonare.
Sono un pianista autodidatta e lo scorso anno ho deciso di frequentare un breve corso (16 lezioni di 2 ore) sul pianoforte, la sua storia, la musica classica… e un po' di pratica sullo strumento. E dopo il corso…
Capita a chiunque suoni: senti un pezzo per pianoforte, magari in un video, e vorresti avere lo spartito davanti. A volte esiste, a volte costa, a volte è la trascrizione di qualcun altro che non somiglia a quello che stai ascoltando. La domanda è se un computer possa ascoltare e scrivere al posto tuo.
Trascrivere musica da un file audio è difficile per una ragione semplice: l'audio è un'unica onda in cui tutte le note, i pedali, il riverbero della sala e gli altri strumenti sono già mescolati. Il pianoforte poi complica le cose, perché suona molte note insieme e il pedale le tiene vive anche dopo che il tasto è stato rilasciato. Una nota che nello spartito dura una semiminima, nella registrazione può risuonare molto più a lungo.
Un brano musicale è un segnale acustico multidimensionale composto da:
- Altezza (frequenza). Le note e gli accordi generati dagli strumenti o dalla voce.
- Timbro. La combinazione complessa di frequenze fondamentali e armoniche che rende riconoscibile ogni strumento (spiegata matematicamente dall'analisi di Fourier).
- Dinamica e inviluppo. Il modo in cui il volume e l'intensità di ogni suono cambiano dall'inizio alla fine: attacco, decadimento, rilascio.
- Ritmo e tempo. L'organizzazione degli eventi sonori lungo l'asse temporale.
Come faccio di solito, se non trovo l'applicazione giusta me la scrivo (o meglio la faccio scrivere alla AI) : non volevo usare un servizio esterno e non volevo che si fermasse al MIDI: il MIDI da solo non si legge, e un MIDI «grezzo» trasformato in partitura produce di solito pagine illeggibili. Servivano uno spartito vero, con la diteggiatura, e un modo per ascoltarlo e correggerlo.
Da un URL a un PDF in cinque passi.
Ogni passo della pipeline legge e scrive file, e si può provare da solo. Questo è il percorso completo, dall'indirizzo del video al foglio da mettere sul leggio.
Da un URL, yt-dlp e FFmpeg scaricano il video (al più 720p) e ne estraggono l'audio in MP3; da un MP4 o un MP3 caricato si parte direttamente da lì. Puoi indicare un Inizio e una Fine per lavorare solo su uno spezzone, e ottieni anche il video ritagliato.
Se il brano non è per pianoforte solo, Demucs
(htdemucs_6s) divide l'audio in sei tracce — voce, batteria, basso, chitarra, pianoforte,
altro — e isola il pianoforte. In modalità automatica l'app misura quanta energia ha la traccia
del pianoforte e, se supera il 90%, usa direttamente l'audio originale.
Transkun (licenza MIT, motore predefinito) trasforma l'audio in MIDI: quali note, quando iniziano, quanto durano, con che intensità. In alternativa si può scegliere il modello di ByteDance.
music21 costruisce il MusicXML: divide le mani, quantizza il ritmo, stima la tonalità, aggiunge dinamiche, pedale e diteggiatura. Qui si decide anche il tempo, ed è il passo più delicato (ne parlo nella Parte 3).
MuseScore 4, da riga di comando, impagina la partitura in PDF. Nel browser lo spartito si vede con OpenSheetMusicDisplay, che alimenta il player.
Il MIDI (Musical Instrument Digital Interface) non contiene suono: contiene istruzioni, come uno spartito per macchine. Per ogni nota dice quale tasto, quando inizia, quanto dura e con che intensità è stato premuto, più eventi come il pedale. Per questo un file MIDI pesa pochi kilobyte, si può far suonare da qualunque strumento virtuale e si può correggere nota per nota, cosa impossibile con un MP3. È il ponte tra l'audio, che il trascrittore ascolta, e la partitura, che music21 scrive.
Quale motore di trascrizione? Un confronto su tre brani veri.
Prima di scegliere ho fatto un confronto A/B su tre brani reali: La cura di Franco Battiato, In The Air Tonight di Phil Collins e Una lunga storia d'amore di Gino Paoli. Ha vinto Transkun applicato al pianoforte isolato da Demucs. Un'altra strada, togliere solo la voce dal mix con BS-RoFormer e trascrivere il resto, non ha migliorato il risultato e costa circa una volta la durata del brano, quindi non è entrata nella pipeline.
Trascrizione diretta
- Nessuna separazione: l'audio va dritto al trascrittore
- Il trascrittore riceve l'audio originale, senza gli artefatti della separazione
- Più veloce: manca il passo Demucs
Separazione + trascrizione
- Demucs isola il pianoforte, che resta «sporco»
- Transkun scrive da 2 a 8 volte meno note del modello ByteDance ed è stabile
- La separazione aggiunge circa il 10–20% della durata del brano su GPU
C'è un dettaglio che ha fatto la differenza anche sul pianoforte solo. Transkun scrive la durata reale del tasto, non quella della nota percepita sotto il pedale. Senza correzione, su un brano di pianoforte solo la durata mediana delle note era di 0,23 secondi contro gli 0,83 della versione corretta: una partitura spezzettata in note brevissime. Per questo l'app allunga le note rilasciate mentre il pedale è premuto.
Il giorno in cui il Clementi suonava a 108 invece che a 205.
Per scrivere uno spartito serve il tempo, cioè quanti battiti al minuto (BPM). L'app stima questo valore analizzando l'audio attraverso due indizi principali: la frequenza delle note (il ritmo dei singoli attacchi) e la cadenza dei cambi armonici (ogni quanto varia l'accordo). Sui brani provati la stima dà 95 per In The Air Tonight, 61 per Una lunga storia d'amore, 90 per La cura e 70 per A Whiter Shade of Pale. Il beat tracking standard di librosa sul mix, per La cura, dava invece 129.
Poi, il 20 ottobre 2026, ho provato la Sonatina op. 36 n. 1 di Clementi, un pezzo vivace, e la stima è uscita a 108 BPM. Il PDF si riempiva di crome e semicrome, illeggibile.
Ho misurato gli attacchi: Do a 0,98 s, Mi a 1,28, Do a 1,39, Sol a 1,53, Sol a 1,84, Do a 2,15. Una battuta dura 1,17 s, quindi una semiminima circa 0,29 s: circa 205 BPM, non 108. La stima era giusta nel metodo e sbagliata nel risultato perché la ricerca era limitata a 60–180 BPM, e il tempo vero, fuori dall'intervallo, veniva dimezzato.
È bastato alzare il limite superiore a 240 BPM per far saltare la stima del Clementi da 108 a 214 BPM, lasciando intatti i risultati degli altri quattro brani. Il problema stava tutto lì: bloccando la ricerca a 180 BPM, l'algoritmo veniva forzato a dimezzare il tempo reale, anche se il punteggio di questa metà era appena il 43% rispetto a quello del tempo vero.
Una bella lezione: i parametri tarati solo su pochi brani lenti si rompono al primo pezzo veloce. In fondo, le stime automatiche restano sempre un punto di partenza. Non a caso nell'app il campo BPM si può correggere a mano, con i tasti rapidi ÷2 e ×2 per sistemare al volo i raddoppi e i dimezzamenti tipici dei brani in 2/2.
E il rubato? Un metronomo che si riaggancia.
Nessuno suona a tempo perfettamente costante. Per questo la partitura non usa un metronomo rigido: un metronomo adattivo (un anello ad aggancio di fase) si riallinea agli attacchi che cadono vicino alla griglia delle crome e corregge il periodo man mano, entro il ±25% del tempo iniziale. Le costanti sono state tarate sul Clementi stesso: i due passaggi del primo ritornello, trascritti separatamente, coincidono al 99% per posizione e altezza delle note. Il player usa la stessa mappa, quindi cursore e spartito restano allineati anche quando chi suona accelera o rallenta.
Una proposta di diteggiatura, non un'edizione.
Per ogni mano l'app sceglie le dita con un algoritmo di Viterbi: cerca il percorso di diteggiatura che, su tutta la frase, minimizza le estensioni della mano, gli incroci e i salti. I pesi sono euristici e stanno in cima al modulo. La diteggiatura viene aggiunta a livello di accordo, una per ogni altezza; con più di cinque note nello stesso accordo non ne assegna nessuna.
Va detto chiaramente: è una proposta. Non sostituisce quella di un'edizione curata da un pianista, che tiene conto della musica, non solo della geometria della mano. Serve a darti un punto di partenza che puoi correggere nota per nota.
L'editor, il player e un pianoforte nel browser.
La trascrizione automatica è imperfetta, e fingere il contrario sarebbe disonesto. Per questo, dopo l'elaborazione, l'app non si ferma al PDF:
- Player sincronizzato. Ascolti l'audio mentre lo spartito scorre; una tastiera virtuale a 88 tasti evidenzia i tasti da premere (blu la mano destra, verde la sinistra), con il numero del dito e lo stato del pedale. Puoi saltare in un punto e rallentare fino a 0,5×.
- Editor nota per nota. Clicchi una nota dello spartito (oppure ti sposti con le frecce, o con i pulsanti Precedente e Successiva) e ne correggi altezza, durata, mano o dito, la trasformi in pausa, la elimini o ne aggiungi una nuova. I comandi sono raggruppati in un pannello — ascolto, spostamento, altezza, durata, nota, cronologia — quindi si lavora anche da tablet, senza tastiera fisica. Un clic seleziona la nota e porta l'audio e il cursore su quel punto; un doppio clic sposta solo il player. Ci sono «Annulla», «Ripeti», «Azzera modifiche» e «Salva modifiche», che rigenera PDF, MusicXML e MIDI con le correzioni.
- Audio dallo spartito. Un pianoforte sintetizzato nel browser, a partire dalle note dello spartito (pedale compreso), con i campioni del Salamander Grand Piano (licenza CC-BY 3.0, circa 2 MB). Dallo stesso pannello delle correzioni scegli se ascoltare l'originale o lo spartito: sentire cosa hai corretto è il modo più rapido per capire se hai corretto bene.
- Tre livelli di partitura. Fedele, Bilanciato e Leggibile: più fedele all'esecuzione o più semplice da leggere. Sul Clementi il livello Leggibile ha dato comunque il risultato migliore.
Fermare un'elaborazione lunga
Un brano lungo occupa l'unica coda di lavoro e, all'inizio, non c'era modo di fermarlo se non riavviare il server, perdendo tutti i job. Oggi il pannello Job elenca quelli noti al server — in coda, in corso (con passo e percentuale), finiti, in errore, interrotti — e il pulsante Interrompi ferma un job in pochi secondi, libera la GPU e cancella i file temporanei, come i download parziali. Un job interrotto non è un errore e non offre file.
I job finiti, in errore o interrotti si possono togliere dall'elenco (Rimuovi) o eliminare insieme alla loro cartella sul disco (Cancella, dopo una conferma). Le cartelle non modificate da più di un giorno si cancellano da sole all'avvio del server e a ogni nuovo job, mai quelle dei job in corso o in coda; il limite si cambia con una variabile d'ambiente. Al primo avvio con questa regola sono sparite 34 cartelle su 50, da circa 923 a 311 MB.
L'interruzione è cooperativa: ogni job ha un proprio token e i passi lo controllano. Un sottoprocesso come FFmpeg o MuseScore viene terminato, la separazione si ferma tra un blocco da 60 secondi e il successivo, la trascrizione controlla a ogni segmento.
L'interfaccia è in italiano, inglese e spagnolo, con tema automatico, chiaro o scuro e note scritte come Do Re Mi oppure come A B C.
Anche da un PDF o dalla foto di uno spartito.
Finora spArtitI partiva sempre dall'audio. Ora si può trascinare nell'app anche un PDF di spartito (anche scansionato) o un'immagine (.png, .jpg, .jpeg). Un passo nuovo, Riconoscimento, trasforma le pagine in MusicXML con homr, un software open source di riconoscimento ottico della musica (OMR, con modelli ONNX). Da lì il percorso è quello del MusicXML in ingresso: spartito con diteggiatura proposta, tastiera virtuale, editor, PDF e pianoforte sintetico nel browser. Non c'è un audio originale: si ascolta solo il pianoforte sintetizzato.
L'OMR (Optical Music Recognition, riconoscimento ottico della musica) è l'equivalente dell'OCR per la notazione musicale: prende l'immagine di uno spartito — scansione, foto o PDF — e la trasforma in un formato che il computer capisce, come il MusicXML. Deve riconoscere righi, chiavi, armature, note (altezza e durata), pause, legature e ritornelli. È più difficile dell'OCR perché il significato di un simbolo dipende dalla posizione e dal contesto, i simboli si sovrappongono e il ritmo va sommato dentro la battuta: per questo sbaglia più spesso i ritmi che le altezze. È un problema diverso dalla trascrizione audio: Transkun ascolta un brano e scrive le note, homr guarda una pagina già scritta.
Come funziona: omr.py converte il PDF in immagini in scala di grigi a 200 dpi con PyMuPDF (lato lungo al massimo 4000 pixel) e passa ogni pagina a homr. Le pagine, fino a 30, vengono unite in ordine in un solo spartito e la numerazione delle battute continua. I ritornelli di fine senza un inizio corrispondente sono corretti, altrimenti il player suonerebbe di nuovo le pagine precedenti. Una pagina illeggibile o vuota si salta con un avviso; l'errore scatta solo se nessuna pagina viene riconosciuta. Il titolo è il nome del file, perché l'OCR del titolo sbaglia spesso. Per l'app è un nuovo tipo di job, con i passi riconoscimento, partitura e PDF.
L'OMR sbaglia soprattutto i ritmi (arpeggi tra i righi, due voci) e meno le altezze. Per questo, a job finito, l'app mostra un riquadro ambra con l'avviso «Riconoscimento automatico: controlla ritmi e battute» e il pulsante per scaricare il MusicXML riconosciuto. All'inizio era una riga grigia piccola: troppo facile non vederla. Il percorso consigliato per un risultato esatto è scansione, riconoscimento, correzione in MuseScore e ricarica del MusicXML corretto. Non riporto percentuali di accuratezza perché non le ho misurate: su tre pagine reali la catena ha prodotto 534 note.
Anche homr usa la GPU: misurato su una pagina, l'inferenza per rigo impiega 0,44 secondi su una RTX 4070 contro 2,0 su CPU, e una pagina costa circa 16–18 secondi con l'avvio compreso (su CPU la prima misura era di circa 1 minuto e 44 secondi a pagina). Al primo uso si scaricano circa 130 MB di pesi, quindi serve la rete.
Poi c'è una domanda nata proprio dall'OMR: homr riconosce le legature di frase (poco affidabili) e non il pedale, mentre il percorso «da spartito» scartava comunque entrambi. Ora l'app legge dal MusicXML pedale e legature di frase. La sorpresa tecnica: expandRepeats() di music21 scollega questi segni dalle note (l'ho verificato su un file di prova), quindi si leggono dal file non espanso e si riportano sulle ripetizioni in base al numero di battuta. Il pedale arriva a timeline, tastiera, pianoforte sintetico e PDF; le legature a PDF e spartito mostrato, senza cambiare il suono. Una nota cancellata dall'editor porta via la sua legatura.
Cosa non fa, e perché gira tutto in locale.
Preferisco un elenco di limiti scritto oggi a una sorpresa tra sei mesi. Questi sono quelli noti:
- Funziona meglio con il pianoforte solo. Sui mix il pianoforte isolato da Demucs è «sporco»: il trascrittore può inventare o perdere note, soprattutto se un altro strumento suona nella stessa gamma. La qualità va giudicata all'orecchio, sul brano che ti interessa. Il violino non ha una traccia propria e finisce in «altro».
- Il tempo è una stima. La partitura segue le variazioni entro il ±25%, ma resta una proposta; i cambi di metro sono fuori ambito.
- Euristiche tarate su pochi brani. Soglie e pesi sono stati regolati soprattutto sul Clementi: su altri repertori possono servire correzioni, come ha mostrato proprio il limite dei 180 BPM.
- Una voce per mano. Le mani si dividono al Do centrale e ogni mano ha una sola voce: polifonia complessa e più voci per rigo non sono gestite.
- Brani lunghi. Oltre 10 minuti di spezzone serve una conferma esplicita. Un brano di 33 minuti è stato gestito a memoria costante, grazie alla separazione a blocchi di 60 secondi (senza, servirebbero circa 4 GB), ma il disegno dello spartito e il modello su GPU possono saturare un PC con poca RAM.
- Interruzione dei job. Il download da URL con Inizio e Fine usa FFmpeg senza punti di controllo: l'interruzione scatta solo quando quel download finisce. Non si possono interrompere la lettura delle informazioni del video, il caricamento del modello Demucs e il passo Partitura (music21), né la rigenerazione e il salvataggio delle modifiche.
- Scansioni e PDF. Massimo 30 pagine; tempo e metro costanti; una voce per rigo; nessun pedale riconosciuto dall'OMR; strumenti diversi dal pianoforte e spartiti orchestrali fuori ambito. Il riconoscimento di una pagina non si può interrompere a metà (la cancellazione si controlla tra le pagine) e, se due pagine hanno un numero diverso di righi, una mano può essere scartata o svuotata, con un avviso solo nel log. Gli errori di ritmo vanno corretti a mano.
- L'elenco dei job vive in memoria. Dopo un riavvio del server riparte vuoto; i file restano sul disco.
Quanto alla scelta del locale: l'app si avvia con uv run spartiti-serve (oppure
con lo script avvia.bat) e il server ascolta solo su 127.0.0.1. La musica non passa da
nessun servizio di trascrizione esterno. La rete serve per scaricare il video da YouTube, per il modello Demucs
(circa 300 MB, al primo uso) e per i campioni del pianoforte (una volta sola). Un promemoria che vale
sempre: scarica soltanto contenuti di cui hai diritto di fare una copia personale, nel rispetto dei termini di
YouTube e del diritto d'autore.
Per ora, quindi, spArtitI gira in locale, sul mio computer. In futuro potrà essere spostata sui server virtuali già in funzione, la cui architettura è descritta in Due VPS, una GPU che si sveglia da sola: un server ARM64 sempre acceso e una GPU A10 che parte solo quando serve.
Come è stato costruito.
spArtitI è sviluppato con Claude Code, partendo da una specifica e da un piano scritti prima del codice. Usa soltanto librerie open source. Per l'ingresso da PDF ho seguito lo stesso schema (brainstorming, specifica, piano, un implementatore e un revisore per ogni task): la revisione finale dell'intero ramo ha trovato quattro problemi importanti che le revisioni dei singoli task non avevano visto — ritornelli che fanno suonare di nuovo le pagine precedenti, titolo preso dall'OCR, PNG trasparenti, pagina vuota. L'episodio del Clementi insegna comunque che i test su dati preparati non sostituiscono la prova su un brano vero, mai visto prima.
Domande frequenti.
Come si trasforma un video di YouTube in uno spartito?
Con spArtitI incolli l'URL del video (facoltativamente indichi Inizio e Fine dello spezzone): l'app estrae l'audio, lo trascrive in MIDI con Transkun e produce MusicXML e PDF con diteggiatura proposta. Su un brano di 6,7 minuti servono circa 100 secondi su una GPU RTX 4070.
Funziona anche con brani con più strumenti?
Sì, ma con risultati più incerti. Demucs isola prima il pianoforte dal mix, però la traccia risultante contiene artefatti e il trascrittore può inventare o perdere note. Funziona meglio con il pianoforte solo; sui mix conviene giudicare il risultato all'orecchio.
Quanto è accurata la trascrizione?
È buona ma imperfetta, e per questo l'app include un editor. Il confronto su tre brani reali ha premiato Transkun sul pianoforte isolato: scrive da 2 a 8 volte meno note del modello ByteDance ed è stabile. Il tempo è stimato e si corregge a mano.
Posso correggere lo spartito?
Sì. Puoi modificare una nota alla volta (altezza, durata, mano, dito), eliminarla o aggiungerne una, con «Annulla» e «Ripeti», anche da tablet grazie ai comandi a pulsanti. «Salva modifiche» rigenera PDF, MusicXML e MIDI con le correzioni. L'MP3 e il video non cambiano.
La diteggiatura è affidabile?
È una proposta calcolata con un algoritmo di Viterbi che riduce estensioni, incroci e salti della mano. Non sostituisce la diteggiatura di un'edizione curata da un pianista: usala come punto di partenza.
Posso interrompere un'elaborazione lunga?
Sì. Il pannello Job elenca i job in coda, in corso, finiti, in errore e interrotti, e «Interrompi» ferma un job in pochi secondi, libera la GPU e cancella i file temporanei. Fa eccezione il download da URL con Inizio e Fine, che si ferma solo quando termina.
Posso partire da un PDF o dalla foto di uno spartito?
Sì. Trascini nell'app un PDF (anche scansionato, fino a 30 pagine) o un'immagine PNG o JPG: homr riconosce le pagine e le trasforma in MusicXML, poi il percorso è quello dello spartito con diteggiatura proposta, editor e PDF. L'OMR sbaglia soprattutto i ritmi, quindi conviene scaricare il MusicXML riconosciuto, correggerlo in MuseScore e ricaricarlo.
Serve una GPU? I miei dati restano sul mio computer?
Una GPU NVIDIA non è obbligatoria: senza, l'app usa la CPU ed è circa 3,5 volte più lenta. L'elaborazione avviene in locale e il server ascolta solo sul tuo computer; la rete serve soltanto per scaricare il video, il modello Demucs e i campioni del pianoforte.