ciao,
qualche anno fa avevo scritto un player di file midi che funziona abbastanza bene oggi, con la storia del coronavirus, volevo sitemarlo per tentare di creare una sorta di editor col quale sistemare alcuni miei file midi ma ho un problema ed in effetti, credo non mi sia mai stato insegnato come risolvere un problema del genere.
I file midi sono file binari strutturati in un certo modo ed io leggo byte a byte i dati dal disco con un semplice
c = fgetc(fp);
e poi in base al valore del byte, decido con un
if(c == xD10) .......
se leggere il successivo byte oppure tornare indietro di un certo numero di byte per fare ulteriori controlli.
A distanza di tempo e forse colto dalla fretta, oggi ho un sorgente con una miriade di c=fgetc(fp); ed if(c == 0x??) il quale rende molto complesso fare delle modifiche; per questo vi chiedo qual'è la strategia migliore per rendere il programma più compatto e leggibile.
Vi posto una piccolissima parte del codice in modo che possiate capire qual'è il problema
Codice:
if(c >= 0xC0 && c <= 0xCF)
{
c = fgetc(fp);
if(c <= 127) // verifico
{
fseek(fp, -2, SEEK_CUR); // riavvolgo
//canale
Phrase[contaeventi++] = fgetc(fp);
//nota
Phrase[contaeventi++] = fgetc(fp);
//delta-time
Phrase[contaeventi++] = fgetc(fp);
// ulteriore byte di delta time
if(Phrase[contaeventi-1] > 127){
c = fgetc(fp);
Phrase[contaeventi-1] = Phrase[contaeventi-1] + c; }
c = 0;
}
else
{
fseek(fp, -2, SEEK_CUR);
c = fgetc(fp);
}
grazie