diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index a6cea577..e0dfa31f 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -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; diff --git a/src/sfizz/modulations/ModId.cpp b/src/sfizz/modulations/ModId.cpp index a75c648c..4ee37055 100644 --- a/src/sfizz/modulations/ModId.cpp +++ b/src/sfizz/modulations/ModId.cpp @@ -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: diff --git a/src/sfizz/modulations/ModId.h b/src/sfizz/modulations/ModId.h index 8f18679a..7ab96ee9 100644 --- a/src/sfizz/modulations/ModId.h +++ b/src/sfizz/modulations/ModId.h @@ -37,6 +37,12 @@ enum class ModId : int { Position, Pitch, Volume, + FilGain, + FilCutoff, + FilResonance, + EqGain, + EqFrequency, + EqBandwidth, _TargetsEnd, // [/targets] -------------------------------------------------------------- diff --git a/src/sfizz/modulations/ModKey.cpp b/src/sfizz/modulations/ModKey.cpp index aa4dd1cd..8aa40a9d 100644 --- a/src/sfizz/modulations/ModKey.cpp +++ b/src/sfizz/modulations/ModKey.cpp @@ -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 {};