Added support for parsing bend ranges

This commit is contained in:
Paul Ferrand 2019-12-09 23:24:14 +01:00
parent 8fecef27ca
commit a1282ff193
4 changed files with 48 additions and 2 deletions

View file

@ -128,6 +128,11 @@ namespace Default
constexpr Range<int> transposeRange { -127, 127 };
constexpr int tune { 0 };
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
constexpr float attack { 0 };

View file

@ -407,6 +407,15 @@ bool sfz::Region::parseOpcode(const Opcode& opcode)
case hash("tune"):
setValueFromOpcode(opcode, tune, Default::tuneRange);
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
case hash("ampeg_attack"):

View file

@ -300,6 +300,9 @@ struct Region {
int pitchVeltrack { Default::pitchVeltrack }; // pitch_veltrack
int transpose { Default::transpose }; // transpose
int tune { Default::tune }; // tune
int bendUp { Default::bendUp };
int bendDown { Default::bendDown };
int bendStep { Default::bendStep };
// Envelopes
EGDescription amplitudeEG;

View file

@ -30,7 +30,7 @@ TEST_CASE("[Region] Parsing opcodes")
{
sfz::MidiState midiState;
sfz::Region region { midiState };
SECTION("sample")
{
REQUIRE(region.sample == "");
@ -832,6 +832,35 @@ TEST_CASE("[Region] Parsing opcodes")
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")
{
// Defaults
@ -1045,4 +1074,4 @@ TEST_CASE("[Region] Non-conforming floating point values in integer opcodes")
REQUIRE(region.offset == 2014);
region.parseOpcode({ "pitch_keytrack", "-2.1" });
REQUIRE(region.pitchKeytrack == -2);
}
}