EasyRPG / Player

RPG Maker 2000/2003 and EasyRPG games interpreter
https://easyrpg.org/player/
GNU General Public License v3.0
983 stars 186 forks source link

Support for better FM MIDI synthesizers #1723

Open Wohlstand opened 5 years ago

Wohlstand commented 5 years ago

I have found, you are using MIDI synths are requiring to use external bank files to work, otherwise, the music will be silent. It's a big con of SF2-based and WT synthesizers. I have a suggestion, why not to add some alternative MIDI synthesizer(s) for optional use are... using FM Synth emulation?

Myself I have two of them:

libADLMIDI (some info about)

It's the MIDI synthesizer library that does use of OPL3 synth emulation. This synthesizer can reproduce epoch of Windows 9x (bank-58 "The FatMan" is well-known GM bank used in Windows drivers for OPL2/3 chip) and various DOS games.

libOPNMIDI

It's my alternative MIDI synthesizer which does use of OPN2 or OPNA synth emulation. This synthesizer can provide the good sounding like Sega Megadrive or Janapese NEC PC98 computers.

Both libraries

Here you can check out my demos of sounding: https://www.youtube.com/playlist?list=PLrUcHGBNRjJMJ_s71k2DtSscsQtqgmWut

Ghabry commented 5 years ago

Hello,

we already bundle one FM Midi Synthesizer, it is simply called "Fmmidi" and is based on this: http://unhaut.x10host.com/fmmidi/

It is used as a fallback when no bank files are provided.

Thanks for listing alternative synthesizers, we will consider to integrate them as external dependencies someday.

Wohlstand commented 5 years ago

I see, also I have just now tried it, and yeah, I wanna to convert it's program.h into WOPN to try use it with libOPNMIDI, thanks! :fox_face: :+1:

Anyway yeah, the OPNA emulator that is used here is not so accurate (I may guess, it's some sort of PMDWin, I have found very familiar decay envelope trouble hearing), but will compare the result... libOPNMIDI is more complex library which is intended for good sounding and better MIDI support include GS and XG.

You can use pkgconfig to detect libADLMIDI or libOPNMIDI which are provided for use :wink:

Wohlstand commented 4 years ago

Just now I have reminded that I have left this suggestion. Gonna make in the evening something myself...

Ghabry commented 4 years ago

This doesn't really have any priority for me but when the linked libraries support external sequencers they can be now easily added.

Maybe we should readd the "Good first issue" label to indicate stuff that is nice to have. 🤔

Wohlstand commented 4 years ago

These libraries are support external sequencers by the Real-Time API. You need to simply pass your sequencer's events into rt_* calls for each type of event and use adl/opn_generateFormat() to retrieve output. Every library has an example of use in a form of VLC plugin where are RT calls used. The real-time api is very similar to that FluidSynth has. My libraries also having the SysEx support that tweaks GS and XG features like extra drum channels and bank change formats.

Wohlstand commented 4 years ago

(Every library has the 'utils/vlc_plugin' folder with a C file. Also, keep in a mind that if output sound will look too silent, multiple every sample in a buffer with a gain factor to get sounding be louder)