Fix some numCC comparisons which are off by 1

This commit is contained in:
Jean Pierre Cimalando 2020-04-16 14:08:11 +02:00
parent 4f573a6a23
commit e4103600ec
2 changed files with 33 additions and 33 deletions

View file

@ -155,7 +155,7 @@ void sfz::MidiState::resetAllControllers(int delay) noexcept
const sfz::EventVector& sfz::MidiState::getCCEvents(int ccIdx) const noexcept const sfz::EventVector& sfz::MidiState::getCCEvents(int ccIdx) const noexcept
{ {
if (ccIdx < 0 || ccIdx > config::numCCs) if (ccIdx < 0 || ccIdx >= config::numCCs)
return nullEvent; return nullEvent;
return cc[ccIdx]; return cc[ccIdx];

View file

@ -184,13 +184,13 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
bendRange.setEnd(normalizeBend(*value)); bendRange.setEnd(normalizeBend(*value));
break; break;
case hash("locc&"): case hash("locc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::midi7Range)) if (auto value = readOpcode(opcode.value, Default::midi7Range))
ccConditions[opcode.parameters.back()].setStart(normalizeCC(*value)); ccConditions[opcode.parameters.back()].setStart(normalizeCC(*value));
break; break;
case hash("hicc&"): case hash("hicc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::midi7Range)) if (auto value = readOpcode(opcode.value, Default::midi7Range))
ccConditions[opcode.parameters.back()].setEnd(normalizeCC(*value)); ccConditions[opcode.parameters.back()].setEnd(normalizeCC(*value));
@ -285,14 +285,14 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
break; break;
case hash("on_locc&"): // fallthrough case hash("on_locc&"): // fallthrough
case hash("start_locc&"): case hash("start_locc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::midi7Range)) if (auto value = readOpcode(opcode.value, Default::midi7Range))
ccTriggers[opcode.parameters.back()].setStart(normalizeCC(*value)); ccTriggers[opcode.parameters.back()].setStart(normalizeCC(*value));
break; break;
case hash("on_hicc&"): // fallthrough case hash("on_hicc&"): // fallthrough
case hash("start_hicc&"): case hash("start_hicc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::midi7Range)) if (auto value = readOpcode(opcode.value, Default::midi7Range))
ccTriggers[opcode.parameters.back()].setEnd(normalizeCC(*value)); ccTriggers[opcode.parameters.back()].setEnd(normalizeCC(*value));
@ -303,19 +303,19 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
setValueFromOpcode(opcode, volume, Default::volumeRange); setValueFromOpcode(opcode, volume, Default::volumeRange);
break; break;
case hash("volume_curvecc&"): case hash("volume_curvecc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::curveCCRange)) if (auto value = readOpcode(opcode.value, Default::curveCCRange))
volumeCC[opcode.parameters.back()].curve = *value; volumeCC[opcode.parameters.back()].curve = *value;
break; break;
case hash("volume_stepcc&"): case hash("volume_stepcc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::volumeStepRange)) if (auto value = readOpcode(opcode.value, Default::volumeStepRange))
volumeCC[opcode.parameters.back()].step = *value; volumeCC[opcode.parameters.back()].step = *value;
break; break;
case hash("volume_smoothcc&"): case hash("volume_smoothcc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::smoothCCRange)) if (auto value = readOpcode(opcode.value, Default::smoothCCRange))
volumeCC[opcode.parameters.back()].smooth = *value; volumeCC[opcode.parameters.back()].smooth = *value;
@ -323,7 +323,7 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
case hash("gain_cc&"): case hash("gain_cc&"):
case hash("gain_oncc&"): // fallthrough case hash("gain_oncc&"): // fallthrough
case hash("volume_oncc&"): case hash("volume_oncc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::volumeCCRange)) if (auto value = readOpcode(opcode.value, Default::volumeCCRange))
volumeCC[opcode.parameters.back()].value = *value; volumeCC[opcode.parameters.back()].value = *value;
@ -333,26 +333,26 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
amplitude = normalizePercents(*value); amplitude = normalizePercents(*value);
break; break;
case hash("amplitude_curvecc&"): case hash("amplitude_curvecc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::curveCCRange)) if (auto value = readOpcode(opcode.value, Default::curveCCRange))
amplitudeCC[opcode.parameters.back()].curve = *value; amplitudeCC[opcode.parameters.back()].curve = *value;
break; break;
case hash("amplitude_stepcc&"): case hash("amplitude_stepcc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::amplitudeRange)) if (auto value = readOpcode(opcode.value, Default::amplitudeRange))
amplitudeCC[opcode.parameters.back()].step = normalizePercents(*value); amplitudeCC[opcode.parameters.back()].step = normalizePercents(*value);
break; break;
case hash("amplitude_smoothcc&"): case hash("amplitude_smoothcc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::smoothCCRange)) if (auto value = readOpcode(opcode.value, Default::smoothCCRange))
amplitudeCC[opcode.parameters.back()].smooth = *value; amplitudeCC[opcode.parameters.back()].smooth = *value;
break; break;
case hash("amplitude_cc&"): // fallthrough case hash("amplitude_cc&"): // fallthrough
case hash("amplitude_oncc&"): case hash("amplitude_oncc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::amplitudeRange)) if (auto value = readOpcode(opcode.value, Default::amplitudeRange))
amplitudeCC[opcode.parameters.back()].value = normalizePercents(*value); amplitudeCC[opcode.parameters.back()].value = normalizePercents(*value);
@ -362,26 +362,26 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
pan = normalizePercents(*value); pan = normalizePercents(*value);
break; break;
case hash("pan_curvecc&"): case hash("pan_curvecc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::curveCCRange)) if (auto value = readOpcode(opcode.value, Default::curveCCRange))
panCC[opcode.parameters.back()].curve = *value; panCC[opcode.parameters.back()].curve = *value;
break; break;
case hash("pan_stepcc&"): case hash("pan_stepcc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::panStepRange)) if (auto value = readOpcode(opcode.value, Default::panStepRange))
panCC[opcode.parameters.back()].step = normalizePercents(*value); panCC[opcode.parameters.back()].step = normalizePercents(*value);
break; break;
case hash("pan_smoothcc&"): case hash("pan_smoothcc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::smoothCCRange)) if (auto value = readOpcode(opcode.value, Default::smoothCCRange))
panCC[opcode.parameters.back()].smooth = *value; panCC[opcode.parameters.back()].smooth = *value;
break; break;
case hash("pan_cc&"): case hash("pan_cc&"):
case hash("pan_oncc&"): case hash("pan_oncc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::panCCRange)) if (auto value = readOpcode(opcode.value, Default::panCCRange))
panCC[opcode.parameters.back()].value = normalizePercents(*value); panCC[opcode.parameters.back()].value = normalizePercents(*value);
@ -391,26 +391,26 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
position = normalizePercents(*value); position = normalizePercents(*value);
break; break;
case hash("position_curvecc&"): case hash("position_curvecc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::curveCCRange)) if (auto value = readOpcode(opcode.value, Default::curveCCRange))
positionCC[opcode.parameters.back()].curve = *value; positionCC[opcode.parameters.back()].curve = *value;
break; break;
case hash("position_stepcc&"): case hash("position_stepcc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::positionStepRange)) if (auto value = readOpcode(opcode.value, Default::positionStepRange))
positionCC[opcode.parameters.back()].step = normalizePercents(*value); positionCC[opcode.parameters.back()].step = normalizePercents(*value);
break; break;
case hash("position_smoothcc&"): case hash("position_smoothcc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::smoothCCRange)) if (auto value = readOpcode(opcode.value, Default::smoothCCRange))
positionCC[opcode.parameters.back()].smooth = *value; positionCC[opcode.parameters.back()].smooth = *value;
break; break;
case hash("position_cc&"): // fallthrough case hash("position_cc&"): // fallthrough
case hash("position_oncc&"): case hash("position_oncc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::positionCCRange)) if (auto value = readOpcode(opcode.value, Default::positionCCRange))
positionCC[opcode.parameters.back()].value = normalizePercents(*value); positionCC[opcode.parameters.back()].value = normalizePercents(*value);
@ -420,25 +420,25 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
width = normalizePercents(*value); width = normalizePercents(*value);
break; break;
case hash("width_curvecc&"): case hash("width_curvecc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::curveCCRange)) if (auto value = readOpcode(opcode.value, Default::curveCCRange))
widthCC[opcode.parameters.back()].curve = *value; widthCC[opcode.parameters.back()].curve = *value;
break; break;
case hash("width_stepcc&"): case hash("width_stepcc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::widthStepRange)) if (auto value = readOpcode(opcode.value, Default::widthStepRange))
widthCC[opcode.parameters.back()].step = normalizePercents(*value); widthCC[opcode.parameters.back()].step = normalizePercents(*value);
break; break;
case hash("width_smoothcc&"): case hash("width_smoothcc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::smoothCCRange)) if (auto value = readOpcode(opcode.value, Default::smoothCCRange))
widthCC[opcode.parameters.back()].smooth = *value; widthCC[opcode.parameters.back()].smooth = *value;
break; break;
case hash("width_oncc&"): case hash("width_oncc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::widthCCRange)) if (auto value = readOpcode(opcode.value, Default::widthCCRange))
widthCC[opcode.parameters.back()].value = normalizePercents(*value); widthCC[opcode.parameters.back()].value = normalizePercents(*value);
@ -518,25 +518,25 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
} }
break; break;
case hash("xfin_locc&"): case hash("xfin_locc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::midi7Range)) if (auto value = readOpcode(opcode.value, Default::midi7Range))
crossfadeCCInRange[opcode.parameters.back()].setStart(normalizeCC(*value)); crossfadeCCInRange[opcode.parameters.back()].setStart(normalizeCC(*value));
break; break;
case hash("xfin_hicc&"): case hash("xfin_hicc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::midi7Range)) if (auto value = readOpcode(opcode.value, Default::midi7Range))
crossfadeCCInRange[opcode.parameters.back()].setEnd(normalizeCC(*value)); crossfadeCCInRange[opcode.parameters.back()].setEnd(normalizeCC(*value));
break; break;
case hash("xfout_locc&"): case hash("xfout_locc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::midi7Range)) if (auto value = readOpcode(opcode.value, Default::midi7Range))
crossfadeCCOutRange[opcode.parameters.back()].setStart(normalizeCC(*value)); crossfadeCCOutRange[opcode.parameters.back()].setStart(normalizeCC(*value));
break; break;
case hash("xfout_hicc&"): case hash("xfout_hicc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::midi7Range)) if (auto value = readOpcode(opcode.value, Default::midi7Range))
crossfadeCCOutRange[opcode.parameters.back()].setEnd(normalizeCC(*value)); crossfadeCCOutRange[opcode.parameters.back()].setEnd(normalizeCC(*value));
@ -824,21 +824,21 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
break; break;
case hash("pitch_curvecc&"): // fallthrough case hash("pitch_curvecc&"): // fallthrough
case hash("tune_curvecc&"): case hash("tune_curvecc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::curveCCRange)) if (auto value = readOpcode(opcode.value, Default::curveCCRange))
tuneCC[opcode.parameters.back()].curve = *value; tuneCC[opcode.parameters.back()].curve = *value;
break; break;
case hash("pitch_stepcc&"): // fallthrough case hash("pitch_stepcc&"): // fallthrough
case hash("tune_stepcc&"): case hash("tune_stepcc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::tuneStepRange)) if (auto value = readOpcode(opcode.value, Default::tuneStepRange))
tuneCC[opcode.parameters.back()].step = *value; tuneCC[opcode.parameters.back()].step = *value;
break; break;
case hash("pitch_smoothcc&"): // fallthrough case hash("pitch_smoothcc&"): // fallthrough
case hash("tune_smoothcc&"): case hash("tune_smoothcc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::smoothCCRange)) if (auto value = readOpcode(opcode.value, Default::smoothCCRange))
tuneCC[opcode.parameters.back()].smooth = *value; tuneCC[opcode.parameters.back()].smooth = *value;
@ -847,7 +847,7 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
case hash("tune_oncc&"): case hash("tune_oncc&"):
case hash("pitch_cc&"): case hash("pitch_cc&"):
case hash("pitch_oncc&"): case hash("pitch_oncc&"):
if (opcode.parameters.back() > config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::tuneCCRange)) if (auto value = readOpcode(opcode.value, Default::tuneCCRange))
tuneCC[opcode.parameters.back()].value = *value; tuneCC[opcode.parameters.back()].value = *value;