diff options
Diffstat (limited to 'src/adlmidi_private.hpp')
-rw-r--r-- | src/adlmidi_private.hpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp index c5b70ee..59ba555 100644 --- a/src/adlmidi_private.hpp +++ b/src/adlmidi_private.hpp @@ -161,6 +161,14 @@ typedef BW_MidiSequencer MidiSequencer; #define OPL_PANNING_RIGHT 0x20 #define OPL_PANNING_BOTH 0x30 +#ifdef ADLMIDI_HW_OPL +#define ADL_MAX_CHIPS 1 +#define ADL_MAX_CHIPS_STR "1" //Why not just "#MaxCards" ? Watcom fails to pass this with "syntax error" :-P +#else +#define ADL_MAX_CHIPS 100 +#define ADL_MAX_CHIPS_STR "100" +#endif + extern std::string ADLMIDI_ErrorString; /* @@ -211,6 +219,7 @@ inline int32_t adl_cvtU32(int32_t x) } struct ADL_MIDIPlayer; +class MIDIplay; /** * @brief OPL3 Chip management class */ @@ -218,7 +227,7 @@ class OPL3 { friend class MIDIplay; friend class AdlInstrumentTester; - friend int adlRefreshNumCards(ADL_MIDIPlayer *device); + friend int adlCalculateFourOpChannels(MIDIplay *play, bool silent); public: enum { @@ -363,6 +372,12 @@ public: OPL3(); /** + * @brief Checks are setup locked to be changed on the fly or not + * @return true when setup on the fly is locked + */ + bool setupLocked(); + + /** * @brief Choose one of embedded banks * @param bank ID of the bank */ @@ -880,6 +895,9 @@ public: //! Time left until sounding will be muted after key off int64_t koff_time_until_neglible_us; + //! Recently passed instrument, improves a goodness of released but busy channel when matching + MIDIchannel::NoteInfo::Phys recent_ins; + enum { users_max = 128 }; LocationData *users_first, *users_free_cells; LocationData users_cells[users_max]; @@ -898,6 +916,7 @@ public: AdlChannel(): koff_time_until_neglible_us(0) { users_clear(); + std::memset(&recent_ins, 0, sizeof(MIDIchannel::NoteInfo::Phys)); } AdlChannel(const AdlChannel &oth): koff_time_until_neglible_us(oth.koff_time_until_neglible_us) @@ -947,7 +966,7 @@ public: int emulator; bool runAtPcmRate; unsigned int bankId; - unsigned int numFourOps; + int numFourOps; unsigned int numChips; int deepTremoloMode; int deepVibratoMode; @@ -1481,9 +1500,10 @@ extern void adl_audioTickHandler(void *instance, uint32_t chipId, uint32_t rate) /** * @brief Automatically calculate and enable necessary count of 4-op channels on emulated chips * @param device Library context + * @param silent Don't re-count channel categories * @return Always 0 */ -extern int adlRefreshNumCards(ADL_MIDIPlayer *device); +extern int adlCalculateFourOpChannels(MIDIplay *play, bool silent = false); /** * @brief Check emulator availability |