diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index 216b1c9f..4dc7de70 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -1657,6 +1657,19 @@ bool sfz::Region::parseEGOpcodeV2(const Opcode& opcode) break; } + case hash("eg&_freq_lfo&"): + if (lfos.size() < opcode.parameters[1] - 1) + return false; + EG_target(ModKey::createNXYZ(ModId::LFOFrequency, id, opcode.parameters[1] - 1), Default::lfoFreqMod); + break; + + case_any_ccN("eg&_freq_lfo&"): + if (lfos.size() < opcode.parameters[1] - 1) + return false; + EG_target_cc(ModKey::createNXYZ(ModId::LFOFrequency, id, opcode.parameters[1] - 1), Default::lfoFreqMod); + break; + + default: return false; } diff --git a/src/sfizz/modulations/ModId.cpp b/src/sfizz/modulations/ModId.cpp index 7611b24e..29b563c1 100644 --- a/src/sfizz/modulations/ModId.cpp +++ b/src/sfizz/modulations/ModId.cpp @@ -150,6 +150,8 @@ int ModIds::flags(ModId id) noexcept return kModIsPerVoice|kModIsAdditive; case ModId::EGEqBandwidthDepth: return kModIsPerVoice|kModIsAdditive; + case ModId::EGLFOFreqDepth: + return kModIsPerVoice|kModIsAdditive; // unknown default: diff --git a/src/sfizz/modulations/ModId.h b/src/sfizz/modulations/ModId.h index d35a0fe6..f7e6ed05 100644 --- a/src/sfizz/modulations/ModId.h +++ b/src/sfizz/modulations/ModId.h @@ -89,6 +89,7 @@ enum class ModId : int { EGEqGainDepth, EGEqFrequencyDepth, EGEqBandwidthDepth, + EGLFOFreqDepth, _TargetsEnd, // [/targets] -------------------------------------------------------------- diff --git a/src/sfizz/modulations/ModKey.cpp b/src/sfizz/modulations/ModKey.cpp index 515927a1..61b55859 100644 --- a/src/sfizz/modulations/ModKey.cpp +++ b/src/sfizz/modulations/ModKey.cpp @@ -220,6 +220,8 @@ std::string ModKey::toString() const return absl::StrCat("EGEqFrequencyDepth {", region_.number(), ", N=", 1 + params_.N, ", X=", 1 + params_.X, "}"); case ModId::EGEqBandwidthDepth: return absl::StrCat("EGEqBandwidthDepth {", region_.number(), ", N=", 1 + params_.N, ", X=", 1 + params_.X, "}"); + case ModId::EGLFOFreqDepth: + return absl::StrCat("EGLFOFreqDepth {", region_.number(), ", N=", 1 + params_.N, ", X=", 1 + params_.X, "}"); default: return {}; @@ -334,6 +336,8 @@ ModKey ModKey::getSourceDepthKey(ModKey source, ModKey target) return ModKey::createNXYZ(ModId::EGEqFrequencyDepth, region, tp.N, tp.X); case ModId::EqBandwidth: return ModKey::createNXYZ(ModId::EGEqBandwidthDepth, region, tp.N, tp.X); + case ModId:: LFOFrequency: + return ModKey::createNXYZ(ModId::EGLFOFreqDepth, region, tp.N, tp.X); default: break; }