Handle pitch_cc and tune_cc
This commit is contained in:
parent
c92e78b3f2
commit
bf4bdad656
4 changed files with 25 additions and 0 deletions
|
|
@ -189,6 +189,7 @@ namespace Default
|
||||||
constexpr Range<int> transposeRange { -127, 127 };
|
constexpr Range<int> transposeRange { -127, 127 };
|
||||||
constexpr int tune { 0 };
|
constexpr int tune { 0 };
|
||||||
constexpr Range<int> tuneRange { -9600, 9600 }; // ±100 in SFZv1, more in ARIA
|
constexpr Range<int> tuneRange { -9600, 9600 }; // ±100 in SFZv1, more in ARIA
|
||||||
|
constexpr Range<int> tuneCCRange { -9600, 9600 };
|
||||||
constexpr Range<int> bendBoundRange { -9600, 9600 };
|
constexpr Range<int> bendBoundRange { -9600, 9600 };
|
||||||
constexpr Range<int> bendStepRange { 1, 1200 };
|
constexpr Range<int> bendStepRange { 1, 1200 };
|
||||||
constexpr int bendUp { 200 }; // No range here because the bounds can be inverted
|
constexpr int bendUp { 200 }; // No range here because the bounds can be inverted
|
||||||
|
|
|
||||||
|
|
@ -719,6 +719,15 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
|
||||||
case hash("pitch"):
|
case hash("pitch"):
|
||||||
setValueFromOpcode(opcode, tune, Default::tuneRange);
|
setValueFromOpcode(opcode, tune, Default::tuneRange);
|
||||||
break;
|
break;
|
||||||
|
case hash("tune_cc&"):
|
||||||
|
case hash("tune_oncc&"):
|
||||||
|
case hash("pitch_cc&"):
|
||||||
|
case hash("pitch_oncc&"):
|
||||||
|
if (opcode.parameters.back() > config::numCCs)
|
||||||
|
return false;
|
||||||
|
if (auto value = readOpcode(opcode.value, Default::tuneCCRange))
|
||||||
|
tuneCC[opcode.parameters.back()] = *value;
|
||||||
|
break;
|
||||||
case hash("bend_up"):
|
case hash("bend_up"):
|
||||||
setValueFromOpcode(opcode, bendUp, Default::bendBoundRange);
|
setValueFromOpcode(opcode, bendUp, Default::bendBoundRange);
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -308,6 +308,7 @@ struct Region {
|
||||||
int pitchVeltrack { Default::pitchVeltrack }; // pitch_veltrack
|
int pitchVeltrack { Default::pitchVeltrack }; // pitch_veltrack
|
||||||
int transpose { Default::transpose }; // transpose
|
int transpose { Default::transpose }; // transpose
|
||||||
int tune { Default::tune }; // tune
|
int tune { Default::tune }; // tune
|
||||||
|
CCMap<int> tuneCC { Default::tune };
|
||||||
int bendUp { Default::bendUp };
|
int bendUp { Default::bendUp };
|
||||||
int bendDown { Default::bendDown };
|
int bendDown { Default::bendDown };
|
||||||
int bendStep { Default::bendStep };
|
int bendStep { Default::bendStep };
|
||||||
|
|
|
||||||
|
|
@ -1467,6 +1467,20 @@ TEST_CASE("[Region] Parsing opcodes")
|
||||||
REQUIRE(region.volumeCC.contains(4));
|
REQUIRE(region.volumeCC.contains(4));
|
||||||
REQUIRE(region.volumeCC[4] == -1.0_a);
|
REQUIRE(region.volumeCC[4] == -1.0_a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("tune_cc/pitch_cc")
|
||||||
|
{
|
||||||
|
REQUIRE(region.tuneCC.empty());
|
||||||
|
region.parseOpcode({ "pitch_cc1", "40" });
|
||||||
|
REQUIRE(region.tuneCC.contains(1));
|
||||||
|
REQUIRE(region.tuneCC[1] == 40);
|
||||||
|
region.parseOpcode({ "tune_oncc2", "-76" });
|
||||||
|
REQUIRE(region.tuneCC.contains(2));
|
||||||
|
REQUIRE(region.tuneCC[2] == -76.0);
|
||||||
|
region.parseOpcode({ "pitch_oncc4", "-1" });
|
||||||
|
REQUIRE(region.tuneCC.contains(4));
|
||||||
|
REQUIRE(region.tuneCC[4] == -1.0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Specific region bugs
|
// Specific region bugs
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue