Browse Source

Added a fast parameter ID lookup to the AudioUnit wrapper

tags/2021-05-28
jules 7 years ago
parent
commit
0e95d97404
1 changed files with 7 additions and 7 deletions
  1. +7
    -7
      modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm

+ 7
- 7
modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm View File

@@ -1141,6 +1141,7 @@ public:
void refreshParameterList() override void refreshParameterList() override
{ {
parameters.clear(); parameters.clear();
paramIDToIndex.clear();
if (audioUnit != nullptr) if (audioUnit != nullptr)
{ {
@@ -1171,6 +1172,7 @@ public:
ParamInfo* const param = new ParamInfo(); ParamInfo* const param = new ParamInfo();
parameters.add (param); parameters.add (param);
param->paramID = ids[i]; param->paramID = ids[i];
paramIDToIndex[ids[i]] = i;
param->minValue = info.minValue; param->minValue = info.minValue;
param->maxValue = info.maxValue; param->maxValue = info.maxValue;
param->automatable = (info.flags & kAudioUnitParameterFlag_NonRealTime) == 0; param->automatable = (info.flags & kAudioUnitParameterFlag_NonRealTime) == 0;
@@ -1263,6 +1265,7 @@ private:
}; };
OwnedArray<ParamInfo> parameters; OwnedArray<ParamInfo> parameters;
std::unordered_map<AudioUnitParameterID, int> paramIDToIndex;
MidiDataConcatenator midiConcatenator; MidiDataConcatenator midiConcatenator;
CriticalSection midiInLock; CriticalSection midiInLock;
@@ -1348,13 +1351,10 @@ private:
|| event.mEventType == kAudioUnitEvent_BeginParameterChangeGesture || event.mEventType == kAudioUnitEvent_BeginParameterChangeGesture
|| event.mEventType == kAudioUnitEvent_EndParameterChangeGesture) || event.mEventType == kAudioUnitEvent_EndParameterChangeGesture)
{ {
for (paramIndex = 0; paramIndex < parameters.size(); ++paramIndex)
{
const ParamInfo& p = *parameters.getUnchecked(paramIndex);
auto it = paramIDToIndex.find (event.mArgument.mParameter.mParameterID)
if (p.paramID == event.mArgument.mParameter.mParameterID)
break;
}
if (it != paramIDToIndex.end())
paramIndex = it->second;
if (! isPositiveAndBelow (paramIndex, parameters.size())) if (! isPositiveAndBelow (paramIndex, parameters.size()))
return; return;
@@ -1364,7 +1364,7 @@ private:
{ {
case kAudioUnitEvent_ParameterValueChange: case kAudioUnitEvent_ParameterValueChange:
{ {
const ParamInfo& p = *parameters.getUnchecked(paramIndex);
auto& p = *parameters.getUnchecked (paramIndex);
sendParamChangeMessageToListeners (paramIndex, (newValue - p.minValue) / (p.maxValue - p.minValue)); sendParamChangeMessageToListeners (paramIndex, (newValue - p.minValue) / (p.maxValue - p.minValue));
} }
break; break;


Loading…
Cancel
Save