Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Resident Evil 3 provato con 10 schede video
Resident Evil 3 provato con 10 schede video
Approfondimento dedicato al comparto tecnico e ai benchmark di Resident Evil 3. Abbiamo provato il nuovo survival horror in terza persona di Capcom con 10 schede video, e testato le varie opzioni grafiche. Ecco le nostre conclusioni, in particolare a proposito del supporto alle GPU Radeon
HUAWEI P40 Pro: il re dei 'cameraphone'. Senza Google ora si può usare bene. Recensione
HUAWEI P40 Pro: il re dei 'cameraphone'. Senza Google ora si può usare bene. Recensione
Arriva sul mercato il nuovo ''cameraphone'' di HUAWEI. Cambia nel suo design con un display a quattro lati curvi. Migliorano le fotocamere, quattro, al posteriore con zoom a periscopio. E non ci sono i servizi di Google che permettono di aumentare l’autonomia. Ecco la recensione.
Che cos'è il Variable Rate Shading (VRS)
Che cos'è il Variable Rate Shading (VRS)
Il Variable Rate Shading (VRS) rappresenterà una delle tecnologie cardine dei videogiochi dei prossimi anni. Supportata dalle nuove console come Playstation 5 e Xbox Series X, ma anche dalle GPU desktop di Nvidia, AMD e Intel, permetterà di avere maggiori prestazioni senza perdere qualità grafica in modo visibile. In questo articolo vi spieghiamo di cosa si tratta.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-03-2020, 16:29   #1
misterx
Senior Member
 
