Un'opzione che nessuno ha realmente menzionato è quella di usare quelle cifre extra per scopi speciali (es. Cambia tempo, un altro strumento). Se lo strumento principale è un pianoforte, immagino che assegnare semplicemente una cifra al rullante, al basso e al piatto aggiungerebbe molto fascino alla tua musica finale.
In effetti, si aprirà l'aggiunta di nuovi strumenti hai a disposizione un sacco di nuovi modi per farlo. Puoi lasciare che ogni cifra rappresenti un'operazione. Ogni operazione potrebbe rappresentare uno strumento, un tempo o un cambio di effetto, ecc ... Inoltre, ogni operazione leggerebbe tutte le cifre necessarie per soddisfare il conteggio dei parametri. Ciò consentirà ai tuoi battiti di avere cose come sustain, accento, ecc ... per le tue note.
Questo in realtà renderà il problema di avere più spazio dati rispetto allo spazio note ancora più un problema, tranne che per il fatto che non è mai stato davvero un problema per cominciare. Riempi lo spazio extra con le successive ottave più alte e più basse. Ciò si tradurrà in un leggero squilibrio delle note, ma in realtà non vogliamo comunque un equilibrio ...
Il che ci porta a un altro problema. Penso che la soluzione migliore sia usare i modelli trovati nella musica popolare per garantire che la dispersione delle note sia piacevole. Ho trovato questo sito che contiene i dati che vorremmo per determinare che:
La tua applicazione avrà maggiori probabilità di suonare meglio quando produce note con un pattern di dispersione simile a questo. Potresti scoprire che alcuni strumenti possono funzionare in modo molto diverso, quindi (come con tutto questo) la sperimentazione sarà importante.
Una volta che questo sistema funziona, suggerirei di provare a pensare a un'altra canzone che suona in modo simile a quello che hai e fa un grafico di dispersione delle note più esatto che corrisponde effettivamente a una canzone nella stessa tonalità. Leggi la pagina al link sopra per vedere cosa intendo.
Se vuoi fare un ulteriore passo avanti, avrai la possibilità di aggiungere tutte le funzioni che desideri. Devi solo decidere quanto è grande un codice operativo (1,2,3 caratteri) a seconda di quante diverse funzioni hai e gestirle tutte (anche se grandi blocchi di esse fanno la stessa cosa). Se vuoi davvero che questa sia una sinfonia complessa, ti suggerisco di separare la fase di elaborazione dalla fase di riproduzione per eliminare eventuali problemi di temporizzazione che avrai a causa della velocità di dati variabile inerente a tale progetto. Fortunatamente esistono degli standard. Uno standard popolare si chiama MusicXML. Se crei il tuo programma per generare semplicemente quei file. Successivamente potrai riprodurre quei file utilizzando un lettore MusicXML.
Aggiornamento: se desideri vedere i miei esperimenti con questo, potresti ottenere loro qui.