Parse filter/eq modulation targets

This commit is contained in:
Paul Ferrand 2020-09-16 12:02:47 +02:00
parent 8c625d1e04
commit 4e58a945a8
4 changed files with 37 additions and 0 deletions

View file

@ -585,6 +585,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters))
return false;
processGenericCc(opcode, Default::filterCutoffModRange, ModKey::createNXYZ(ModId::FilCutoff, id, filterIndex));
setValueFromOpcode(
opcode,
filters[filterIndex].cutoffCC[opcode.parameters.back()],
@ -598,6 +599,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters))
return false;
processGenericCc(opcode, Default::filterResonanceModRange, ModKey::createNXYZ(ModId::FilResonance, id, filterIndex));
setValueFromOpcode(
opcode,
filters[filterIndex].resonanceCC[opcode.parameters.back()],
@ -656,6 +658,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters))
return false;
processGenericCc(opcode, Default::filterGainModRange, ModKey::createNXYZ(ModId::FilGain, id, filterIndex));
setValueFromOpcode(
opcode,
filters[filterIndex].gainCC[opcode.parameters.back()],
@ -688,6 +691,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
return false;
if (!extendIfNecessary(equalizers, eqNumber, Default::numEQs))
return false;
setValueFromOpcode(opcode, equalizers[eqNumber - 1].bandwidth, Default::eqBandwidthRange);
}
break;
@ -699,6 +703,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
if (!extendIfNecessary(equalizers, eqNumber, Default::numEQs))
return false;
processGenericCc(opcode, Default::eqBandwidthModRange, ModKey::createNXYZ(ModId::EqBandwidth, id, eqNumber));
setValueFromOpcode(opcode, equalizers[eqNumber - 1].bandwidthCC[opcode.parameters.back()], Default::eqBandwidthModRange);
}
break;
@ -720,6 +725,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
if (!extendIfNecessary(equalizers, eqNumber, Default::numEQs))
return false;
processGenericCc(opcode, Default::eqFrequencyModRange, ModKey::createNXYZ(ModId::EqFrequency, id, eqNumber));
setValueFromOpcode(opcode, equalizers[eqNumber - 1].frequencyCC[opcode.parameters.back()], Default::eqFrequencyModRange);
}
break;
@ -754,6 +760,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
if (!extendIfNecessary(equalizers, eqNumber, Default::numEQs))
return false;
processGenericCc(opcode, Default::eqGainModRange, ModKey::createNXYZ(ModId::EqGain, id, eqNumber));
setValueFromOpcode(opcode, equalizers[eqNumber - 1].gainCC[opcode.parameters.back()], Default::eqGainModRange);
}
break;

View file

@ -44,6 +44,18 @@ int ModIds::flags(ModId id) noexcept
return kModIsPerVoice|kModIsAdditive;
case ModId::Volume:
return kModIsPerVoice|kModIsAdditive;
case ModId::FilGain:
return kModIsPerVoice|kModIsAdditive;
case ModId::FilCutoff:
return kModIsPerVoice|kModIsAdditive;
case ModId::FilResonance:
return kModIsPerVoice|kModIsMultiplicative;
case ModId::EqGain:
return kModIsPerVoice|kModIsAdditive;
case ModId::EqFrequency:
return kModIsPerVoice|kModIsAdditive;
case ModId::EqBandwidth:
return kModIsPerVoice|kModIsAdditive;
// unknown
default:

View file

@ -37,6 +37,12 @@ enum class ModId : int {
Position,
Pitch,
Volume,
FilGain,
FilCutoff,
FilResonance,
EqGain,
EqFrequency,
EqBandwidth,
_TargetsEnd,
// [/targets] --------------------------------------------------------------

View file

@ -87,6 +87,18 @@ std::string ModKey::toString() const
return absl::StrCat("Pitch {", region_.number(), "}");
case ModId::Volume:
return absl::StrCat("Volume {", region_.number(), "}");
case ModId::FilGain:
return absl::StrCat("FilterGain {", region_.number(), "N=", params_.N, "}");
case ModId::FilCutoff:
return absl::StrCat("FilterCutoff {", region_.number(), "N=", params_.N, "}");
case ModId::FilResonance:
return absl::StrCat("FilterResonance {", region_.number(), "N=", params_.N, "}");
case ModId::EqGain:
return absl::StrCat("EqGain {", region_.number(), "N=", params_.N, "}");
case ModId::EqFrequency:
return absl::StrCat("EqFrequency {", region_.number(), "N=", params_.N, "}");
case ModId::EqBandwidth:
return absl::StrCat("EqBandwitdth {", region_.number(), "N=", params_.N, "}");
default:
return {};