gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit ee10dbb7eaf30ab244edfb28623e4aca0331d327
parent a943a3cc5becb8123836fe581bc7e0b0b397606c
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Sat, 12 Feb 2022 02:14:52 +0100

some virus controller cleanup / git rid of some magic values

Diffstat:
Msource/jucePlugin/VirusController.cpp | 31+++++++++++++++----------------
Msource/jucePlugin/VirusController.h | 8++++----
2 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/source/jucePlugin/VirusController.cpp b/source/jucePlugin/VirusController.cpp @@ -24,7 +24,7 @@ namespace Virus registerParams(); // add lambda to enforce updating patches when virus switch from/to multi/single. (findSynthParam(0, 0x72, 0x7a))->onValueChanged = [this] { - const uint8_t prg = isMultiMode() ? 0x0 : 0x40; + const uint8_t prg = isMultiMode() ? 0x0 : virusLib::SINGLE; sendSysEx(constructMessage({MessageType::REQUEST_SINGLE, 0x0, prg})); sendSysEx(constructMessage({MessageType::REQUEST_MULTI, 0x0, prg})); @@ -310,10 +310,10 @@ namespace Virus return; } - uint8_t pt = isMultiMode() ? part : 0x40; - auto &preset = m_singles[bank][prg]; + uint8_t pt = isMultiMode() ? part : virusLib::SINGLE; + const auto &preset = m_singles[bank][prg]; SysEx patch = {MessageType::DUMP_SINGLE, 0x0, pt}; - for (auto i = 0; i < kDataSizeInBytes; ++i) + for (size_t i = 0; i < std::size(preset.data); ++i) patch.push_back(preset.data[i]); sendSysEx(constructMessage(patch)); //sendSysEx(constructMessage({MessageType::REQUEST_ARRANGEMENT})); @@ -323,7 +323,7 @@ namespace Virus } virusLib::BankNumber Controller::getCurrentPartBank(uint8_t part) { return m_currentBank[part]; } - uint8_t Controller::getCurrentPartProgram(uint8_t part) { return m_currentProgram[part]; } + uint8_t Controller::getCurrentPartProgram(uint8_t part) const { return m_currentProgram[part]; } void Controller::parseSingle(const SysEx &msg) { constexpr auto pageSize = 128; @@ -355,25 +355,24 @@ namespace Virus else if (!isMultiMode() && patch.progNumber == 0x0) return; - constexpr auto bankSize = kDataSizeInBytes / 2; - const auto ch = patch.progNumber == 0x40 ? 0 : patch.progNumber; - for (auto i = 0; i < kDataSizeInBytes; i++) + const uint8_t ch = patch.progNumber == virusLib::SINGLE ? 0 : patch.progNumber; + for (size_t i = 0; i < std::size(patch.data); i++) { - if (auto *p = findSynthParam(ch, i >= bankSize ? 0x71 : 0x70, i % bankSize)) { + const uint8_t page = virusLib::PAGE_A + static_cast<uint8_t>(i / pageSize); + if (auto *p = findSynthParam(ch, page, i % pageSize)) + { if((p->getDescription().classFlags & Parameter::MULTI_OR_SINGLE) && isMultiMode()) continue; - else - p->setValueFromSynth(patch.data[i], true); + p->setValueFromSynth(patch.data[i], true); } } - if (onProgramChange) { + if (onProgramChange) onProgramChange(); - } } else m_singles[virusLib::toArrayIndex(patch.bankNumber)][patch.progNumber] = patch; - const auto namePos = kHeaderWithMsgCodeLen + 2 + 128 + 112; + constexpr auto namePos = kHeaderWithMsgCodeLen + 2 + 128 + 112; assert(namePos < msg.size()); auto progName = parseAsciiText(msg, namePos); DBG(progName); @@ -430,7 +429,7 @@ namespace Virus void Controller::parseControllerDump(synthLib::SMidiEvent &m) { uint8_t bank = 0xFF; - uint8_t part = 0x40; + uint8_t part = virusLib::SINGLE; if (m.a & synthLib::M_CONTROLCHANGE) { part = m.a ^ synthLib::M_CONTROLCHANGE; @@ -1979,7 +1978,7 @@ namespace Virus // TODO: B51-52 shortname?!? B54-B55 (same name?!) }; - uint8_t Controller::copyData(const SysEx &src, int startPos, uint8_t *dst) + uint8_t Controller::copyData(const SysEx &src, int startPos, std::array<uint8_t, kDataSizeInBytes>& dst) { uint8_t sum = 0; for (auto i = 0; i < kDataSizeInBytes; i++) diff --git a/source/jucePlugin/VirusController.h b/source/jucePlugin/VirusController.h @@ -419,7 +419,7 @@ namespace Virus // part 0 - 15 (ignored when single! 0x40...) void setCurrentPartPreset(uint8_t part, virusLib::BankNumber bank, uint8_t prg); virusLib::BankNumber getCurrentPartBank(uint8_t part); - uint8_t getCurrentPartProgram(uint8_t part); + uint8_t getCurrentPartProgram(uint8_t part) const; juce::String getCurrentPartPresetName(uint8_t part); uint32_t getBankCount() const { return static_cast<uint32_t>(m_singles.size()); } uint8_t getCurrentPart() const { return m_currentPart; } @@ -439,14 +439,14 @@ namespace Virus { uint8_t bankNumber = 0; uint8_t progNumber = 0; - uint8_t data[kDataSizeInBytes]{}; + std::array<uint8_t, kDataSizeInBytes> data{}; }; struct SinglePatch { virusLib::BankNumber bankNumber = static_cast<virusLib::BankNumber>(0); uint8_t progNumber = 0; - uint8_t data[kDataSizeInBytes]{}; + std::array<uint8_t, kDataSizeInBytes> data{}; }; MultiPatch m_multis[128]; // RAM has 128 Multi 'snapshots' @@ -482,7 +482,7 @@ namespace Virus Parameter* findSynthParam(const ParamIndex& _paramIndex); // unchecked copy for patch data bytes - static inline uint8_t copyData(const SysEx &src, int startPos, uint8_t *dst); + static inline uint8_t copyData(const SysEx &src, int startPos, std::array<uint8_t, kDataSizeInBytes>& dst); template <typename T> juce::String parseAsciiText(const T &, int startPos) const; void parseSingle(const SysEx &);