I was trying to sleep and something crazy came into my mind: what about adding "progressive" register changes in the .vgm format?
I mean, if you see this in a .vgm dump:
* channel 1 freq: 300
wait
* channel 1 freq: 302
wait
* channel 1 freq: 304
wait
* channel 1 freq: 306
wait
* another stuff
We all know that it can be packed like:
* channel 1 freq: 300 : progressive value 2 : 4 waits
Where "channel 1 freq" is register 0xA0 for example.
This is, maybe, not very suitable for apps that DUMP music (maybe vgm_cmp could add support for this) but I can see a HUGE improvement for apps that CREATE music to be exported in the .vgm format.
I imagine the specs to be like this:
0x52 0xA4 dd : we write the start point, for example, a frequency in YM2612 MSB
0x52 0xA0 dd : we write the start point, for example, a frequency in YM2612 LSB
0xE1 pp pp ww ww : PROGRESSIVE COMMAND -> pp = incremental value (most significant bit is the sign) , ww = waits count
0x62 <- the first wait and the one that will be used repeatedly for the command above (0x61 nn nn, 0x62, 0x63)
* Keep in mind that this is backward compatible, an app that doesn't support this will jump the incremental changes but will write the start point of the change and wait a single frame.
So, if we found:
0x52 0xA4 0x00
0x52 0xA0 0x20
0xE1 0x00 0x02 0x00 0x09
0x63
Will be unpacked to:
0x52 0xA4 0x00
0x52 0xA0 0x20
0x63
0x52 0xA4 0x00
0x52 0xA0 0x22
0x63
0x52 0xA4 0x00
0x52 0xA0 0x24
0x63
0x52 0xA4 0x00
0x52 0xA0 0x26
0x63
0x52 0xA4 0x00
0x52 0xA0 0x28
0x63
0x52 0xA4 0x00
0x52 0xA0 0x2A
0x63
0x52 0xA4 0x00
0x52 0xA0 0x2C
0x63
0x52 0xA4 0x00
0x52 0xA0 0x2E
0x63
0x52 0xA4 0x00
0x52 0xA0 0x30
PS1: I know that after adding .vgz (zlib) in the .vgm format the filesize is no more an issue, but there are lot of people playing back .vgm files in the real hardware fighting with rom filesize (including myself

) where unzipping on the fly is obviously not an option.
PS2: This woun't open the door to a world of really ultra small files and better support for music apps? I see this like the second part of the DAC STREAM support, first there was a bunch of register writes all over the place and some years after we've got the awesome streams to optimize the PCM filesizes a lot.