With MSXDev having a free format this year, I imagine a lot of people were scratching their heads figuring out what if any expansions to use. You could go for something common and rest assured that plenty of people would be able to enjoy it. You could go for something that gets a lot less use and have a cool uniqueness factor but put a hard limit on your audience. You could implement both, but then you have to worry about finding space for two times as much data and put in two times as much work! What If I told you that you could use one engine to support two incompatible audio device at the same time without much if any extra work?
Gemini FM is a music playroutine for MSX-Music and the SFG Sound Synthesizer Unit. While it does not take full advantage if all of the OPM's capabilities, it does allow you to write a song for the OPLL with some limits (must be in percussion mode and the custom voice is hard-coded) and have it play back on the OPM. The OPM has a set of 16 voices that approximate the OPLL voices, but then it has another bank of 16 voices that take advantage of the it's four operator capabilities. These alternate voices all have equivalent OPLL voices, so whether you use voice 0x06 (Oboe) or 0x16 (Saxophone), you'll hear an Oboe when played back on an FM-PAC. The OPM also plays the drum part on it's two remaining free channels, but this doesn't really mimic the OPLL drums, instead opting to use the OPM's white noise generator.
The easiest way to make Gemini FM data is by using the Gemini FM MIDI Converter. If you go to the page and look at the bottom, it explains the MIDI mapping it expects. Export a MIDI from your editor of choice and upload it to that page and you'll be able to tweak the speed and pitch in your browser. Then download a disk from webMSX or copy a GFMASM listing you can assemble with GFMASM.COM to get the data yourself. Huge huge thank you to Jannone for writing the code to insert data from an HTML text box into a webMSX disk, otherwise making music data would be a much more involved process!
GFM is now 100% working in at least one game which is why I'm officially calling it v1.0. However, I am still actively working to catch bugs (I am hardly a pro, I'm sure there are still plenty to be found!) as well as tweaking OPM instrument volume balance, which at this rate I may still be doing at the end of time. So if anything sounds wrong to you, especially too loud or soft on the OPM side, let me know and I will do my best to fix it! And also let me know if you run into any bugs. The readme on github will hopefully have enough information for you to see how to implement this in your project, but if something is unclear please feel free to ask. Right now it expects you to load the whole thing into RAM at 0xA000, but a ROM-able version should be doable. I've just never done a ROM game so I have no idea where people typically leave RAM and ROM page-wise- I'm open for suggestions! Thank you for reading and I hope this is of some use to you!
P.S. If hearing is believing, the download includes two examples for you to compile and hear on your own. But here's one you won't have to compile... from Compile! OPLL mode and again in OPM mode.