Browse Source

Minor sfzero fixes

tags/v1.9.11
falkTX 7 years ago
parent
commit
58a76670cd
5 changed files with 53 additions and 21 deletions
  1. +0
    -2
      source/backend/CarlaStandalone.cpp
  2. +20
    -6
      source/modules/sfzero/sfzero/SFZReader.cpp
  3. +1
    -1
      source/modules/sfzero/sfzero/SFZReader.h
  4. +31
    -11
      source/modules/sfzero/sfzero/SFZRegion.cpp
  5. +1
    -1
      source/modules/sfzero/sfzero/SFZSynth.cpp

+ 0
- 2
source/backend/CarlaStandalone.cpp View File

@@ -1444,8 +1444,6 @@ float carla_get_current_parameter_value(uint pluginId, uint32_t parameterId)


CarlaPlugin* const plugin(gStandalone.engine->getPlugin(pluginId)); CarlaPlugin* const plugin(gStandalone.engine->getPlugin(pluginId));
CARLA_SAFE_ASSERT_RETURN(plugin != nullptr, 0.0f); CARLA_SAFE_ASSERT_RETURN(plugin != nullptr, 0.0f);

carla_debug("carla_get_current_parameter_value(%i, %i)", pluginId, parameterId);
CARLA_SAFE_ASSERT_RETURN(parameterId < plugin->getParameterCount(), 0.0f); CARLA_SAFE_ASSERT_RETURN(parameterId < plugin->getParameterCount(), 0.0f);


return plugin->getParameterValue(parameterId); return plugin->getParameterValue(parameterId);


+ 20
- 6
source/modules/sfzero/sfzero/SFZReader.cpp View File

@@ -37,10 +37,12 @@ void Reader::read(const char *text, unsigned int length)
const char *end = text + length; const char *end = text + length;
char c = 0; char c = 0;


Region curGlobal;
Region curGroup; Region curGroup;
Region curRegion; Region curRegion;
Region *buildingRegion = nullptr; Region *buildingRegion = nullptr;
bool inControl = false; bool inControl = false;
bool inGroup = false;
water::String defaultPath; water::String defaultPath;


while (p < end) while (p < end)
@@ -112,7 +114,14 @@ void Reader::read(const char *text, unsigned int length)
goto fatalError; goto fatalError;
} }
StringSlice tag(tagStart, p - 1); StringSlice tag(tagStart, p - 1);
if (tag == "region")
if (tag == "global")
{
curGlobal.clear();
buildingRegion = &curGlobal;
inControl = false;
inGroup = false;
}
else if (tag == "region")
{ {
if (buildingRegion && (buildingRegion == &curRegion)) if (buildingRegion && (buildingRegion == &curRegion))
{ {
@@ -121,6 +130,7 @@ void Reader::read(const char *text, unsigned int length)
curRegion = curGroup; curRegion = curGroup;
buildingRegion = &curRegion; buildingRegion = &curRegion;
inControl = false; inControl = false;
inGroup = false;
} }
else if (tag == "group") else if (tag == "group")
{ {
@@ -128,9 +138,13 @@ void Reader::read(const char *text, unsigned int length)
{ {
finishRegion(&curRegion); finishRegion(&curRegion);
} }
curGroup.clear();
buildingRegion = &curGroup;
inControl = false;
if (! inGroup)
{
curGroup = curGlobal;
buildingRegion = &curGroup;
inControl = false;
inGroup = true;
}
} }
else if (tag == "control") else if (tag == "control")
{ {
@@ -198,7 +212,7 @@ void Reader::read(const char *text, unsigned int length)
} }
p++; p++;
} }
water::String value(valueStart, p - valueStart);
water::String value(valueStart, (water::uint64)(p - valueStart));
water::String fauxOpcode = water::String(opcode.getStart(), opcode.length()) + " (in <control>)"; water::String fauxOpcode = water::String(opcode.getStart(), opcode.length()) + " (in <control>)";
sound_->addUnsupportedOpcode(fauxOpcode); sound_->addUnsupportedOpcode(fauxOpcode);
} }
@@ -235,7 +249,7 @@ void Reader::read(const char *text, unsigned int length)
} }
p++; p++;
} }
water::String value(valueStart, p - valueStart);
water::String value(valueStart, (water::uint64)(p - valueStart));
if (buildingRegion == nullptr) if (buildingRegion == nullptr)
{ {
error("Setting a parameter outside a region or group"); error("Setting a parameter outside a region or group");


+ 1
- 1
source/modules/sfzero/sfzero/SFZReader.h View File

@@ -47,7 +47,7 @@ public:
StringSlice(const char *startIn, const char *endIn) : start_(startIn), end_(endIn) {} StringSlice(const char *startIn, const char *endIn) : start_(startIn), end_(endIn) {}
virtual ~StringSlice() {} virtual ~StringSlice() {}


unsigned int length() { return static_cast<int>(end_ - start_); }
unsigned int length() { return static_cast<unsigned int>(end_ - start_); }
bool operator==(const char *other) { return (strncmp(start_, other, length()) == 0); } bool operator==(const char *other) { return (strncmp(start_, other, length()) == 0); }
bool operator!=(const char *other) { return (strncmp(start_, other, length()) != 0); } bool operator!=(const char *other) { return (strncmp(start_, other, length()) != 0); }
const char *getStart() const { return start_; } const char *getStart() const { return start_; }


+ 31
- 11
source/modules/sfzero/sfzero/SFZRegion.cpp View File

@@ -32,17 +32,37 @@ Region::Region() { clear(); }


void Region::clear() void Region::clear()
{ {
memset(this, 0, sizeof(*this));
hikey = 127;
hivel = 127;
pitch_keycenter = 60; // C4
pitch_keytrack = 100;
bend_up = 200;
bend_down = -200;
volume = pan = 0.0;
amp_veltrack = 100.0;
ampeg.clear();
ampeg_veltrack.clearMod();
#if 1
sample = nullptr;
lokey = 0;
lovel = 0;
trigger = attack;
group = 0;
off_by = 0;
off_mode = fast;

offset = 0;
end = 0;
negative_end = false;
loop_mode = no_loop;
loop_start = 0;
loop_end = 0;
transpose = 0;
tune = 0;
#else
memset(this, 0, sizeof(*this));
#endif

hikey = 127;
hivel = 127;
pitch_keycenter = 60; // C4
pitch_keytrack = 100;
bend_up = 200;
bend_down = -200;
volume = pan = 0.0f;
amp_veltrack = 100.0f;
ampeg.clear();
ampeg_veltrack.clearMod();
} }


water::String Region::dump() water::String Region::dump()


+ 1
- 1
source/modules/sfzero/sfzero/SFZSynth.cpp View File

@@ -42,7 +42,7 @@ void Synth::noteOn(int midiChannel, int midiNoteNumber, float velocity)
{ {
continue; continue;
} }
if (voice->getOffBy() == group)
if (voice->getGroup() == group)
{ {
voice->stopNoteForGroup(); voice->stopNoteForGroup();
} }


Loading…
Cancel
Save