[Tech] Consiglio per scrivere un Header-wave

Valerio Montagnani tech@vmontagnani.it
Mer 19 Maggio 2004 18:02:58 CEST


Ciao a tutti.
Il problema di oggi consiste nella scrittura di un Header per un file wave.
Tagliando corto l'header di un wav-file è una stringa lunga 44 byte. Ogni 4 byte ha un'informazione ben precisa...
Un esempio di un header wave è il seguente:

RIFF|dim|WAVE|fmt |16|1|2|8000|32000|4|16|data|1920000|

Il primo campo identifica il formato, quindi la dimensione dell'Header, le parole chiave WAVE e l'identificativo fmt_, il numero di bit per la quantizzazione PCM; il valore 1 ci dice che ho una quantizzazione lineare, 2 canali, 8000 hz di freq di campionamento 4 byte di rappresentazione del valore e tutto il resto...

Ho trovato un file di esempio che usava la funzione fputc per scrivere i dati, ma è assurdo, perchè è un continuo accesso al disco e quindi un'inutile spesa di tempo (specie per le proporsioni dei dati che vengono trattati quando si ha a che fare con l'audio non compresso).
La soluzione migliore penso che sia quella della scrittura in memoria di un buffer che contenga tutte le informazione che vi ho scritto sopra, quindi la scrittura su disco in una botta sola con le funzioni creat, write messe a disposizione dallo standard unix.

La mia domanda, a questo punto è: di che tipo devo definire il buffer per accogliere queste informazioni?
E' sufficiente definirlo:
char buffer[44];
Per rappresentare i dati numerici devo fare un cast, vero, perchè se no altrimenti il numero, per esempio, 1920000 mi occuperebbe 7 byte invece di 4?

Grazie mille, Vale


-- 
Valerio Montagnani        (Lug-Account)        <tech@vmontagnani.it>
              pub 1024/C7E4BC57    sub 2048g/0E170155
Key fingerprint = D5A4 EDFC 060C 5BD6 E2DD  8252 3B67 C1EB C7E4 BC57



Maggiori informazioni sulla lista flug-tech