Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for S-Series MK2 speed-sensitive knobs #20

Merged
merged 4 commits into from
Jul 18, 2024
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions controller_definition.py
Original file line number Diff line number Diff line change
Expand Up @@ -301,22 +301,22 @@ def OnMidiMsg(self, event):
event.handled = True
# Increase
if nihia.mixer.KNOB_INCREASE_MIN_SPEED <= event.data2 <= nihia.mixer.KNOB_INCREASE_MAX_SPEED:
self.adjustMixer(event.data1 - nihia.mixer.knobs[0][0], "VOLUME", "INCREASE", mixer.trackNumber())
self.adjustMixer(event.data1 - nihia.mixer.knobs[0][0], "VOLUME", "INCREASE", mixer.trackNumber(), event.data2)

# Decrease
elif nihia.mixer.KNOB_DECREASE_MIN_SPEED >= event.data2 >= nihia.mixer.KNOB_DECREASE_MAX_SPEED:
self.adjustMixer(event.data1 - nihia.mixer.knobs[0][0], "VOLUME", "DECREASE", mixer.trackNumber())
self.adjustMixer(event.data1 - nihia.mixer.knobs[0][0], "VOLUME", "DECREASE", mixer.trackNumber(), event.data2)

# Shifted knobs (pan adjustment)
elif nihia.mixer.knobs[1][0] <= event.data1 <= nihia.mixer.knobs[1][7]:
event.handled = True
# Increase
if nihia.mixer.KNOB_INCREASE_MIN_SPEED <= event.data2 <= nihia.mixer.KNOB_INCREASE_MAX_SPEED:
self.adjustMixer(event.data1 - nihia.mixer.knobs[1][0], "PAN", "INCREASE", mixer.trackNumber())
self.adjustMixer(event.data1 - nihia.mixer.knobs[1][0], "PAN", "INCREASE", mixer.trackNumber(), event.data2)

# Decrease
elif nihia.mixer.KNOB_DECREASE_MIN_SPEED >= event.data2 >= nihia.mixer.KNOB_DECREASE_MAX_SPEED:
self.adjustMixer(event.data1 - nihia.mixer.knobs[1][0], "PAN", "DECREASE", mixer.trackNumber())
self.adjustMixer(event.data1 - nihia.mixer.knobs[1][0], "PAN", "DECREASE", mixer.trackNumber(), event.data2)

# Additional controller-dependent code
try:
Expand Down Expand Up @@ -418,7 +418,7 @@ def OnDirtyMixerTrack(self, index):
def OnUpdateMeters(self): # Intended to be declared by child
raise NotImplementedError()

def adjustMixer(self, knob: int, dataType: str, action: str, selectedTrack: int):
def adjustMixer(self, knob: int, dataType: str, action: str, selectedTrack: int, sensitivity: int = None):
""" Dynamically maps the physical knob to the right mixer track depending on the track group the selected track belongs to, and adjusts the parameter.
### Parameters

Expand All @@ -436,23 +436,26 @@ def adjustMixer(self, knob: int, dataType: str, action: str, selectedTrack: int)
# Multiplies the trackGroup to 8 to get the index of the first track of that group
trackFirst = trackGroup * 8

# Convert the sensitivity value received by the knob to be a normalized multiplier
sensitivity = abs(-1 / (sensitivity - 64))

if (trackGroup == 15) and (knob == 6 or knob == 7): # Control 15th group exception
return

else:
if dataType == "VOLUME":
if action == "INCREASE":
mixer.setTrackVolume(trackFirst + knob, mixer.getTrackVolume(trackFirst + knob) + config.KNOB_INCREMENTS_VOL)
mixer.setTrackVolume(trackFirst + knob, mixer.getTrackVolume(trackFirst + knob) + (config.KNOB_INCREMENTS_VOL * sensitivity))
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Offset should be config.KNOB_INCREMENTS_VOL * log(speed, 63) instead of config.KNOB_INCREMENTS_VOL * sensitivity. Same thing goes for decrement.


elif action == "DECREASE":
mixer.setTrackVolume(trackFirst + knob, mixer.getTrackVolume(trackFirst + knob) - config.KNOB_INCREMENTS_VOL)
mixer.setTrackVolume(trackFirst + knob, mixer.getTrackVolume(trackFirst + knob) - (config.KNOB_INCREMENTS_VOL * sensitivity))

elif dataType == "PAN":
if action == "INCREASE":
mixer.setTrackPan(trackFirst + knob, mixer.getTrackPan(trackFirst + knob) + config.KNOB_INCREMENTS_PAN)
mixer.setTrackPan(trackFirst + knob, mixer.getTrackPan(trackFirst + knob) + (config.KNOB_INCREMENTS_PAN * sensitivity))
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Offset should be config.KNOB_INCREMENTS_PAN * log(speed, 63) instead of config.KNOB_INCREMENTS_PAN * sensitivity. Same thing goes for decrement.


elif action == "DECREASE":
mixer.setTrackPan(trackFirst + knob, mixer.getTrackPan(trackFirst + knob) - config.KNOB_INCREMENTS_PAN)
mixer.setTrackPan(trackFirst + knob, mixer.getTrackPan(trackFirst + knob) - (config.KNOB_INCREMENTS_PAN * sensitivity))

def getUndoStatus(self):
""" Helper function to set the light on the UNDO button. """
Expand Down