View Single Post
Old 19-03-2020, 16:29   #1
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3594
[C] Editor/Player file midi

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
misterx è offline   Rispondi citando il messaggio o parte di esso