aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_private.cpp
diff options
context:
space:
mode:
authorVitaly Novichkov <admin@wohlnet.ru>2019-02-22 23:39:09 +0300
committerVitaly Novichkov <admin@wohlnet.ru>2019-02-22 23:39:09 +0300
commitc5f8da70da78110dbbaa74ff4ebce6edf5d04be8 (patch)
treeb92284c60efec9652ab313ad032b833ddbbff3f2 /src/adlmidi_private.cpp
parentf21a5030355d27d9562cc62643db0380dc58a84b (diff)
downloadlibADLMIDI-c5f8da70da78110dbbaa74ff4ebce6edf5d04be8.tar.gz
libADLMIDI-c5f8da70da78110dbbaa74ff4ebce6edf5d04be8.tar.bz2
libADLMIDI-c5f8da70da78110dbbaa74ff4ebce6edf5d04be8.zip
Rhythm-mode percussion now works!
Diffstat (limited to 'src/adlmidi_private.cpp')
-rw-r--r--src/adlmidi_private.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/adlmidi_private.cpp b/src/adlmidi_private.cpp
index b793129..1b65214 100644
--- a/src/adlmidi_private.cpp
+++ b/src/adlmidi_private.cpp
@@ -40,6 +40,7 @@ int adlCalculateFourOpChannels(MIDIplay *play, bool silent)
{
Synth &synth = *play->m_synth;
size_t n_fourop[2] = {0, 0}, n_total[2] = {0, 0};
+ bool rhythmModeNeeded = false;
//Automatically calculate how much 4-operator channels is necessary
#ifndef DISABLE_EMBEDDED_BANKS
@@ -61,6 +62,8 @@ int adlCalculateFourOpChannels(MIDIplay *play, bool silent)
if((ins.flags & adlinsdata::Flag_Real4op) != 0)
++n_fourop[div];
++n_total[div];
+ if(div && ((ins.flags & adlinsdata::Mask_RhythmMode) != 0))
+ rhythmModeNeeded = true;
}
}
}
@@ -71,12 +74,15 @@ int adlCalculateFourOpChannels(MIDIplay *play, bool silent)
for(size_t a = 0; a < 256; ++a)
{
size_t insno = banks[play->m_setup.bankId][a];
+ size_t div = a / 128;
if(insno == 198)
continue;
- ++n_total[a / 128];
+ ++n_total[div];
adlinsdata2 ins = adlinsdata2::from_adldata(::adlins[insno]);
if((ins.flags & adlinsdata::Flag_Real4op) != 0)
- ++n_fourop[a / 128];
+ ++n_fourop[div];
+ if(div && ((ins.flags & adlinsdata::Mask_RhythmMode) != 0))
+ rhythmModeNeeded = true;
}
}
#endif
@@ -107,5 +113,8 @@ int adlCalculateFourOpChannels(MIDIplay *play, bool silent)
if(!silent)
synth.updateChannelCategories();
+ // Set rhythm mode when it needed
+ synth.m_rhythmMode = rhythmModeNeeded;
+
return 0;
}