Iscritto dal: Apr 2001
Messaggi: 3446
[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 è online   Rispondi citando il messaggio o parte di esso
Old 20-03-2020, 09:12   #2
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 1547
Se il problema è la compattezza, potresti modificare il modo di identare il codice mettendo sulla stessa linea determinati elementi.
Ad esempio:
Codice:
if(c >= 0xC0 && c <= 0xCF){
	c = fgetc(fp);
	if(c <= 127) { // verifico
		fseek(fp, -2, SEEK_CUR); //riavvolgo 			
		Phrase[contaeventi++] = fgetc(fp); //canale
		Phrase[contaeventi++] = fgetc(fp); //notea
		Phrase[contaeventi++] = fgetc(fp); //delta-time
		if(Phrase[contaeventi-1] > 127){ // ulteriore byte di delta time
			c = fgetc(fp);
			Phrase[contaeventi-1] = Phrase[contaeventi-1] + c;
		}
		c = 0;
		} else {
			fseek(fp, -2, SEEK_CUR);
			c = fgetc(fp);
		}
}
Così risulta più compatto.
In alternativa potresi usare lo switch o inglobare in specifiche funzioni il codice per ogni caso.
Altre idee non mi vengono in questo momento.
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2020, 11:21   #3
misterx
Senior Member
 
Iscritto dal: Apr 2001
Messaggi: 3446
grazie per la risposta, però mi chiedevo se esistono metodi più compatti per evitare di scrivere miriadi di if() etc.....

Poi magari non esiste nulla e si fa per forza così, io un metodo più intelligente non l'ho trovato.
misterx è online   Rispondi citando il messaggio o parte di esso
Old 21-03-2020, 19:18   #4
Volutomitra
Member
 
Iscritto dal: Feb 2006
Messaggi: 126
Io, che scrivo firmware, quando devo fare parsing di dati con formato noto vado quasi sempre di macchina a stati finiti. Quindi, per semplificare, uno switch con tutti i vari casi che cambiano in base a quello che devi leggere in quel punto del file.

Non conosco esattamente il formato MIDI, ma suppongo ci si adatti senza problemi. Può essere un'idea?
Volutomitra è offline   Rispondi citando il messaggio o parte di esso
Old 21-03-2020, 20:31   #5
misterx
Senior Member
 
Iscritto dal: Apr 2001
Messaggi: 3446
Quote:
Originariamente inviato da Volutomitra Guarda i messaggi
Io, che scrivo firmware, quando devo fare parsing di dati con formato noto vado quasi sempre di macchina a stati finiti. Quindi, per semplificare, uno switch con tutti i vari casi che cambiano in base a quello che devi leggere in quel punto del file.

Non conosco esattamente il formato MIDI, ma suppongo ci si adatti senza problemi. Può essere un'idea?
grandissimo, mi serviva proprio una informazione del genere.
Io invece ho scritto una miriade di if() e fseek() per tornare sui miei passi se mi trovo davanti dati sbagliati.
Così facendo mi sono accoro che se devo fare una modifica c'è da impazzire.

un esempio?

Codice:
		if(c == 0xFF)
		{
			c = fgetc(fp);

			if(c >= 0x01 && c <= 0x07 || c == 0x7F)
			{
				lff = fgetc(fp); // numero di byte da leggere

				for( i = 0; i <= lff; i++)
				        c = fgetc(fp);

				if(c > 127)
				        c = fgetc(fp);
				c = 0;
			}
			else
			{
				fseek(fp, -2, SEEK_CUR);// se non trovo quello che cerco riavvolgo il file di 2 bytes
				c = fgetc(fp);
			} // end else
		}
misterx è online   Rispondi citando il messaggio o parte di esso
Old 22-03-2020, 12:21   #6
Volutomitra
Member
 
Iscritto dal: Feb 2006
Messaggi: 126
Provo a tradurre il tuo pezzo di codice (non sapendo cosa succede prima e dopo). Ovviamente potrei avere commesso qualche errore, è giusto per farti capire cosa intendo.

Dal codice posso immaginare che in quel punto tu ti aspetti come primo valore nel buffer un byte 0xFF, quindi farei una cosa del genere:

Codice:
// inizializzazione stato
state = WAIT_FOR_FF;

....

// nella funzione di parsing:

while (ho_roba_da_leggere) {
  c = fgetc(fp);

  switch (state) {
    case WAIT_FOR_FF:
      if (0xFF == c) {
        state = WAIT_FOR_SOMETHING_ELSE;
      }
      break;

    case WAIT_FOR_SOMETHING_ELSE:
       if ((c >= 0x01 && c <= 0x07) || (0x7F == c)) {
         state = READ_LENGTH;
       } else {
	 state = GO_BACK_TWO_BYTES;
       }
       break;

    case READ_LENGTH:
       lff = fgetc(fp); // numero di byte da leggere
       state = READ_DATA;
       break;

    case GO_BACK_TWO_BYTES:
      fseek(fp, -2, SEEK_CUR);
      state = DO_SOMETHING; // non so cosa succede a questo punto
      break;

    case READ_DATA:
      if (++i > lff) {
        state = READ_NEXT_STUFF;
       }
       break;

    case READ_NEXT_STUFF:
      if (c > 127) {
        state = READ_OTHER_STUFF;
      }
      break;

    case READ_OTHER_STUFF:
      // non dovrebbe fare niente qui, solo saltare al prossimo stato
      state = MOVE_ON;
      break;

    case MOVE_ON:
      // fai qualcosa
      c = 0; //???? non so a cosa serve
      break;
  }
}
Vedi tu
Volutomitra è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2020, 12:29   #7
misterx
Senior Member
 
Iscritto dal: Apr 2001
Messaggi: 3446
la tua idea mi è chiarissima ma ti chiedo: secondo te, meglio attraverso un unico switch oppure, creare una moltitudine di funzioni ognuna specializzata nel leggere una parte del file midi?
Più che altro è riuscire ad avere codice che si può manutentare senza ammattire.
misterx è online   Rispondi citando il messaggio o parte di esso
Old 22-03-2020, 13:58   #8
Volutomitra
Member
 
Iscritto dal: Feb 2006
Messaggi: 126
Quote:
Originariamente inviato da misterx Guarda i messaggi
la tua idea mi è chiarissima ma ti chiedo: secondo te, meglio attraverso un unico switch oppure, creare una moltitudine di funzioni ognuna specializzata nel leggere una parte del file midi?
Più che altro è riuscire ad avere codice che si può manutentare senza ammattire.
beh, credo che alla tua domanda non ci sia una risposta corretta. Molto dipende da come uno è abituato a scrivere il codice oppure se si tratta di un lavoro in team ovviamente da quali sono le linee guida.
E' una scelta molto personale. Io sono abituato a ragione per FSM, ma è anche deformazione professionale

Forse la scelta più corretta potrebbe essere quella di restare sulla FSM ed eventualmente usare funzioni nei casi più complessi. Ma ti ripeto, è una scelta molto personale...
Volutomitra è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2020, 14:28   #9
misterx
Senior Member
 
Iscritto dal: Apr 2001
Messaggi: 3446
Quote:
Originariamente inviato da Volutomitra Guarda i messaggi
beh, credo che alla tua domanda non ci sia una risposta corretta. Molto dipende da come uno è abituato a scrivere il codice oppure se si tratta di un lavoro in team ovviamente da quali sono le linee guida.
E' una scelta molto personale. Io sono abituato a ragione per FSM, ma è anche deformazione professionale

Forse la scelta più corretta potrebbe essere quella di restare sulla FSM ed eventualmente usare funzioni nei casi più complessi. Ma ti ripeto, è una scelta molto personale...
grazie 1000
misterx è online   Rispondi citando il messaggio o parte di esso
Old 24-03-2020, 14:00   #10
misterx
Senior Member
 
Iscritto dal: Apr 2001
Messaggi: 3446
cha pastrocchio sto formato midi, come si fa ad usare ad esempio En in contesti diversi?

risolto!!!!

Ultima modifica di misterx : 26-03-2020 alle 15:43.
misterx è online   Rispondi citando il messaggio o parte di esso
Old 03-04-2020, 09:29   #11
misterx
Senior Member
 
Iscritto dal: Apr 2001
Messaggi: 3446
qualcuno ha avuto a che fare col parsing del formato midi?
Sono alle prese con la durata delle note.
misterx è online   Rispondi citando il messaggio o parte di esso
Old 03-04-2020, 17:03   #12
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2502
Non ho esperienza con il formato midi ma di parser so qualcosa, qual è il problema?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Resident Evil 3 provato con 10 schede video Resident Evil 3 provato con 10 schede video
HUAWEI P40 Pro: il re dei 'cameraphone'. Senza Google ora si può usare bene. Recensione HUAWEI P40 Pro: il re dei 'cameraphone'. Senza G...
Che cos'è il Variable Rate Shading (VRS) Che cos'è il Variable Rate Shading (VRS)
Nikon D780, reflex semiprofessionale con contaminazioni mirrorless – La prova Nikon D780, reflex semiprofessionale con contami...
ASUS ROG Zephyrus G14: 8 core con AMD Ryzen 9 4900HS ASUS ROG Zephyrus G14: 8 core con AMD Ryzen 9 49...
Apple acquisisce Voysis: Siri ci capir&a...
CXL e Gen-Z, le interconnessioni dei fut...
L'Italia in quarantena per il Coronaviru...
Google Arts & Culture: con Art Trans...
Zoom ammette: alcune conversazioni occid...
Il servizio di infomazioni sul COVID-19 ...
Super offerte Gearbest del weekend: masc...
GeForce GTX 1650 con memoria GDDR6 uffic...
PlayStation 5: ecco come funziona l'SSD
NASA: volete scoprite quale foto ha scat...
Bannato nel gioco online, minaccia di us...
Vodafone: ecco tutte le migliori offerte...
IBM: con OpenPandemics COVID-19 puoi sfi...
Dov'è RTX 2060 SUPER mobile? Canc...
Sconti Amazon esagerati nel weekend (olt...
Google Chrome Portable
AIDA64 Extreme Edition
Chromium
Radeon Software Adrenalin 2020 20.4.1
K-Lite Codec Pack Update
K-Lite Mega Codec Pack
K-Lite Codec Pack Full
K-Lite Codec Pack Standard
K-Lite Codec Pack Basic
Skype
Iperius Backup
WinRAR
Process Lasso
IObit Software Updater
Opera 67
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:22.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Served by www1v