Update tests and connect all cc opcodes

This commit is contained in:
Paul Ferrand 2020-09-16 16:28:49 +02:00
parent f07000dd88
commit fd8b00b9a1
3 changed files with 34 additions and 16 deletions

View file

@ -579,7 +579,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
setValueFromOpcode(opcode, filters[filterIndex].resonance, Default::filterResonanceRange);
}
break;
case hash("cutoff&_oncc&"): // also cutoff_oncc&, cutoff_cc&, cutoff&_cc&
case_any_ccN("cutoff&"): // also cutoff_oncc&, cutoff_cc&, cutoff&_cc&
{
const auto filterIndex = opcode.parameters.front() - 1;
if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters))
@ -588,7 +588,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
processGenericCc(opcode, Default::filterCutoffModRange, ModKey::createNXYZ(ModId::FilCutoff, id, filterIndex));
}
break;
case hash("resonance&_oncc&"): // also resonance_oncc&, resonance_cc&, resonance&_cc&
case_any_ccN("resonance&"): // also resonance_oncc&, resonance_cc&, resonance&_cc&
{
const auto filterIndex = opcode.parameters.front() - 1;
if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters))
@ -642,7 +642,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
setValueFromOpcode(opcode, filters[filterIndex].gain, Default::filterGainRange);
}
break;
case hash("fil&_gain_oncc&"): // also fil_gain_oncc&
case_any_ccN("fil&_gain"): // also fil_gain_oncc&
{
const auto filterIndex = opcode.parameters.front() - 1;
if (!extendIfNecessary(filters, filterIndex + 1, Default::numFilters))
@ -678,7 +678,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
setValueFromOpcode(opcode, equalizers[eqIndex].bandwidth, Default::eqBandwidthRange);
}
break;
case hash("eq&_bw_oncc&"): // also eq&_bwcc&
case_any_ccN("eq&_bw"): // also eq&_bwcc&
{
const auto eqIndex = opcode.parameters.front() - 1;
if (!extendIfNecessary(equalizers, eqIndex + 1, Default::numEQs))
@ -695,7 +695,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
setValueFromOpcode(opcode, equalizers[eqIndex].frequency, Default::eqFrequencyRange);
}
break;
case hash("eq&_freq_oncc&"): // also eq&_freqcc&
case_any_ccN("eq&_freq"): // also eq&_freqcc&
{
const auto eqIndex = opcode.parameters.front() - 1;
if (!extendIfNecessary(equalizers, eqIndex + 1, Default::numEQs))
@ -723,7 +723,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
setValueFromOpcode(opcode, equalizers[eqIndex].gain, Default::eqGainRange);
}
break;
case hash("eq&_gain_oncc&"): // also eq&_gaincc&
case_any_ccN("eq&_gain"): // also eq&_gaincc&
{
const auto eqIndex = opcode.parameters.front() - 1;
if (!extendIfNecessary(equalizers, eqIndex + 1, Default::numEQs))

View file

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

View file

@ -107,13 +107,31 @@ TEST_CASE("[Modulations] Filter CC connections")
<region> sample=*sine
cutoff=100 fil1_gain_oncc3=5 fil1_gain_stepcc3=0.5
cutoff2=300 cutoff2_cc2=100 cutoff2_curvecc2=2
resonance2=-1 resonance2_oncc1=2 resonance2_smoothcc1=10
resonance3=-1 resonance3_oncc1=2 resonance3_smoothcc1=10
)");
const std::string graph = synth.getResources().modMatrix.toDotGraph();
REQUIRE(graph == createReferenceGraph({
R"("Controller 1 {curve=0, smooth=10, value=2, step=0}" -> "FilResonance")",
R"("Controller 2 {curve=2, smooth=0, value=100, step=0}" -> "FilCutoff")",
R"("Controller 3 {curve=0, smooth=0, value=5, step=0.5}" -> "FilGain")",
R"("Controller 1 {curve=0, smooth=10, value=2, step=0}" -> "FilterResonance {0, N=2}")",
R"("Controller 2 {curve=2, smooth=0, value=100, step=0}" -> "FilterCutoff {0, N=1}")",
R"("Controller 3 {curve=0, smooth=0, value=5, step=0.5}" -> "FilterGain {0, N=0}")",
}));
}
TEST_CASE("[Modulations] EQ CC connections")
{
sfz::Synth synth;
synth.loadSfzString("/modulation.sfz", R"(
<region> sample=*sine
eq1_gain_oncc2=5 eq1_gain_stepcc2=0.5
eq2_freq_oncc3=300 eq2_freq_curvecc3=3
eq3_bw_oncc1=2 eq3_bw_smoothcc1=10
)");
const std::string graph = synth.getResources().modMatrix.toDotGraph();
REQUIRE(graph == createReferenceGraph({
R"("Controller 1 {curve=0, smooth=10, value=2, step=0}" -> "EqBandwidth {0, N=2}")",
R"("Controller 2 {curve=0, smooth=0, value=5, step=0.5}" -> "EqGain {0, N=0}")",
R"("Controller 3 {curve=3, smooth=0, value=300, step=0}" -> "EqFrequency {0, N=1}")",
}));
}