Parse curve/step/smooth
This commit is contained in:
parent
fbb9ebabb2
commit
3620316caf
2 changed files with 115 additions and 0 deletions
|
|
@ -81,6 +81,9 @@ namespace Default
|
|||
// Region logic: MIDI conditions
|
||||
constexpr Range<uint8_t> channelRange { 1, 16 };
|
||||
constexpr Range<uint8_t> midiChannelRange { 0, 15 };
|
||||
constexpr Range<uint8_t> stepCCRange { 0, 127 };
|
||||
constexpr Range<uint8_t> smoothCCRange { 0, 127 };
|
||||
constexpr Range<uint8_t> curveCCRange { 0, 255 };
|
||||
constexpr Range<uint16_t> ccNumberRange { 0, config::numCCs };
|
||||
constexpr auto ccValueRange = normalizedRange;
|
||||
constexpr Range<int> bendRange = { -8192, 8192 };
|
||||
|
|
|
|||
|
|
@ -297,6 +297,24 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
|
|||
case hash("volume"):
|
||||
setValueFromOpcode(opcode, volume, Default::volumeRange);
|
||||
break;
|
||||
case hash("volume_curvecc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::curveCCRange))
|
||||
volumeCC[opcode.parameters.back()].curve = *value;
|
||||
break;
|
||||
case hash("volume_stepcc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::stepCCRange))
|
||||
volumeCC[opcode.parameters.back()].steps = *value;
|
||||
break;
|
||||
case hash("volume_smoothcc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::smoothCCRange))
|
||||
volumeCC[opcode.parameters.back()].smooth = *value;
|
||||
break;
|
||||
case hash("gain_cc&"):
|
||||
case hash("gain_oncc&"): // fallthrough
|
||||
case hash("volume_oncc&"):
|
||||
|
|
@ -309,6 +327,24 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
|
|||
if (auto value = readOpcode(opcode.value, Default::amplitudeRange))
|
||||
amplitude = normalizePercents(*value);
|
||||
break;
|
||||
case hash("amplitude_curvecc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::curveCCRange))
|
||||
amplitudeCC[opcode.parameters.back()].curve = *value;
|
||||
break;
|
||||
case hash("amplitude_stepcc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::stepCCRange))
|
||||
amplitudeCC[opcode.parameters.back()].steps = *value;
|
||||
break;
|
||||
case hash("amplitude_smoothcc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::smoothCCRange))
|
||||
amplitudeCC[opcode.parameters.back()].smooth = *value;
|
||||
break;
|
||||
case hash("amplitude_cc&"): // fallthrough
|
||||
case hash("amplitude_oncc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
|
|
@ -320,6 +356,24 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
|
|||
if (auto value = readOpcode(opcode.value, Default::panRange))
|
||||
pan = normalizePercents(*value);
|
||||
break;
|
||||
case hash("pan_curvecc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::curveCCRange))
|
||||
panCC[opcode.parameters.back()].curve = *value;
|
||||
break;
|
||||
case hash("pan_stepcc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::stepCCRange))
|
||||
panCC[opcode.parameters.back()].steps = *value;
|
||||
break;
|
||||
case hash("pan_smoothcc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::smoothCCRange))
|
||||
panCC[opcode.parameters.back()].smooth = *value;
|
||||
break;
|
||||
case hash("pan_cc&"):
|
||||
case hash("pan_oncc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
|
|
@ -331,6 +385,25 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
|
|||
if (auto value = readOpcode(opcode.value, Default::positionRange))
|
||||
position = normalizePercents(*value);
|
||||
break;
|
||||
case hash("position_curvecc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::curveCCRange))
|
||||
positionCC[opcode.parameters.back()].curve = *value;
|
||||
break;
|
||||
case hash("position_stepcc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::stepCCRange))
|
||||
positionCC[opcode.parameters.back()].steps = *value;
|
||||
break;
|
||||
case hash("position_smoothcc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::smoothCCRange))
|
||||
positionCC[opcode.parameters.back()].smooth = *value;
|
||||
break;
|
||||
case hash("position_cc&"): // fallthrough
|
||||
case hash("position_oncc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
|
|
@ -341,6 +414,24 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
|
|||
if (auto value = readOpcode(opcode.value, Default::widthRange))
|
||||
width = normalizePercents(*value);
|
||||
break;
|
||||
case hash("width_curvecc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::curveCCRange))
|
||||
widthCC[opcode.parameters.back()].curve = *value;
|
||||
break;
|
||||
case hash("width_stepcc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::stepCCRange))
|
||||
widthCC[opcode.parameters.back()].steps = *value;
|
||||
break;
|
||||
case hash("width_smoothcc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::smoothCCRange))
|
||||
widthCC[opcode.parameters.back()].smooth = *value;
|
||||
break;
|
||||
case hash("width_oncc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
|
|
@ -726,6 +817,27 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
|
|||
case hash("pitch"):
|
||||
setValueFromOpcode(opcode, tune, Default::tuneRange);
|
||||
break;
|
||||
case hash("pitch_curvecc&"): // fallthrough
|
||||
case hash("tune_curvecc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::curveCCRange))
|
||||
tuneCC[opcode.parameters.back()].curve = *value;
|
||||
break;
|
||||
case hash("pitch_stepcc&"): // fallthrough
|
||||
case hash("tune_stepcc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::stepCCRange))
|
||||
tuneCC[opcode.parameters.back()].steps = *value;
|
||||
break;
|
||||
case hash("pitch_smoothcc&"): // fallthrough
|
||||
case hash("tune_smoothcc&"):
|
||||
if (opcode.parameters.back() > config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::smoothCCRange))
|
||||
tuneCC[opcode.parameters.back()].smooth = *value;
|
||||
break;
|
||||
case hash("tune_cc&"):
|
||||
case hash("tune_oncc&"):
|
||||
case hash("pitch_cc&"):
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue