Grauw and l_oliveira, thank you for responses about how VGM format works. Probably an stupid comment, but I hope this could makes things easier and we could implement the FM musics from Sega games like Ys, Out Run, Rastan, etc in our MSX games in the same way than Ashguine...
Part of grauw's plans for the program in the future is detect what is available and redirect chip-compatible data streams accordingly, based on what is installed/available. I mean, knowing that OPL, OPL2 and FM only MSX-Audio data can be played on the Moonsound, just dynamically redirect it. I got this info from talking to him on openMSX IRC channel.
So, eventually no C4 to C0 switching will be required.
In fact OPL playback on OPL4 already works in the 1.0 version, but it was done as a quick hack and I still need to do it properly, so that e.g. Y8950 + OPL dual-chip songs will work properly. Also, once wouterv’s research unveils the OPLL preset instrument settings, I hope to also be able to support OPLL playback on the MoonSound.
Grauw, would you consider going ahead with OPLL playback on OPL2/OPL3/OPL4 by using common emulator presets for instruments anyway? I was just talking about this yesterday with l_oliveira, and I thought I could convert the VGM file themselves as a proof of concept, but gave up temporarily due to some difficulties and chronic lack of time.
In the end I considered it would be easier changing VGMPlay to do exactly that, but then I would be dealing with ASM which is not my forte. Probably would break everything. I mapped most register conversions anyway, just couldn't decide what to do with Sustain On/Off in register $0E. I wonder how many songs actually use that.
In fact OPL playback on OPL4 already works in the 1.0 version, but it was done as a quick hack and I still need to do it properly, so that e.g. Y8950 + OPL dual-chip songs will work properly. Also, once wouterv’s research unveils the OPLL preset instrument settings, I hope to also be able to support OPLL playback on the MoonSound.
The MSX-AUDIO BIOS v1.3 does this OPLL->OPLn conversion for you effortlessly. You just have to use it.
Just out of curiosity, sd_snatcher, what presets do you use?
I use the presets from Okazaki's emu2413.
However, a lot of that space is used by wait commands. Because the Z80 and OP* sound chips are not so fast and VGM has a 44100 Hz precision, waits are inserted by the logger after nearly every register write. For music played back on the VDP interrupt, that isn’t really necessary… I just made a little test-tool which reduces the timer resolution to 60 Hz (by collapsing waits), turns out it cuts the file size by about 25%.
If you have a need to reduce the timing resolution of VGMs, ValleyBell pointed me to the vgm_facc tool, which can be used to collapse waits and make the timing frame-accurate (60 Hz) rather than sample-accurate.
I use the presets from Okazaki's emu2413.
Oh, very nice. Thanx for the info
However, a lot of that space is used by wait commands. Because the Z80 and OP* sound chips are not so fast and VGM has a 44100 Hz precision, waits are inserted by the logger after nearly every register write.
So basically even a very basic form of RLE/optimization and an option to trade precision for performance could already make this more interesting for real life applications. Perhaps even spreading load over interrupts could be interesting (e.g. only do MSX-MUSIC on even interrupts and MSX-AUDIO on odd interrupts, trading (in?)audible accuracy for peformance.
For tracker developers it is also nice to not worry about developing and optimizing a replayer anymore, right? If only to offer a replayer before they had the chance to develop one themselves. VGM files as they are are relatively large, but compressible and with large ROMs and mass storage available size has become much less relevant IMHO.
RLE compression, made me again think of the MML topic.
can it come together with the VGM topic?
is VGM a common format for all chips? what does it contain, like a byte telling the register number and another the value?
In BASIC playing around with strings one can do repetitive memory saving things.
Would need a MML that goes without a whole BASIC
PATTERN P2P3 'snippet #1 refers snippets #2 and #3 PATTERN cdef 'snippet #2 PATTERN R1ccR2dd 'snippet #3. "R" means ADSR. ADSR 0,1,2,3,4 'adsr #1 ADSR 0,2,4,6,8 'adsr #2
recursive snippet definitions with indexes.
Play pattern 1, thats the song.
and maybe the whole thing can be put into a bit more binary format for players.
but what about frequencies. is not so clear what is a C.
frequency 0x0123 '#1 frequency 0x0234 '#2 pattern F1F2
now F1 F2 are notes, no more human readable.
how to record frequency slides.