(Screen Dump from daxaif 1.1 Macintosh program)
The program is recording input from the AV port through the graphics equalizer. |
|
The program demonstrates a recent patented general compression method which is licensed through DAKX, LLC. It is currently available as shareware for the Macintosh only.
Daxaif 1.0 is still available and should run on any Mac with System 7 or later.
Read this vitally important legal disclaimer before downloading.
Mac - English - Fat Binary (134 KB) |
|
Mac - English (88 KB) |
Mac - English (156 KB) |
|
Include an email address with your shareware
payment to receive this free
control strip module that plays dax files in the background.
Hours of high-quality music without wearing out your CD's! |
|
Can .dax files be sent across the internet? Certainly, if your browser or mail program supports adding helper applications. Suggest a MIME type of "audio/x-dax" and binary file type ".dax". Save the daxaif preferences with appropriate window locations and sizes, and the "Monitor" button hilighted if you want the file to start playing automatically.
Try this link for testing your configuration. Here's another longer (111K) example.
Will daxaif be made available for other platforms? A Windows version is under development. Currently it has the basic conversion and play functions. The codec thread is written entirely in stdlib c, so it should be relatively easy to port to other platforms. Contact dak@dakx.com if you want to assist in a port.
If you're handy with ResEdit and convert daxaif to another language, send me your localized version and I'll add it to the download section. Add your name to the about box if you like, and consider your shareware fee paid in full.
What is this "map" into the audio?
The map is generated from the compression factor, the size of the compressed blocks of music
(all channels combined) divided by the uncompressed size. A compression factor of 1.0 or 100% means
no compression (the worst case for dax compression); a factor of 0.5 or 50% means 2x compression
and is represented by a vertical bar half the height of the window. The compression factor tends
to follow the amplitude, but also varies with the complexity and noise level. Cymbal crashes,
for example, are easily located. The map from even an hours-long dax file can be displayed very quickly
and used to play or extract particular audio passages.
The time index runs from left to right. The map can be "zoomed" up to the block size, typically 1/10 of a second. No substructure can be seen within the block, but internal selections can still be made by listening to the first or last half-second of the passage. A future version might display the individual samples at high zoom.
The map can sometimes give an interesting insight into the structure of the music and the style of the performance. For example, some of Beethoven's Diabelli Variations as played by Daniel Barenboim.
What is DAKX compression?
DAKX or dax stands for difference-adaptive compression. Compression is achieved through prediction
of the number of bits required to encode the next datum. Typically this datum is the first or
second difference between successive audio samples. The prediction rules contain several
parameters which can be varied to find the best compression. In daxaif, the parameters used
are g (granularity) and t (threshold). Unused forbidden or "non-sensical" encoder sequences
are exploited to incorporate rapid-field expands and repeat counts. The method is also applicable
to other waveforms and grayscale, color-indexed, or full-color images. More information and
source code is available at
dakx.com.
Further examples of audio compression can be found at
http://www.dakx.com/examples/audio.
How can I be sure the compressed file is the same as the input file?
If you check the "Verify" menu item during compression, each and every block is decompressed and
compared to the original audio before being written to the .dax file. However, this will not
detect disk errors during reading or writing. Transmission or later reading of the .dax file could
also have disk errors. Depending on which bits are in error, these can remain unnoticed or be quite
apparent over the block they occur in. Since correct decompression of the last sample in each block
depends on every bit in the compressed record, something akin to a CRC check could be done, with
virtually no overhead, by including an uncompressed last sample for comparison. This is not yet done
in daxaif.
How can I get more compression? Three levels of compression are supported: Best Speed, Best Size, and Both. Best Size compresses each block many times searching for the best g and t parameter. Best Speed searches just a small range starting from the last g and t used for the channel, using only half the samples in the block. Both is a compromise between the two. Using Best Size takes about 5 times longer and for typical music gives only a 3-10 percent more compression than Best Speed. But if you are using a fast machine and listening to the audio during the compression (which slows it down to real-time), you might as well use the "Best Size" setting. Note the decompression speed is the same regardless of how the blocks are initially compressed.
Digitally-mastered audio compresses better than analog-mastered audio. With an analog-mastered CD, "silence" compresses only a factor of three, giving a typical compression "floor" of 30%. With clean digital audio the floor is closer to 5%. A lower floor can be achieved with analog audio by filtering or bandlimiting to reduce the noise. The equalizer provides a very flexible way of doing this.
Reducing the precision of audio samples is another option. Twelve-bit audio sounds fine on most sound cards. Non-digital audio recorded outside of a sound studio rarely benefits from more than fourteen-bit precision. For typical CD tracks, right-shifting samples two bits will give an extra 20-30% compression. The decompressed files will have low volume unless left-shifted by the same amount. daxaif does this left-shift automatically when playing such files.
Variable precision could be done on a block basis to maintain a given number of significant bits or constant output bit rate. http://dakx.com/examples/audio/feynman.html compares these various methods for the compression of an old recording of one of R. P. Feynman's undergraduate lectures.
Significant additional no-loss compression (around 2x more) is possible by applying DAKX compression to the coefficients in fourier space. Daxaif does not contain this version of the codec.
What is the .dax file format?
This will most likely be an interim file format since dax compression could easily be incorporated
into a compressed AIFF or AIFC standard, should someone like Apple decide to do so. However, to
avoid potential future confusion, DAKX, LLC is claiming the dot-dax (".dax") name and two-blue-note
symbol as trademarks.
The header is the same as the AIFF file except for the replacement of "AIFF" by "daxA" in third
longword. The Offset and BlockSize longwords contain the directory offset and audio frames per block.
Each channel is compressed separately in roughly tenth of a second blocks, with channel blocks interleaved. The first longword in each block contains the channel number, compression parameters (first or second difference, g, and t), and the compressed block length. A directory of pointers to the first channel blocks is written at the end of the file. From this directory an audio block can be located by indexing to the first channel block and following the block lengths to successive channels. The directory allows rapid indexing into the audio file at selected time points, and also the rapid computation of the block compression factors for generation of the map display. This directory of longword pointers is very efficiently second-difference DAKX compressed and adds very little to the file size.
What if the directory is missing?
The directory is not needed to decode the compressed file. The file can still be played by using
the length information at the beginning of each compressed block. The directory is only needed to
speed the time indexing into the compressed audio, and can always be recovered by scanning through
the file. Daxaif does this automatically as needed.
Do selections have to start or end on block boundaries? No. The selection is made based on the audio frame count from the start of the file. The required starting and ending blocks are located by dividing the frame count by the blocksize. The entire block is decompressed, then the specified starting and ending frames are located within the block. A future version could show the waveform at high zoom to allow accurate selections to be made visually. For now, this must be done by listening to the result.
What if a bit error occurs? If the error affects the implicit code length framing, the decoder will usually increase the code length past the maximum and detect the error. If the error is in a low-order bit, all the following samples in the block will be offset by the same amount. Error recovery is conceivable in both cases (and in fact enhanced by the global effect on the rest of the samples in the block) but not implemented in daxaif.
If the decompresser requires only 2 MIPS, why can't my old Mac decompress CD Stereo in real time? The PowerPC assembly version uses 2 MIPS, the 680x0 version about 5 MIPS because of the smaller number of registers available. Continuous 44.1 KHz stereo replay requires a 20 MHz 68030 or faster.
I downloaded an AIFF or WAVE file from the internet. Why won't daxaif compress it?
It is most likely compressed using an unknown codec. Try importing it using QuickTime.
You archive your data with this software at your own risk!
" Neither DAKX, LLC, or any agency thereof, nor any of its officers, employees, contractors, or subcontractors thereof, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately owned rights. Reference herein to any specific commercial product, process, or service by trade name, trademark, manufacturer, or otherwise, does not necessarily constitute or imply its endorsement, recommendation, or favoring by any of the abovementioned entities. The opinions expressed herein also do not necessarily state or reflect those of any of the abovementioned entities. "dot-dax and .dax are trademarks of DAKX, LLC