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:
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 &);