mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
MPEInstrument: Reset last received values when setting a new MPE zone layout
This commit is contained in:
parent
ae1f5541fc
commit
f59785606c
2 changed files with 32 additions and 8 deletions
|
|
@ -27,30 +27,33 @@ namespace
|
||||||
{
|
{
|
||||||
const uint8 noLSBValueReceived = 0xff;
|
const uint8 noLSBValueReceived = 0xff;
|
||||||
const Range<int> allChannels { 1, 17 };
|
const Range<int> allChannels { 1, 17 };
|
||||||
|
|
||||||
|
template <typename Range, typename Value>
|
||||||
|
void mpeInstrumentFill (Range& range, const Value& value)
|
||||||
|
{
|
||||||
|
std::fill (std::begin (range), std::end (range), value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
MPEInstrument::MPEInstrument() noexcept
|
MPEInstrument::MPEInstrument() noexcept
|
||||||
{
|
{
|
||||||
std::fill_n (lastPressureLowerBitReceivedOnChannel, 16, noLSBValueReceived);
|
mpeInstrumentFill (lastPressureLowerBitReceivedOnChannel, noLSBValueReceived);
|
||||||
std::fill_n (lastTimbreLowerBitReceivedOnChannel, 16, noLSBValueReceived);
|
mpeInstrumentFill (lastTimbreLowerBitReceivedOnChannel, noLSBValueReceived);
|
||||||
std::fill_n (isMemberChannelSustained, 16, false);
|
mpeInstrumentFill (isMemberChannelSustained, false);
|
||||||
|
|
||||||
pitchbendDimension.value = &MPENote::pitchbend;
|
pitchbendDimension.value = &MPENote::pitchbend;
|
||||||
pressureDimension.value = &MPENote::pressure;
|
pressureDimension.value = &MPENote::pressure;
|
||||||
timbreDimension.value = &MPENote::timbre;
|
timbreDimension.value = &MPENote::timbre;
|
||||||
|
|
||||||
// the default value for pressure is 0, for all other dimension it is centre (= default MPEValue)
|
resetLastReceivedValues();
|
||||||
std::fill_n (pressureDimension.lastValueReceivedOnChannel, 16, MPEValue::minValue());
|
|
||||||
|
|
||||||
legacyMode.isEnabled = false;
|
legacyMode.isEnabled = false;
|
||||||
legacyMode.pitchbendRange = 2;
|
legacyMode.pitchbendRange = 2;
|
||||||
legacyMode.channelRange = allChannels;
|
legacyMode.channelRange = allChannels;
|
||||||
}
|
}
|
||||||
|
|
||||||
MPEInstrument::~MPEInstrument()
|
MPEInstrument::~MPEInstrument() = default;
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
MPEZoneLayout MPEInstrument::getZoneLayout() const noexcept
|
MPEZoneLayout MPEInstrument::getZoneLayout() const noexcept
|
||||||
|
|
@ -58,6 +61,23 @@ MPEZoneLayout MPEInstrument::getZoneLayout() const noexcept
|
||||||
return zoneLayout;
|
return zoneLayout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MPEInstrument::resetLastReceivedValues()
|
||||||
|
{
|
||||||
|
struct Defaults
|
||||||
|
{
|
||||||
|
MPEDimension& dimension;
|
||||||
|
MPEValue defaultValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
// The default value for pressure is 0, for all other dimensions it is centre
|
||||||
|
for (const auto& pair : { Defaults { pressureDimension, MPEValue::minValue() },
|
||||||
|
Defaults { pitchbendDimension, MPEValue::centreValue() },
|
||||||
|
Defaults { timbreDimension, MPEValue::centreValue() } })
|
||||||
|
{
|
||||||
|
mpeInstrumentFill (pair.dimension.lastValueReceivedOnChannel, pair.defaultValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MPEInstrument::setZoneLayout (MPEZoneLayout newLayout)
|
void MPEInstrument::setZoneLayout (MPEZoneLayout newLayout)
|
||||||
{
|
{
|
||||||
releaseAllNotes();
|
releaseAllNotes();
|
||||||
|
|
@ -65,6 +85,8 @@ void MPEInstrument::setZoneLayout (MPEZoneLayout newLayout)
|
||||||
const ScopedLock sl (lock);
|
const ScopedLock sl (lock);
|
||||||
legacyMode.isEnabled = false;
|
legacyMode.isEnabled = false;
|
||||||
zoneLayout = newLayout;
|
zoneLayout = newLayout;
|
||||||
|
|
||||||
|
resetLastReceivedValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
|
|
||||||
|
|
@ -376,6 +376,8 @@ private:
|
||||||
LegacyMode legacyMode;
|
LegacyMode legacyMode;
|
||||||
MPEDimension pitchbendDimension, pressureDimension, timbreDimension;
|
MPEDimension pitchbendDimension, pressureDimension, timbreDimension;
|
||||||
|
|
||||||
|
void resetLastReceivedValues();
|
||||||
|
|
||||||
void updateDimension (int midiChannel, MPEDimension&, MPEValue);
|
void updateDimension (int midiChannel, MPEDimension&, MPEValue);
|
||||||
void updateDimensionMaster (bool, MPEDimension&, MPEValue);
|
void updateDimensionMaster (bool, MPEDimension&, MPEValue);
|
||||||
void updateDimensionForNote (MPENote&, MPEDimension&, MPEValue);
|
void updateDimensionForNote (MPENote&, MPEDimension&, MPEValue);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue