I recently found out Furnace, which was originally an open source DefleMask clone but aims to support many more sound chips in a more flexible way. Its development version already supports the OPL family up to OPL3, and MSX-AUDIO and SCC are in the works. It already supports many of the sound chips available on MSX, including Darky's EPSG and SFG's OPM.
Great tracker! And will there also be a possibility to load/wave MoonBlaster files in Furnance? That would be cool as well!
Found this as well: https://github.com/HerrSchatten/MBMPlay-SMS
They still don't support OPL4 but I think that would be a pretty cool feature. It would also be nice if Furnace could import MoonBlaster Stereo music as well.
I'm trying to integrate this player, and the documentation mentions for the OPL4 format:
C2: Relative jump. Byte 1: bank offset, byte 2-3: address offset. C3: Relative call. Byte 1: bank offset, byte 2-3: address offset.
However I think these should be reversed i.e. first the address, followed by the bank offset.
You’re right, I’ll fix the doc.
By request, last month I added support for an MSX-MUSIC + PSG format.
Quoting the README:
# OPLL-PSG format (MSX-MUSIC + PSG) Re-Play’s `opll-psg` format is created for projects which need a fast MSX-MUSIC and/or PSG player. The focus for this format therefore is playback speed, but data size is also important. ## OPLL-PSG format converter features * OPLL support * PSG support * Fast playback * Compact data format * Timing quantisation * Aggressive optimisation of register writes * Channel remapping (OPLL only) * Volume adjustment ## OPLL-PSG format specification Re-play `.rep` files start with a byte indicating the data format, followed by a command stream with events based on the data format. Format ID: `2` * `00-3F`: OPLL register write block. Bit 0-5: count n - 1. Bytes 1-2n: address, value sequence. * `40-7F`: PSG register write block. Bit 0-5: count n - 1. Bytes 1-2n: address, value sequence. * `80`: Relative jump. Byte 1-2: address offset, byte 3: bank offset. * `81`: Relative call. Byte 1-2: address offset, byte 3: bank offset. * `82`: Return. * `83-FF`: Wait. n - 82H: nr. of ticks.
Hope it’ll be useful to someone!
In other news, I’ve been working on compression, and the other day I finally got it working. Initial results are good. It still needs some refinement, I’ll be posting about it more when it’s ready for release.
This sounds great and I'm looking forward to using it. Thank you, Grauw!
I'm trying to integrate this player [...] for the OPL4 format
Hey ToriHino, you’re welcome to integrate it in Roboplay, however note that I can not guarantee the Re-Play formats to be stable, since the primary use case for this project is to be a replayer for music embedded in projects. Although I won’t change it without reason of course. On that note;
I changed the OPL4 format slightly to have the WAVE memory write block not include the address anymore. Instead the address (and write mode) are now set through regular commands, so the memory block is just providing data to output straight to register 6 and nothing more. This change allows memory blocks to be reused if the same sample appears in different locations in memory.
Thanks for the update. I wasn't integrating it in Roboplay but in the game I'm working on ('Attack of the Petscii Robots') for which indeed it exactly provided what I was looking for
Awesome!