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_opl3.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src/adlmidi_opl3.cpp') diff --git a/src/adlmidi_opl3.cpp b/src/adlmidi_opl3.cpp index ce26ba6..9db3803 100644 --- a/src/adlmidi_opl3.cpp +++ b/src/adlmidi_opl3.cpp @@ -115,30 +115,39 @@ static const unsigned short Channels[23] = */ -const adlinsdata &OPL3::GetAdlMetaIns(unsigned n) +const adlinsdata &OPL3::GetAdlMetaIns(size_t n) { return (n & DynamicMetaInstrumentTag) ? dynamic_metainstruments[n & ~DynamicMetaInstrumentTag] : adlins[n]; } -unsigned OPL3::GetAdlMetaNumber(unsigned midiins) +size_t OPL3::GetAdlMetaNumber(size_t midiins) { return (AdlBank == ~0u) ? (midiins | DynamicMetaInstrumentTag) : banks[AdlBank][midiins]; } - const adldata &OPL3::GetAdlIns(size_t insno) { return (insno & DynamicInstrumentTag) ? dynamic_instruments[insno & ~DynamicInstrumentTag] - : adl[insno]; + : adl[insno]; +} + +void OPL3::setEmbeddedBank(unsigned int bank) +{ + AdlBank = bank; + //Embedded banks are supports 128:128 GM set only + dynamic_percussion_offset = 128; + dynamic_melodic_banks.clear(); + dynamic_percussion_banks.clear(); } OPL3::OPL3() : + dynamic_percussion_offset(128), DynamicInstrumentTag(0x8000u), DynamicMetaInstrumentTag(0x4000000u), NumCards(1), -- cgit v1.2.3