Quote from: Brian Skalinder on December 08, 2005, 12:13:47 PM
Okay, I think I get this now - in the process of simply reading and then re-writing a 24-bit WAV file, with no editing, Audacity is not bit-transparent since it (behind the scenes) converts the 24-bit file to 32-bits and then back again to 24.
This all got me curious, so I just installed and fired up Audacity 1.2.4 on Windows 2000 SP4. FWIW, after changing the output format to 24-bit (from the default of 32bf), opening a 24-bit file in Audacity and exporting (saving) to 24-bit WAV has proven bit-transparent every time I've done it (about half a dozen, so far). I wonder if the latest version has solved the problems you've experienced, FL, or if something fundamentally different is happening behind the scenes in the Win version v. the Linux version.
I've done tests in which Audacity read in a large file and wrote out an identical copy. But in many other cases it didn't. Someone posted about this a while back on their Windows machine and when I ran tests on my Linux machine, I got perfect copies so I made a wise crack about windows. Now I've proven that I don't always get perfect copies and it's the same revision of Audacity I was using for the successful tests. Sometimes I get a perfect copy until well into the file and then there are small errors.
If you want to use audacity to resample and dither, then it's a decent program. It just isn't capable of non-destructive editing. From what I've seen of the traffic on the audacity user's list, we're so far beyond the intended user segment that I don't think they will do anything to fix it. I couldn't even get anyone to respond to my posts about this issue. I am running 1.2.3 so maybe I'll try 1.2.4 and report back. I have files handy that have demonstrated this problem.
A very annoying thing about these errors is that what I'm assuming are rounding errors are not simply off by 1 as I would expect. Sometimes the values are off by as much as 4. I never bothered to use the file offset to calculate the byte position, I just always assumed it was the LSB. If the errors were in the middle or MSB I would think that would show in the display and I never saw anything when I examined the waveform or listened.
I keep attributing these errors to rounding however after a beers worth of thinking I'm not sure that is correct. The format for 32-float is: 1 bit sign indication, 8 bit exponent and 23 bit mantissa. So a 24 bit integer value should convert to float and back with no issue. Where you should get into rounding errors is when trying to represent integer values greater than 24-bits or real numbers that cannot be accurately represented in a 23-bit mantissa. So while I tend to blame the errors on the 24int/32fl conversions, I'm not really sure that is the culprit. Anyone have thoughts about this? I haven't done any real CS stuff in a long time.