> pcm[i] = (FLAC__int32)buffer[3*i+2]; > pcm[i] <<= 8; > pcm[i] |= (FLAC__int32)buffer[3*i+1]; > pcm[i] <<= 8; > pcm[i] |= (FLAC__int32)buffer[3*i];
(I might be mistaken but) I think you should realize the 24 bit sample has a sign bit in the last of the bytes. Casting the FLAC__byte from the buffer to FLAC__int32 will not trat the sign bit as such leading to huge, incorrect values (and in a quick tes, to an encoding error). So you should change the cast in the first line to a FLAC__int8. The casts in the next lines aren't needed at all I think. I was writing up an example for you and came up with the following (this is extremely ugly and ineffecient, but should accept 24, 16, or any other bits-per-sample): size_t i; for (i = 0; i < need*channels; ++i) { pcm[i] = 0; size_t s; for (s = 0; s < (bps / 8 - 1); ++s) pcm[i] |= buffer[(bps / 8) * i + s] << (8 * s); pcm[i] |= (FLAC__int8)buffer[(bps / 8) * i + s] << (8 * s); } _______________________________________________ flac-dev mailing list flac-dev@xiph.org http://lists.xiph.org/mailman/listinfo/flac-dev