Added support for parsing bend ranges
This commit is contained in:
parent
8fecef27ca
commit
a1282ff193
4 changed files with 48 additions and 2 deletions
|
|
@ -128,6 +128,11 @@ 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 { -100, 100 };
|
constexpr Range<int> tuneRange { -100, 100 };
|
||||||
|
constexpr Range<int> bendBoundRange { -9600, 9600 };
|
||||||
|
constexpr Range<int> bendStepRange { 1, 1200 };
|
||||||
|
constexpr int bendUp { 200 }; // No range here because the bounds can be inverted
|
||||||
|
constexpr int bendDown { -200 };
|
||||||
|
constexpr int bendStep { 1 };
|
||||||
|
|
||||||
// Envelope generators
|
// Envelope generators
|
||||||
constexpr float attack { 0 };
|
constexpr float attack { 0 };
|
||||||
|
|
|
||||||
|
|
@ -407,6 +407,15 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
|
||||||
case hash("tune"):
|
case hash("tune"):
|
||||||
setValueFromOpcode(opcode, tune, Default::tuneRange);
|
setValueFromOpcode(opcode, tune, Default::tuneRange);
|
||||||
break;
|
break;
|
||||||
|
case hash("bend_up"):
|
||||||
|
setValueFromOpcode(opcode, bendUp, Default::bendBoundRange);
|
||||||
|
break;
|
||||||
|
case hash("bend_down"):
|
||||||
|
setValueFromOpcode(opcode, bendDown, Default::bendBoundRange);
|
||||||
|
break;
|
||||||
|
case hash("bend_step"):
|
||||||
|
setValueFromOpcode(opcode, bendStep, Default::bendStepRange);
|
||||||
|
break;
|
||||||
|
|
||||||
// Amplitude Envelope
|
// Amplitude Envelope
|
||||||
case hash("ampeg_attack"):
|
case hash("ampeg_attack"):
|
||||||
|
|
|
||||||
|
|
@ -300,6 +300,9 @@ 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
|
||||||
|
int bendUp { Default::bendUp };
|
||||||
|
int bendDown { Default::bendDown };
|
||||||
|
int bendStep { Default::bendStep };
|
||||||
|
|
||||||
// Envelopes
|
// Envelopes
|
||||||
EGDescription amplitudeEG;
|
EGDescription amplitudeEG;
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ TEST_CASE("[Region] Parsing opcodes")
|
||||||
{
|
{
|
||||||
sfz::MidiState midiState;
|
sfz::MidiState midiState;
|
||||||
sfz::Region region { midiState };
|
sfz::Region region { midiState };
|
||||||
|
|
||||||
SECTION("sample")
|
SECTION("sample")
|
||||||
{
|
{
|
||||||
REQUIRE(region.sample == "");
|
REQUIRE(region.sample == "");
|
||||||
|
|
@ -832,6 +832,35 @@ TEST_CASE("[Region] Parsing opcodes")
|
||||||
REQUIRE(region.tune == -100);
|
REQUIRE(region.tune == -100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("bend_up, bend_down, bend_step")
|
||||||
|
{
|
||||||
|
REQUIRE(region.bendUp == 200);
|
||||||
|
REQUIRE(region.bendDown == -200);
|
||||||
|
REQUIRE(region.bendStep == 1);
|
||||||
|
region.parseOpcode({ "bend_up", "400" });
|
||||||
|
REQUIRE(region.bendUp == 400);
|
||||||
|
region.parseOpcode({ "bend_up", "-200" });
|
||||||
|
REQUIRE(region.bendUp == -200);
|
||||||
|
region.parseOpcode({ "bend_up", "9700" });
|
||||||
|
REQUIRE(region.bendUp == 9600);
|
||||||
|
region.parseOpcode({ "bend_up", "-9700" });
|
||||||
|
REQUIRE(region.bendUp == -9600);
|
||||||
|
region.parseOpcode({ "bend_down", "400" });
|
||||||
|
REQUIRE(region.bendDown == 400);
|
||||||
|
region.parseOpcode({ "bend_down", "-200" });
|
||||||
|
REQUIRE(region.bendDown == -200);
|
||||||
|
region.parseOpcode({ "bend_down", "9700" });
|
||||||
|
REQUIRE(region.bendDown == 9600);
|
||||||
|
region.parseOpcode({ "bend_down", "-9700" });
|
||||||
|
REQUIRE(region.bendDown == -9600);
|
||||||
|
region.parseOpcode({ "bend_step", "400" });
|
||||||
|
REQUIRE(region.bendStep == 400);
|
||||||
|
region.parseOpcode({ "bend_step", "-200" });
|
||||||
|
REQUIRE(region.bendStep == 1);
|
||||||
|
region.parseOpcode({ "bend_step", "9700" });
|
||||||
|
REQUIRE(region.bendStep == 1200);
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("ampeg")
|
SECTION("ampeg")
|
||||||
{
|
{
|
||||||
// Defaults
|
// Defaults
|
||||||
|
|
@ -1045,4 +1074,4 @@ TEST_CASE("[Region] Non-conforming floating point values in integer opcodes")
|
||||||
REQUIRE(region.offset == 2014);
|
REQUIRE(region.offset == 2014);
|
||||||
region.parseOpcode({ "pitch_keytrack", "-2.1" });
|
region.parseOpcode({ "pitch_keytrack", "-2.1" });
|
||||||
REQUIRE(region.pitchKeytrack == -2);
|
REQUIRE(region.pitchKeytrack == -2);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue