summaryrefslogtreecommitdiff
path: root/tascam_fw_console/buttons.py
diff options
context:
space:
mode:
authorsbahling <sbahling@mudgum.net>2018-11-03 01:09:07 +0100
committersbahling <sbahling@mudgum.net>2018-11-03 01:09:07 +0100
commite9e1efefc87ce4dd942fa7c83794a7b27ec3a13c (patch)
tree00ded9a9e5b5460b8173505795ccc7568fc0ba2d /tascam_fw_console/buttons.py
parent7d490031c54458644eb459dbb390b10ea8de3334 (diff)
downloadtascam-fw-osc-e9e1efefc87ce4dd942fa7c83794a7b27ec3a13c.tar.gz
tascam-fw-osc-e9e1efefc87ce4dd942fa7c83794a7b27ec3a13c.tar.xz
tascam-fw-osc-e9e1efefc87ce4dd942fa7c83794a7b27ec3a13c.zip
Serve as base OSC server for the Tascam Console Unittascam_fw_console-0.2
We remove the Ardour specific OSC mapping and create our own OSC API that will be consumed by OSC translators that communicate to specific applications. We only send the state of each control and set the state of each fader or led based on received commands. Logic for interpreting the control state will be moved to the OSC translator code.
Diffstat (limited to 'tascam_fw_console/buttons.py')
-rw-r--r--tascam_fw_console/buttons.py235
1 files changed, 39 insertions, 196 deletions
diff --git a/tascam_fw_console/buttons.py b/tascam_fw_console/buttons.py
index 35448c3..df9bf0f 100644
--- a/tascam_fw_console/buttons.py
+++ b/tascam_fw_console/buttons.py
@@ -21,7 +21,6 @@
"""
import re
-import pyautogui
from tascam_fw_console import osc
@@ -42,209 +41,53 @@ re_strip_num = re.compile('.*([1-9])')
class Button():
- def __init__(self, console, name):
+ def __init__(self, console, name, addr):
self.name = name
- self.state = 0
+ self.pressed = False
+ self.enabled = False
self.console = console
+ self.press_callbacks = set()
+ self.release_callbacks = set()
+ self.addr = '/button/{}'.format(addr)
+ osc.dispatcher.map(self.addr, self.osc_handle)
def press(self):
- self.state = 1
- print('%s pressed' % self.name)
+ self.pressed = True
+ osc.client.send_message(self.addr, 1)
def release(self):
- self.state = 0
- print('%s released' % self.name)
-
- @property
- def pressed(self):
- if self.state:
- return True
- return False
-
-
-class EncoderButton(Button):
- def __init__(self, console, name):
- super().__init__(console, name)
-
- def press(self):
-
- encoder_mode = self.console.state.get('encoder_mode', None)
- print(encoder_mode)
- if encoder_mode == self.name:
- return
-
- self.state = 1
- if encoder_mode:
- self.console.unit.leds.turn_off(encoder_mode)
- self.console.state[encoder_mode] = 0
- self.console.unit.leds.turn_on(self.name)
- self.console.state['encoder_mode'] = self.name
- super().press()
-
-
-class StripSelButton(Button):
- def __init__(self, console, name, strip):
- super().__init__(console, name)
- self.strip = strip
- self.strip.select_button = self
-
- def press(self):
-
- strip = self.strip
- print('handle_strip_sel', strip)
- recenable = self.console.buttons.get('REC ENABLE', None)
- if recenable.pressed:
- if strip.rec:
- osc.client.send_message('/strip/recenable', (strip.num, 0))
- else:
- osc.client.send_message('/strip/recenable', (strip.num, 1))
- super().press()
-
-
-class StripMuteButton(Button):
- def __init__(self, console, name, strip):
- super().__init__(console, name)
- self.strip = strip
- self.strip.mute_button = self
-
- def press(self):
-
- strip = self.strip
- if strip.mute:
- strip.mute = False
- osc.client.send_message('/strip/mute', (strip.num, 0))
+ self.pressed = False
+ osc.client.send_message(self.addr, 0)
+
+ def osc_handle(self, addr, enable):
+ print(self.name)
+ if enable:
+ self.enabled = True
+ self.console.unit.leds.turn_on(self.name)
else:
- strip.mute = True
- osc.client.send_message('/strip/mute', (strip.num, 1))
- super().press()
-
-
-class StripSoloButton(Button):
- def __init__(self, console, name, strip):
- super().__init__(console, name)
- self.strip = strip
- self.strip.solo_button = self
+ self.enabled = False
+ self.console.unit.leds.turn_off(self.name)
+
+
+class StripButton(Button):
+ def __init__(self, console, name, addr, strip):
+ super().__init__(console, name, addr)
+ self.strip = console.strips[strip]
+ button = addr.split('/')[-1]
+ if button == 'sel':
+ self.strip.select_button = self
+ self.osc_handler = console.strip_select_handler
+ elif button == 'mute':
+ self.strip.mute_button = self
+ self.osc_handler = console.strip_mute_handler
+ elif button == 'solo':
+ self.strip.solo_button = self
+ self.osc_handler = console.strip_solo_handler
def press(self):
-
- strip = self.strip
- if strip.solo:
- strip.solo = False
- osc.client.send_message('/strip/solo', (strip.num, 0))
- else:
- strip.solo = True
- osc.client.send_message('/strip/solo', (strip.num, 1))
- super().press()
-
-
-class ArrowButton(Button):
- def __init__(self, console, name):
- super().__init__(console, name)
-
- def press(self):
- key = keymap.get(self.name.lower(), self.name.lower())
- pyautogui.press(key)
-
-
-class ModButton(Button):
- def __init__(self, console, name):
- super().__init__(console, name)
-
- def mod_button_press(self):
- key = keymap.get(self.name, None)
- if key is None:
- return
-
- pyautogui.keyDown(key)
- super().press()
+ self.pressed = True
+ osc.client.send_message(self.addr, (self.strip.num, 1))
def release(self):
- key = keymap.get(self.name, None)
- if key is None:
- return
-
- pyautogui.keyUp(key)
- super().release()
-
-
-class ComputerButton(Button):
- def __init__(self, console, name):
- super().__init__(console, name)
-
- def press(self):
- osc.client.send_message('/set_surface', (8, 7, 19, 1, 8, 11))
- super().press()
-
-
-class ClrSoloButton(Button):
- def __init__(self, console, name):
- super().__init__(console, name)
-
- def press(self):
- osc.client.send_message('/cancel_all_solos', 1)
- super().press()
-
-
-class LoopButton(Button):
- def __init__(self, console, name):
- super().__init__(console, name)
-
- def press(self, *args):
- if self.console.state.get('loop', 0):
- print('******* loop off')
- osc.client.send_message('/loop_toggle', 0)
- else:
- print('******* loop on')
- osc.client.send_message('/loop_toggle', 1)
- super().press()
-
-
-class TransportButton(Button):
- def __init__(self, console, name):
- super().__init__(console, name)
-
- def press(self):
- addr = osc_addrs.get(self.name, None)
- if addr:
- osc.client.send_message(addr, 1)
- super().press()
-
-
-class BankSwitchButton(Button):
- def __init__(self, console, name, direction):
- super().__init__(console, name)
- self.direction = direction
-
- def press(self):
-
- direction = self.direction
- more_up = self.console.more_banks_up
- more_down = self.console.more_banks_down
- print(direction, more_up, more_down)
- if direction > 0 and more_up:
- print('calling /bank_up 1')
- osc.client.send_message('/bank_up', 1)
- elif direction < 0 and more_down:
- print('calling /bank_down 1')
- osc.client.send_message('/bank_down', 1)
- super().press()
-
-
-class NudgeButton(Button):
- def __init__(self, console, name, direction):
- super().__init__(console, name)
- self.direction = direction
-
- def nudge_press(self):
- direction = self.direction
- print(direction)
- if direction > 0:
- osc.client.send_message('/access_action',
- 'Common/nudge-next-forward')
- else:
- osc.client.send_message('/access_action',
- 'Common/nudge-next-backward')
- super().press()
-
-
-NULLBUTTON = Button(None, None)
+ self.pressed = False
+ osc.client.send_message(self.addr, (self.strip.num, 0))