Thanks for your comments. I must have been writing my reply when you posted yours. =:) I
guess I
was on the right track.
-Greg
--- Phil Frost <indigo(a)bitglue.com> wrote:
On Wed, Aug 01, 2007 at 02:12:41PM -0400, Paul Winkler
wrote:
On Wed, Aug 01, 2007 at 10:45:59AM -0700, Gregory
Alan Hildstrom wrote:
> Are there any wav/audio programs out there that use the full float range of
3.4e+/-38? It
seems to
me that
this larger range would use more of the 32 bits.
That's not how float works. *Any* floating point number uses the full
precision of all 32 bits (or 64, or whatever). This is because the
radix point (like decimal point, but binary) can be anywhere.
What you're saying would be true of fixed-point numbers.
http://en.wikipedia.org/wiki/Floating_point
I reckon there is more to it than that. I'd say any AC signal centered
on 0 uses at least all the bits available in the mantissa. Clearly one
can not be using all 32 bits if one's signal does not have 2**32
possible values. I can't tell you off the top of my head how many
distinct values can represented within -1 to +1 with a 32 bit float, but
since it's less than the full range I can tell you it's more than 2**24
and less than 2**32.
True, a bigger range may not result in a higher quality signal, but in
the context of compression, it may be important. No value between -1 and
+1 has a biased exponent greater than 0x7f. Consequently, there are at
best 2**31 values an audio signal could use, and one bit that will be
always zero.
Of those 2**31 possible values, the vast majority of them lie around
zero. Cutting the range in half (to -.5 to +.5) excludes only 1/127th of
the possible values. After cutting the range in half 64 times to about
+/- .00000000000000000005421, roughly half of the 2**31 previously
possible values still lie within this range. Would you say half of a
typical audio signal lies within this range? I'm not about to go write a
program to find out, but I hope you will accept my guess of "no". The
point is this: floating point numbers have a lot of potential values
around zero that are unlikely to be used.
But wait, it gets worse! When was the last time you saw an audio
interface with a 31 bit analog to digtal converter? Maybe they exist,
but I consider myself lucky to get 24 bits. No matter how you cram 24
bits in to a 32 bit float, you still have 8 bits that mean nothing, even
if they have been shuffled around a bit.
I would suspect that many ardour sessions contain WAVs with floats which
came from a 24 or 16 bit source. I haven't looked at the jack source,
but it seems to me that the conversion between 32 bit floats in +/- 1
and 24 bit integers can be lossless. A trivial archiver could do this
conversion and make the session roughly 75% of the original size.
Of course, if this isn't the case for some sessions, this trivial
archiver can't be useful and lossless anymore, which raises another
point worth considering: if testing a lossless compression for float
signals, consider testing with something that didn't come straight from
a digital integer source. I'd suspect that IIR filters and reverbs in
the right circumstances will fill in a good many of the values near zero
that may typically be unused.
_______________________________________________
Linux-audio-dev mailing list
Linux-audio-dev(a)lists.linuxaudio.org
http://lists.linuxaudio.org/mailman/listinfo.cgi/linux-audio-dev