On Fri, 09 Aug 2002 18:18:44 -0700
Martin Wolters <[EMAIL PROTECTED]> wrote:
> I tried using something like the following to convert the data:
>
> float samples[samplesInBuffer];
> for(i=0;i<samplesInBuffer;i++) {
> int value = (buf[1] << 8) + (buf[0] << 16);
> sample[i] = ((float)(value/256))*scalefactor;
> buf += 2;
> }
Thats not going to work.
The data in buf are unsigned chars but I am almost certain that the actual
data in the buffer are signed short values. This means that this:
(buf[1] << 8) + (buf[0] << 16)
gives an unsigned value which is definitely wrong.
Try this:
float samples[samplesInBuffer];
for(i=0;i<samplesInBuffer;i++) {
short value = (short) (buf[1] | (buf[0] << 8));
sample[i] = (value / ((float) 0x8000) ;
buf += 2;
}
This should give you floats in the range [-1.0, 1.0].
The bitwise or means that the combination of buf [0] and buf [1] will not
try and do anything remotely arithmetic but instead paste the two values
together.
Hope this helps,
Erik
--
+-----------------------------------------------------------+
Erik de Castro Lopo [EMAIL PROTECTED] (Yes it's valid)
+-----------------------------------------------------------+
"Therapists typically base the nuttiness of a patient on the strength of
their convictions, on which basis this 43,000 word opus alone stands as a
kind of testament to Bill's (Gates) madness." - The Register