Strip compressor/limiter DSP, add per-channel pre-fader gain, PFL/HP blend, LUFS metering from external port, MIDI gain binding
This commit is contained in:
@@ -95,6 +95,7 @@ class MidiEngine(QObject):
|
||||
mixer_solo = Signal(int, bool)
|
||||
mixer_pfl = Signal(int, bool)
|
||||
mixer_mic_on = Signal(int, bool)
|
||||
mixer_gain = Signal(int, float)
|
||||
master_control = Signal(str, float)
|
||||
master_volume = Signal(float)
|
||||
controller_connected = Signal(bool, str)
|
||||
@@ -286,6 +287,44 @@ class MidiEngine(QObject):
|
||||
elif action == 'mixer_mic_on':
|
||||
on = (value > 63) if not inv else (value < 64)
|
||||
self.mixer_mic_on.emit(target_id, on)
|
||||
elif action == 'mixer_gain':
|
||||
if is_rel and 1 <= value <= 63:
|
||||
prev = self._channel_volumes.get(f"gain_{target_id}", 1.0)
|
||||
new_val = min(2.0, prev + value * 0.02)
|
||||
self._channel_volumes[f"gain_{target_id}"] = new_val
|
||||
self.mixer_gain.emit(target_id, new_val)
|
||||
elif is_rel and 65 <= value <= 127:
|
||||
prev = self._channel_volumes.get(f"gain_{target_id}", 1.0)
|
||||
steps = value & 0x3F
|
||||
new_val = max(0.0, prev - steps * 0.02)
|
||||
self._channel_volumes[f"gain_{target_id}"] = new_val
|
||||
self.mixer_gain.emit(target_id, new_val)
|
||||
else:
|
||||
if midi_type == PITCH_BEND:
|
||||
scaled = (16383 - value if inv else value) / 16383.0
|
||||
else:
|
||||
scaled = (127 - value if inv else value) / 127.0
|
||||
scaled = scaled * 2.0 # map to 0-2 range
|
||||
self.mixer_gain.emit(target_id, scaled)
|
||||
elif action == 'mixer_gain':
|
||||
if is_rel and 1 <= value <= 63:
|
||||
prev = self._channel_volumes.get(f"gain_{target_id}", 1.0)
|
||||
new_val = min(2.0, prev + value * 0.02)
|
||||
self._channel_volumes[f"gain_{target_id}"] = new_val
|
||||
self.mixer_gain.emit(target_id, new_val)
|
||||
elif is_rel and 65 <= value <= 127:
|
||||
prev = self._channel_volumes.get(f"gain_{target_id}", 1.0)
|
||||
steps = value & 0x3F
|
||||
new_val = max(0.0, prev - steps * 0.02)
|
||||
self._channel_volumes[f"gain_{target_id}"] = new_val
|
||||
self.mixer_gain.emit(target_id, new_val)
|
||||
else:
|
||||
if midi_type == PITCH_BEND:
|
||||
scaled = (16383 - value if inv else value) / 16383.0
|
||||
else:
|
||||
scaled = (127 - value if inv else value) / 127.0
|
||||
scaled = scaled * 2.0 # map to 0-2 range
|
||||
self.mixer_gain.emit(target_id, scaled)
|
||||
elif action == 'master_control':
|
||||
knob = str(target_id)
|
||||
if is_rel and 1 <= value <= 63:
|
||||
|
||||
Reference in New Issue
Block a user