YM – revisited!
The last couple of days I revisted YM-files. To the “generator” were added a few more options. The saveable file formats have been expanded to include “uncompressed” and “optimized speed” (the shown “streamed” variant has no vectrex player yet, and I doubt I will write one, since the “packing” is sort of really bad, only about 1/3 or the YM file size – that is not really usable).
Anyway, the major change is the variant called “YMSound optimized speed”, this is the new default.
“YMSound (historic)” is only available for compatibility reasons, and the “uncompressed” only really makes sense for “jingles” or the like (although for that you might as well use the AYFX format).
Anyway – again – following are the changes that comprise the new version in relation to the old:
YMSound optimized speed
This is still in basic the same as YMSound, but with a few enhancements. The data between these two are NOT compatible.
The generated data uses a little bit more space (10% more ~ about). The average unpacking speed is a bit faster (about 20%), but the main aspect is, that the “peaks” are reduced.
With my given example file, peaks by playing using the old routines were up to nearly 20000 cycles (average 3200 cycles).
The new routines have a maximum peak of less thean 7500 cycles (in the whole song only 3 times) – and an average of about 2400 cycles.
Changes to YMSound historic:
– single bytes are not shannon encoded (since searching for the shannon code takes longer the more codes are generated, and the savings for single bytes using shannon was only a small benefit)
– RLE encoding changed from LSB first to MSB first, this made decoding the RLE length more performat
– the phrase length is not held befor the phrase structure but directly in the phrase mapping, I can calculate the phrase offset now while searching for the phrase
– the RAM structure is 1 byte longer per register, the current phrase length is also kept in the data structure now
– only the used bits per register are encoded (e.g. amplitude registers only 4 bits…) this made up quite some of the lost space due to the shannon/byte changes
– some internal changes to optimze “little” stuff
– all “subroutines” were macro’ed
– I advise to change the subroutine, to output to shadow registers, rather than to PSG registeres directly, that way you can “overwrite” values with sound effects (see demo in projects, which comes with Vide)!
Since a picture says more than a thousand words – here two cycle data of the same song with the old and new routine: