While preparing for working on old APE versions support I finally got courage to try and trace all changes for different versions. So here’s the list of internal versions and the changes they introduced:
- 0000 — the reference version for all prehistoric version. Before version 0000 it was fine, then it all got worse IMO.
- 3320 — changes in the filters
- 3600 — changes in the filters
- 3700 — changes in the filters
- 3800 — blocks per frame changed for extra high compression level; changes in the filters (yawn)
- 3810 — frame start at byte boundaries now
- 3820 — special codes extension (signalled by top bit of CRC set to one)
- 3830 — filter lengths and some implementation details changed
- 3840 — CRC calculation algorithm changed a bit
- 3870 — significant changes in residue coding
- 3890 — small changes in residue coding
- 3900 — residue coding format has changed seriously.
- 3910 — small change in the residue coding (more than 16 bit values can be coded now)
- 3930 — significantly changed format introduced (both filtering and coding scheme were changed)
- 3950 — filter format changed a bit (and insane compression mode is added somewhere after that), blocks per frame is changed too
- 3960 — some small and compatible change in the bitstream (consuming two last bytes or not)
- 3980 — file format is changed a bit; filtering process has changed a bit too.
- 3990 — the latest (known) format. Residue coding has changed.
Do you still wonder why I strongly dislike this format?
Frame start at byte boundaries doesn’t sound too bad, so it’s not all bad. The rest seems to be in the range from annoying to WTF.