[Tech] OT: C, linux e la rappresentazione in mem
david mugnai
david.mugnai@spacespa.it
Lun 1 Mar 2004 16:52:56 CET
Valerio Montagnani wrote:
> 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:
Perche' usi il float?
> in linux sizeof(float)=4 (32 bit),
L'equivalenza di sopra e' piu' legata all'architettura del tuo pc che al
sistema operativo
> 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
Questo non e' vero.
i float utilizzano i 32bit in maniera diversa dagli interi, te ne puoi
sincerare con questo codice:
---code
#include <stdio.h>
int main(void) {
int k=1;
float j=1;
char *buff;
buff=(char*)&k;
printf("%d %d %d
%d\n",(int)buff[0],(int)buff[1],(int)buff[2],(int)buff[3]);
buff=(char*)&j;
printf("%d %d %d
%d\n",(int)buff[0],(int)buff[1],(int)buff[2],(int)buff[3]);
}
---/code
Il come vengono memorizzati i numeri in virgola mobile, dipende ancora
una volta dall'architettura del tuo pc (sul manuale dei pentium dovrebbe
essere scritto chiaramente)
> 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.
Questo non lo so :)
byez
--
If Bill Gates had a dime for every time a Windows box crashed...oh, wait
a minute - he already does.
Maggiori informazioni sulla lista
flug-tech