I don't think there is a common practice for what you describe. 32-bit float only has 24 bits of accuracy at any one time. The tricky thing is that these 24 bits shift around in precision, based upon the value. Audio is normalized to +/-1, but samples below +/-0.5 would have 25 effective bits, and each halving of the sample value adds another bit.
You could convert your 32-bit float audio file to 32-bit integer, but you would need to scale such that +/-1.0 takes the full range of the 32-bit integer (keeping in mind that -1.0 is valid but +1.0 is not, thanks to twos-complement coding). there would still be loss compared to the 32-bit float original, but only for samples very close to 0.0 in absolute value. One important question here is now to store a valid 32-bit integer sound file, and whether this is supported by the native flac command line. I kinda doubt that there is a standard for this. So you might need to write your own tools based on the FLAC libraries. If you were to read a valid 32-bit float audio file and convert each sample to 32-bit integer properly, then you should be able to hand off buffer of 32-bit integer samples to the FLAC library and create a valid flac file. Another consideration is that flac compresses quiet audio files more than loud audio files. By expanding the 32-bit float to 32-bit integer in the fashion I've described - which is the only way to preserve the maximum resolution - you will end up with a flac that is much larger than the equivalent 24-bit integer file. I suppose that is obvious, but I wanted to point it out anyway. It should be much better with 32-bit integer audio than it would be with pure noise, though. P.S. DTS Music Disc format put 5.1 surround into a 16-bit WAV. Normally, this would not compress very well with flac. However, the DTS guys realized that some users might play this WAV without a DTS decoder, and the white noise could destroy sound systems. So the DTS format drops two bits from every sample, making the white noise 12 dB quieter. An interesting side effect of this is that flac is able to compress this much more than regular white noise because of the 12 dB reduction. I only mention this because it is instructive about how the amplitude of the audio input affects flac's compression performance. Brian Willoughby Sound Consulting On Aug 7, 2009, at 07:42, Didier Dambrin wrote: I've tried to find info about unofficial 32bit float support in FLAC, and found several conversations. Most of them were talking about a 24bit limit, but from the manual I guess that this limitation is gone, as it supports up to 32bit integer. So my question is, what would be the best way, or what is a common way to FLAC-encode floating point audio? The first idea is obvious, we have a 32bit float, FLAC supports 32bit integer, and it's lossless. So I'd just make it encode 32bit float, it's lossless afterall. 2 problems, first I would suspect it wouldn't encode very well, since the data wouldn't be "audio" anymore, right? It would be like trying to FLAC-encode random data. So I tried FLACing white noise, and comp ratio was pretty poor, confirming this. Interestingly, it still did a better job than ZIP! The second problem would be that no other tool would read them correctly anyway. The second idea is to truncate & use it as a lossy encoder, which can be "audibly lossless" anyway. But what's a common practice here? I would be tempted to leave 1 bit of headroom above 0dB, or maybe 2 bits. Normalizing before encoding could be an option, but the gain would then have to be inserted in a tag. & finally, what bit depth? 24? 25, 26? 32? I know there's no right answer, just asking if there are common practices. _______________________________________________ Flac-dev mailing list [email protected] http://lists.xiph.org/mailman/listinfo/flac-dev
