[Tech] OT: C, linux e la rappresentazione in mem
Valerio Montagnani
tech@vmontagnani.it
Lun 1 Mar 2004 16:35:50 CET
Ciao amici, vi vorri sottoporre questo quisito:
devo acquisire un segnale audio e poi elaborarlo successivamente.
I seguenti parametri non possono essere cambiati:
16 bit
2 canali
8000 Hz di freq. di campionamento.
durata acquisizione 60 sec.
la quantità di memoria da allocare è: 60*16*2*8000=15360000 bit.
Voglio che il buffer che dovrà contenere i dati audio, sia un buffer in allocazione dinamica di tipo float, per cui:
p=(float *)calloc(size,sizeof(float));
in linux sizeof(float)=4 (32 bit), quindi per esprimere in bytes la quantità di memoria sopra calcolata e tenendo conto del numero di bit necessari per la rappresentazione di un numero di tipo float, si ha:
60*16*2*8000/32 = 480 Kb.
Qui viene il mio dubbio. La scheda audio quantizza il suono con 16 bit (come richiesto). Un tipo float usa 32 bit per la rappresentazione di un numero. Quindi nel mio buffer avrò i 16 bit più rappresentativi tutti con il valore 0, mentre i meno significativi saranno effettivamente impiegati per la rappresentazione del campione audio.
Inoltre dato che l'acquisizione avviene su 2 canali (acquisizione stereo) significa che nel buffer finiscono 32 bit per il canale sx e 32 bit per il canale dx, rappresentati come descritto prima.
E' giusto questo ragionamento vero?
Ciao e grazie, 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