| @@ -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); | ||||
| @@ -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"); | ||||
| @@ -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_; } | ||||
| @@ -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() | ||||
| @@ -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(); | ||||
| } | } | ||||