I am trying to read out data from a CDDA and convert it into float (on
Linux x86). The data from the CD is returned in an unsigned char buffer.
That code looks something like this:
int cd_read_audio(int cdrom_fd, int lba, int num, unsigned char *buf)
{
struct cdrom_read_audio ra;
ra.addr.lba = lba;
ra.addr_format = CDROM_LBA;
ra.nframes = num;
ra.buf = buf;
ioctl(cdrom_fd, CDROMREADAUDIO, &ra);
}
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;
}
I would expect left/right audio interleaved, but that doesn't sound like
regular audio at all. Any ideas? Or even better: Are you aware of any
library such as portaudio or libsndfile that will do that for me? (Looks
like libcdaudio doesn't actually touch the audio data but only controls
the CD drive. Correct?)
-M
--
Martin Wolters
Creative ATC
1500 Green Hills Road
Scotts Valley, CA 95066
Phone: ++1 (831) 440-2848
Fax: ++1 (831) 440-2882