From 5ebf40cd10d59c5e11ea744cc7b6075ee4c1bc90 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Tue, 7 Nov 2017 02:40:13 +0300 Subject: Custom WOPL now supports multiple banks Feel free to create something like GS or XG bank :wink: --- src/adlmidi_private.hpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'src/adlmidi_private.hpp') diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp index 698dad5..dbea5e6 100644 --- a/src/adlmidi_private.hpp +++ b/src/adlmidi_private.hpp @@ -141,8 +141,9 @@ public: }; class MIDIplay; -struct OPL3 +class OPL3 { +public: friend class MIDIplay; uint32_t NumChannels; char ____padding[4]; @@ -162,13 +163,19 @@ private: friend int adlRefreshNumCards(ADL_MIDIPlayer *device); std::vector dynamic_metainstruments; // Replaces adlins[] when CMF file std::vector dynamic_instruments; // Replaces adl[] when CMF file + size_t dynamic_percussion_offset; + typedef std::map BankMap; + BankMap dynamic_melodic_banks; + BankMap dynamic_percussion_banks; const unsigned DynamicInstrumentTag /* = 0x8000u*/, DynamicMetaInstrumentTag /* = 0x4000000u*/; public: - const adlinsdata &GetAdlMetaIns(unsigned n); - unsigned GetAdlMetaNumber(unsigned midiins); + const adlinsdata &GetAdlMetaIns(size_t n); + size_t GetAdlMetaNumber(size_t midiins); const adldata &GetAdlIns(size_t insno); + void setEmbeddedBank(unsigned int bank); + //! Total number of running concurrent emulated chips unsigned int NumCards; //! Currently running embedded bank number. "~0" means usign of the custom bank. @@ -446,14 +453,14 @@ public: { // Current pressure uint8_t vol; - // Tone selected on noteon: char ____padding[1]; + // Tone selected on noteon: int16_t tone; + char ____padding2[4]; // Patch selected on noteon; index to banks[AdlBank][] - uint8_t midiins; + size_t midiins; // Index to physical adlib data structure, adlins[] - char ____padding2[3]; - uint32_t insmeta; + size_t insmeta; struct Phys { //! ins, inde to adl[] @@ -471,7 +478,6 @@ public: } }; typedef std::map PhysMap; - char ____padding3[4]; // List of OPL3 channels it is currently occupying. std::map phys; }; -- cgit v1.2.3