Skip to content

Commit 3767add

Browse files
Reduce MCU and QCON VU meter traffic when levels are low
If volume is <-60dB, only send updates on change. Reduces MIDI traffic when nothing musically important is happening.
1 parent 3d07dc0 commit 3767add

1 file changed

Lines changed: 67 additions & 11 deletions

File tree

reaper_csurf_integrator/control_surface_midi_widgets.h

Lines changed: 67 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,6 +1400,7 @@ class QConProXMasterVUMeter_Midi_FeedbackProcessor : public Midi_FeedbackProcess
14001400
double maxDB_;
14011401
int param_;
14021402
bool isClipped_;
1403+
int lastMidiValue_;
14031404

14041405
public:
14051406
virtual ~QConProXMasterVUMeter_Midi_FeedbackProcessor() {}
@@ -1466,10 +1467,27 @@ class QConProXMasterVUMeter_Midi_FeedbackProcessor : public Midi_FeedbackProcess
14661467
int midiValue = GetMidiMeterValue(value);
14671468
if (isClipped_) midiValue = 0x0E; // red clip LED
14681469

1469-
WindowsOutputDebugString(
1470-
"QConProXMasterVUMeter_Midi_FeedbackProcessor: 0xd1, 0x%02x\n",
1471-
(param_ << 4) | midiValue);
1472-
SendMidiMessage(0xd1, (param_ << 4) | midiValue, 0);
1470+
double dbValue = VAL2DB(normalizedToVol(value));
1471+
1472+
if (dbValue < -60.0)
1473+
{
1474+
if (midiValue != lastMidiValue_)
1475+
{
1476+
WindowsOutputDebugString(
1477+
"QConProXMasterVUMeter_Midi_FeedbackProcessor: 0xd1, 0x%02x\n",
1478+
(param_ << 4) | midiValue);
1479+
SendMidiMessage(0xd1, (param_ << 4) | midiValue, 0);
1480+
lastMidiValue_ = midiValue;
1481+
}
1482+
}
1483+
else
1484+
{
1485+
WindowsOutputDebugString(
1486+
"QConProXMasterVUMeter_Midi_FeedbackProcessor: 0xd1, 0x%02x\n",
1487+
(param_ << 4) | midiValue);
1488+
SendMidiMessage(0xd1, (param_ << 4) | midiValue, 0);
1489+
lastMidiValue_ = midiValue;
1490+
}
14731491
}
14741492

14751493
virtual void ForceValue(const PropertyList &properties, double value) override
@@ -1500,7 +1518,21 @@ class QConProXMasterVUMeter_Midi_FeedbackProcessor : public Midi_FeedbackProcess
15001518
int midiValue = GetMidiMeterValue(value);
15011519
if (isClipped_) midiValue = 0x0E; // red clip LED
15021520

1503-
ForceMidiMessage(0xd1, (param_ << 4) | midiValue, 0);
1521+
double dbValue = VAL2DB(normalizedToVol(value));
1522+
1523+
if (dbValue < -60.0)
1524+
{
1525+
if (midiValue != lastMidiValue_)
1526+
{
1527+
ForceMidiMessage(0xd1, (param_ << 4) | midiValue, 0);
1528+
lastMidiValue_ = midiValue;
1529+
}
1530+
}
1531+
else
1532+
{
1533+
ForceMidiMessage(0xd1, (param_ << 4) | midiValue, 0);
1534+
lastMidiValue_ = midiValue;
1535+
}
15041536
}
15051537
};
15061538

@@ -1572,9 +1604,21 @@ class MCUVUMeter_Midi_FeedbackProcessor : public Midi_FeedbackProcessor
15721604
int midiValue = GetMidiValue(properties, value);
15731605
if (isClipped_) midiValue = GetClipLedValue();
15741606

1575-
SendMidiMessage(0xD0,
1576-
(channelNumber_ << 4) | midiValue,
1577-
0);
1607+
double dbValue = VAL2DB(normalizedToVol(value));
1608+
1609+
if (dbValue < -60.0)
1610+
{
1611+
if (midiValue != lastMidiValue_)
1612+
{
1613+
SendMidiMessage(0xD0, (channelNumber_ << 4) | midiValue, 0);
1614+
lastMidiValue_ = midiValue;
1615+
}
1616+
}
1617+
else
1618+
{
1619+
SendMidiMessage(0xD0, (channelNumber_ << 4) | midiValue, 0);
1620+
lastMidiValue_ = midiValue;
1621+
}
15781622
}
15791623

15801624
virtual void ForceValue(const PropertyList& properties, double value) override
@@ -1608,9 +1652,21 @@ class MCUVUMeter_Midi_FeedbackProcessor : public Midi_FeedbackProcessor
16081652
int midiValue = GetMidiValue(properties, value);
16091653
if (isClipped_) midiValue = GetClipLedValue();
16101654

1611-
ForceMidiMessage(0xD0,
1612-
(channelNumber_ << 4) | midiValue,
1613-
0);
1655+
double dbValue = VAL2DB(normalizedToVol(value));
1656+
1657+
if (dbValue < -60.0)
1658+
{
1659+
if (midiValue != lastMidiValue_)
1660+
{
1661+
ForceMidiMessage(0xD0, (channelNumber_ << 4) | midiValue, 0);
1662+
lastMidiValue_ = midiValue;
1663+
}
1664+
}
1665+
else
1666+
{
1667+
ForceMidiMessage(0xD0, (channelNumber_ << 4) | midiValue, 0);
1668+
lastMidiValue_ = midiValue;
1669+
}
16141670
}
16151671

16161672
protected:

0 commit comments

Comments
 (0)