summaryrefslogtreecommitdiff
path: root/tascam_fw_console
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
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')
-rw-r--r--tascam_fw_console/buttons.py235
-rw-r--r--tascam_fw_console/cli.py4
-rw-r--r--tascam_fw_console/console.py64
-rw-r--r--tascam_fw_console/encoder.py25
-rw-r--r--tascam_fw_console/fader.py27
-rw-r--r--tascam_fw_console/fw_1884_buttons.py195
-rw-r--r--tascam_fw_console/osc.py15
-rw-r--r--tascam_fw_console/strip.py42
8 files changed, 200 insertions, 407 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))
diff --git a/tascam_fw_console/cli.py b/tascam_fw_console/cli.py
index 7db084b..2319ad9 100644
--- a/tascam_fw_console/cli.py
+++ b/tascam_fw_console/cli.py
@@ -28,9 +28,9 @@ Options:
-c CARD_NUM --card=CARD_NUM Number of the ALSA sound card
-d GUID --device=GUID GUID of the FW unit
-I IP --listen-ip=IP IP to listen on [default: 127.0.0.1]
- -P PORT --listen-port=PORT Port to listen on [default: 8000]
+ -P PORT --listen-port=PORT Port to listen on [default: 8100]
-i IP --ip=IP IP to communicate to [default: 127.0.0.1]
- -p PORT --port=PORT Port to communicate to [default: 3819]
+ -p PORT --port=PORT Port to communicate to [default: 9100]
"""
from docopt import docopt
diff --git a/tascam_fw_console/console.py b/tascam_fw_console/console.py
index ccf64af..3f4841a 100644
--- a/tascam_fw_console/console.py
+++ b/tascam_fw_console/console.py
@@ -27,7 +27,6 @@ from pathlib import Path
from tascam_fw_console.encoder import Encoder
from tascam_fw_console.strip import Strip
-from tascam_fw_console import osc
from tascam_fw_console import fw_1884_buttons
import gi
@@ -117,33 +116,35 @@ class Console():
self.current_bank = 1
self.more_banks_up = True
self.more_banks_down = True
- self.strips = self.init_strips()
+ self.init_strips()
self.buttons = {}
self.init_buttons()
self.init_encoder_mode()
self.init_encoders()
self.encoders = {
- 10: (self.strips[1].handle_encoder, self.strips[2].handle_encoder),
- 11: (self.strips[3].handle_encoder, self.strips[4].handle_encoder),
- 12: (self.strips[5].handle_encoder, self.strips[6].handle_encoder),
- 13: (self.strips[7].handle_encoder, self.strips[8].handle_encoder),
- 14: (self.handle_gain, self.handle_freq),
- 15: (self.handle_q, self.handle_jog),
+ 10: (self.strips[1].encoder.update, self.strips[2].encoder.update),
+ 11: (self.strips[3].encoder.update, self.strips[4].encoder.update),
+ 12: (self.strips[5].encoder.update, self.strips[6].encoder.update),
+ 13: (self.strips[7].encoder.update, self.strips[8].encoder.update),
+ 14: (self.gain_encoder.update, self.freq_encoder.update),
+ 15: (self.q_encoder.update, self.jogwheel.update),
}
+ self.unit.set_master_fader(False)
self.unit.connect('control', self.handle_control)
self.status_thread = RunningStatusThread(self) # noqa F841
def init_strips(self):
+ self.strips = []
for strip_num in range(0, 9):
self.strips.append(Strip(self, strip_num))
def init_encoders(self):
- self.gain_encoder = Encoder()
- self.freq_encoder = Encoder()
- self.q_encoder = Encoder()
- self.jogwheel = Encoder()
+ self.gain_encoder = Encoder('EQ Gain', '/eq/gain')
+ self.freq_encoder = Encoder('EQ Freq', '/eq/freq')
+ self.q_encoder = Encoder('EQ Q', '/eq/q')
+ self.jogwheel = Encoder('Jog', '/jogwheel')
def init_encoder_mode(self):
self.state['encoder_mode'] = 'PAN'
@@ -197,33 +198,6 @@ class Console():
else:
button.press()
- def handle_gain(self, mode, delta):
- print('Handle Gain:', mode, delta)
-
- def handle_freq(self, mode, delta):
- print('Handle Freq:', mode, delta)
-
- def handle_q(self, mode, delta):
- print('Handle Q:', mode, delta)
-
- def handle_jog(self, mode, delta):
- print('Handle Jog:', mode, delta)
- delta = delta * 0.5
- if self.buttons['ALT'].pressed:
- if delta > 0:
- osc.client.send_message('/access_action',
- 'Editor/temporal-zoom-in')
- else:
- osc.client.send_message('/access_action',
- 'Editor/temporal-zoom-out')
- return
-
- if self.buttons['SHIFT'].pressed:
- delta = delta * 0.3
- if self.buttons['CTRL'].pressed:
- delta = delta * 0.1
- osc.client.send_message('/jog', delta)
-
def handle_encoder(self, index, before, after):
handler1, handler2 = self.encoders.get(int(index), (None, None))
bval1 = before & 0xffff
@@ -234,16 +208,15 @@ class Console():
delta1 = roll_over_delta(aval1 - bval1)
delta2 = roll_over_delta(aval2 - bval2)
- encoder_mode = self.state.get('encoder_mode', '')
if delta1 and handler1:
- handler1(encoder_mode, delta1)
+ handler1(delta1)
if delta2 and handler2:
- handler2(encoder_mode, delta2)
+ handler2(delta2)
def handle_control(self, unit, index, before, after):
- print('{0:02d}: {1:08x} {2:08x}'.format(index, before, after))
+ # print('{0:02d}: {1:08x} {2:08x}'.format(index, before, after))
if index in [5, 6, 7, 8, 9]:
self.handle_bit_flags(index, before, after)
@@ -254,15 +227,12 @@ class Console():
return
def strip_fader_handler(self, addr, ssid, pos):
- print('fader_handler', addr, ssid, pos)
strip = self.strips[int(ssid)]
if strip.name == ' ':
return
- pos = pos * 1023
strip.fader.position = pos
def master_fader_handler(self, addr, pos):
- print('master_fader_handler', pos)
self.strip_fader_handler(addr, 0, pos)
def default_handler(self, addr, *args):
@@ -368,8 +338,6 @@ class Console():
def roll_over_delta(delta, ceiling=0xffff):
-
- print(delta)
if delta > ceiling - 10:
return delta - (ceiling + 1)
if delta < -ceiling + 10:
diff --git a/tascam_fw_console/encoder.py b/tascam_fw_console/encoder.py
index 211fef1..ae82234 100644
--- a/tascam_fw_console/encoder.py
+++ b/tascam_fw_console/encoder.py
@@ -20,22 +20,17 @@
:license: GPL-2.0, see COPYING for details
"""
+from tascam_fw_console import osc
+
class Encoder():
- def __init__(self):
- self.name = 'Unknown'
- self.update_callbacks = set()
+ def __init__(self, name, addr, strip=None):
+ self.name = name
+ self.addr = addr
+ self.strip = strip
def update(self, delta):
- print('Encoder: ', self.name, delta)
- for callback in self.update_callbacks:
- try:
- callback(delta)
- except Exception('Encoder update callback failed') as e:
- raise(e)
-
- def add_callback(self, callback):
- self.update_callbacks.add(callback)
-
- def remove_callback(self, callback):
- self.update_callbacks.remove(callback)
+ if self.strip:
+ osc.client.send_message(self.addr, (self.strip, delta))
+ else:
+ osc.client.send_message(self.addr, delta)
diff --git a/tascam_fw_console/fader.py b/tascam_fw_console/fader.py
index ab20eaa..0169322 100644
--- a/tascam_fw_console/fader.py
+++ b/tascam_fw_console/fader.py
@@ -20,7 +20,6 @@
:license: GPL-2.0, see COPYING for details
"""
-from tascam_fw_console.buttons import Button
from tascam_fw_console import osc
status_quadlets = (4, 0, 0, 1, 1, 2, 2, 3, 3)
@@ -36,38 +35,46 @@ status_bits = ((1, 16),
)
-class Fader(Button):
+class Fader():
def __init__(self, strip):
- name = 'Strip {} Fader'. format(strip.num)
- super().__init__(strip.console, name)
+ self.name = 'Strip {} Fader'. format(strip.num)
self.strip = strip
+ self.console = strip.console
if self.strip.num == 0:
self.addr = '/master/fader'
+ self.press_args = (self.strip.num, 1)
+ self.release_args = (self.strip.num, 0)
else:
self.addr = '/strip/fader'
+ self.press_args = (1,)
+ self.release_args = (0,)
self.status_quadlet = status_quadlets[self.strip.num]
self.status_bits = status_bits[self.strip.num]
self.status_callback = self.send_pos
@property
def position(self):
- return self.console.status.field(self.status_quadlet, *self.status_bits)
+ return self.console.status.field(self.status_quadlet,
+ *self.status_bits)
@position.setter
def position(self, pos):
self.console.unit.strips[self.strip.num].fader.set_position(pos)
def send_pos(self, pos):
- print('{}, ({}, {})'.format(self.addr, self.strip.num, pos/1023))
if self.strip.num == 0:
- osc.client.send_message(self.addr, pos/1023)
+ osc.client.send_message(self.addr, pos)
else:
- osc.client.send_message(self.addr, (self.strip.num, pos/1023))
+ osc.client.send_message(self.addr, (self.strip.num, pos))
def press(self):
+ addr = '{}_touch'.format(self.addr)
+ args = self.press_args + (1,)
+ osc.client.send_message(addr, args)
self.console.status_thread.add_callback(self)
- super().press()
def release(self):
+ addr = '{}_touch'.format(self.addr)
+ args = self.press_args + (0,)
+ osc.client.send_message(addr, args)
self.console.status_thread.remove_callback(self)
- super().press()
diff --git a/tascam_fw_console/fw_1884_buttons.py b/tascam_fw_console/fw_1884_buttons.py
index 44f3b60..6eea65d 100644
--- a/tascam_fw_console/fw_1884_buttons.py
+++ b/tascam_fw_console/fw_1884_buttons.py
@@ -74,74 +74,69 @@ def init_buttons(console):
None,
None,
None,
- buttons.StripSelButton(console, 'Strip 1 Sel', strips[1]),
- buttons.StripSelButton(console, 'Strip 2 Sel', strips[2]),
- buttons.StripSelButton(console, 'Strip 3 Sel', strips[3]),
- buttons.StripSelButton(console, 'Strip 4 Sel', strips[4]),
- buttons.StripSelButton(console, 'Strip 5 Sel', strips[5]),
- buttons.StripSelButton(console, 'Strip 6 Sel', strips[6]),
- buttons.StripSelButton(console, 'Strip 7 Sel', strips[7]),
- buttons.StripSelButton(console, 'Strip 8 Sel', strips[8]),
- buttons.StripSoloButton(console, 'Strip 1 Solo', strips[1]),
- buttons.StripSoloButton(console, 'Strip 2 Solo', strips[2]),
- buttons.StripSoloButton(console, 'Strip 3 Solo', strips[3]),
- buttons.StripSoloButton(console, 'Strip 4 Solo', strips[4]),
- buttons.StripSoloButton(console, 'Strip 5 Solo', strips[5]),
- buttons.StripSoloButton(console, 'Strip 6 Solo', strips[6]),
- buttons.StripSoloButton(console, 'Strip 7 Solo', strips[7]),
- buttons.StripSoloButton(console, 'Strip 8 Solo', strips[8]),
+ buttons.StripButton(console, 'Strip 1 Sel', 'strip/sel', 1),
+ buttons.StripButton(console, 'Strip 2 Sel', 'strip/sel', 2),
+ buttons.StripButton(console, 'Strip 3 Sel', 'strip/sel', 3),
+ buttons.StripButton(console, 'Strip 4 Sel', 'strip/sel', 4),
+ buttons.StripButton(console, 'Strip 5 Sel', 'strip/sel', 5),
+ buttons.StripButton(console, 'Strip 6 Sel', 'strip/sel', 6),
+ buttons.StripButton(console, 'Strip 7 Sel', 'strip/sel', 7),
+ buttons.StripButton(console, 'Strip 8 Sel', 'strip/sel', 8),
+ buttons.StripButton(console, 'Strip 1 Solo', 'strip/solo', 1),
+ buttons.StripButton(console, 'Strip 2 Solo', 'strip/solo', 2),
+ buttons.StripButton(console, 'Strip 3 Solo', 'strip/solo', 3),
+ buttons.StripButton(console, 'Strip 4 Solo', 'strip/solo', 4),
+ buttons.StripButton(console, 'Strip 5 Solo', 'strip/solo', 5),
+ buttons.StripButton(console, 'Strip 6 Solo', 'strip/solo', 6),
+ buttons.StripButton(console, 'Strip 7 Solo', 'strip/solo', 7),
+ buttons.StripButton(console, 'Strip 8 Solo', 'strip/solo', 8),
],
- 7: [buttons.StripMuteButton(console, 'Strip 1 Mute', strips[1]),
- buttons.StripMuteButton(console, 'Strip 2 Mute', strips[2]),
- buttons.StripMuteButton(console, 'Strip 3 Mute', strips[3]),
- buttons.StripMuteButton(console, 'Strip 4 Mute', strips[4]),
- buttons.StripMuteButton(console, 'Strip 5 Mute', strips[5]),
- buttons.StripMuteButton(console, 'Strip 6 Mute', strips[6]),
- buttons.StripMuteButton(console, 'Strip 7 Mute', strips[7]),
- buttons.StripMuteButton(console, 'Strip 8 Mute', strips[8]),
- buttons.EncoderButton(console, 'AUX5'),
- buttons.EncoderButton(console, 'AUX7'),
- buttons.EncoderButton(console, 'AUX6'),
- buttons.EncoderButton(console, 'AUX8'),
- None,
- None,
- None,
- None,
- buttons.Button(console, 'FLIP'),
- buttons.EncoderButton(console, 'AUX1'),
- buttons.EncoderButton(console, 'AUX3'),
- buttons.EncoderButton(console, 'PAN'),
- buttons.EncoderButton(console, 'AUX2'),
- buttons.EncoderButton(console, 'AUX4'),
- None,
- None,
- buttons.Button(console, 'Control Panel'),
- buttons.Button(console, 'F1'),
- buttons.Button(console, 'ALL SAFE'),
- buttons.Button(console, 'F5'),
- buttons.Button(console, 'CUT'),
- buttons.Button(console, 'COPY'),
- buttons.ModButton(console, 'ALT'),
- buttons.ModButton(console, 'SHIFT'),
+ 7: [buttons.StripButton(console, 'Strip 1 Mute', 'strip/mute', 1),
+ buttons.StripButton(console, 'Strip 2 Mute', 'strip/mute', 2),
+ buttons.StripButton(console, 'Strip 3 Mute', 'strip/mute', 3),
+ buttons.StripButton(console, 'Strip 4 Mute', 'strip/mute', 4),
+ buttons.StripButton(console, 'Strip 5 Mute', 'strip/mute', 5),
+ buttons.StripButton(console, 'Strip 6 Mute', 'strip/mute', 6),
+ buttons.StripButton(console, 'Strip 7 Mute', 'strip/mute', 7),
+ buttons.StripButton(console, 'Strip 8 Mute', 'strip/mute', 8),
+ buttons.Button(console, 'AUX5', 'encoders/aux5'),
+ buttons.Button(console, 'AUX7', 'encoders/aux7'),
+ buttons.Button(console, 'AUX6', 'encoders/aux6'),
+ buttons.Button(console, 'AUX8', 'encoders/aux8'),
+ None,
+ None,
+ None,
+ None,
+ buttons.Button(console, 'FLIP', 'encoders/flip'),
+ buttons.Button(console, 'AUX1', 'encoders/aux1'),
+ buttons.Button(console, 'AUX3', 'encoders/aux3'),
+ buttons.Button(console, 'PAN', 'encoders/pan'),
+ buttons.Button(console, 'AUX2', 'encoders/aux2'),
+ buttons.Button(console, 'AUX4', 'encoders/aux4'),
+ None,
+ None,
+ buttons.Button(console, 'Control Panel',
+ 'shortcuts/control_panel'),
+ buttons.Button(console, 'SAVE', 'shortcuts/save'),
+ buttons.Button(console, 'ALL SAFE', 'shortcuts/all_safe'),
+ buttons.Button(console, 'MARKER', 'shortcuts/marker'),
+ buttons.Button(console, 'CUT', 'shortcuts/cut'),
+ buttons.Button(console, 'COPY', 'shortcuts/copy'),
+ buttons.Button(console, 'ALT', 'shortcuts/alt'),
+ buttons.Button(console, 'SHIFT', 'shortcuts/shift'),
],
- 8: [buttons.Button(console, 'F2'),
- buttons.ClrSoloButton(console, 'CLR SOLO'),
- buttons.LoopButton(console, 'LOOP'),
- buttons.Button(console, 'DEL'),
- buttons.Button(console, 'PASTE'),
- buttons.Button(console, 'UNDO'),
- buttons.ModButton(console, 'CTRL'),
- buttons.Button(console, 'Foot Switch'),
- buttons.Button(console, 'Gain Enc A'),
- buttons.Button(console, 'Gain Enc B'),
- buttons.Button(console, 'Q Enc A'),
- buttons.Button(console, 'Q Enc B'),
+ 8: [buttons.Button(console, 'REVERT', 'shortcuts/revert'),
+ buttons.Button(console, 'CLR SOLO', 'shortcuts/clr_solo'),
+ buttons.Button(console, 'LOOP', 'shortcuts/loop'),
+ buttons.Button(console, 'DEL', 'shortcuts/del'),
+ buttons.Button(console, 'PASTE', 'shortcuts/paste'),
+ buttons.Button(console, 'UNDO', 'shortcuts/undo'),
+ buttons.Button(console, 'CTRL', 'shortcuts/ctrl'),
+ buttons.Button(console, 'Foot Switch', 'foot_switch'),
None,
None,
None,
None,
- buttons.Button(console, 'Freq Enc A'),
- buttons.Button(console, 'Freq Enc B'),
None,
None,
None,
@@ -149,45 +144,51 @@ def init_buttons(console):
None,
None,
None,
- buttons.ComputerButton(console, 'COMPUTER'),
None,
None,
- buttons.Button(console, 'CLOCK'),
- buttons.Button(console, 'ROUTE'),
+ None,
+ None,
+ None,
+ None,
+ buttons.Button(console, 'COMPUTER', 'computer'),
+ None,
+ None,
+ buttons.Button(console, 'CLOCK', 'clock'),
+ buttons.Button(console, 'ROUTE', 'route'),
None,
None,
],
- 9: [buttons.Button(console, 'F7'),
- buttons.Button(console, 'F8'),
- buttons.Button(console, 'F9'),
- buttons.Button(console, 'F10'),
- buttons.Button(console, 'READ'),
- buttons.Button(console, 'WRT'),
- buttons.Button(console, 'TCH'),
- buttons.Button(console, 'LATCH'),
- buttons.Button(console, 'HIGH'),
- buttons.Button(console, 'HI-MID'),
- buttons.Button(console, 'LOW-MID'),
- buttons.Button(console, 'LOW'),
- buttons.ArrowButton(console, 'UP'),
- buttons.ArrowButton(console, 'LEFT'),
- buttons.ArrowButton(console, 'DOWN'),
- buttons.ArrowButton(console, 'RIGHT'),
- buttons.Button(console, 'REC ENABLE'),
- buttons.NudgeButton(console, 'NUDGE LEFT', -1),
- buttons.NudgeButton(console, 'NUDGE RIGHT', 1),
- buttons.BankSwitchButton(console, 'BANK LEFT', -1),
- buttons.BankSwitchButton(console, 'BANK RIGHT', 1),
- buttons.Button(console, 'LOCATE LEFT'),
- buttons.Button(console, 'LOCATE RIGHT'),
- buttons.Button(console, 'SHTL'),
- buttons.Button(console, 'SET'),
- buttons.Button(console, 'IN'),
- buttons.Button(console, 'OUT'),
- buttons.TransportButton(console, 'REW'),
- buttons.TransportButton(console, 'F.FWD'),
- buttons.TransportButton(console, 'STOP'),
- buttons.TransportButton(console, 'PLAY'),
- buttons.TransportButton(console, 'REC'),
+ 9: [buttons.Button(console, 'F7', 'f7'),
+ buttons.Button(console, 'F8', 'f8'),
+ buttons.Button(console, 'F9', 'f9'),
+ buttons.Button(console, 'F10', 'f10'),
+ buttons.Button(console, 'READ', 'read'),
+ buttons.Button(console, 'WRT', 'write'),
+ buttons.Button(console, 'TCH', 'touch'),
+ buttons.Button(console, 'LATCH', 'latch'),
+ buttons.Button(console, 'HIGH', 'eq/high'),
+ buttons.Button(console, 'HI-MID', 'eq/hi_mid'),
+ buttons.Button(console, 'LOW-MID', 'eq/low_mid'),
+ buttons.Button(console, 'LOW', 'eq/low'),
+ buttons.Button(console, 'UP', 'arrow_up'),
+ buttons.Button(console, 'LEFT', 'arrow_left'),
+ buttons.Button(console, 'DOWN', 'arrow_down'),
+ buttons.Button(console, 'RIGHT', 'arrow_right'),
+ buttons.Button(console, 'REC ENABLE', 'rec_enable'),
+ buttons.Button(console, 'NUDGE LEFT', 'nudge_left'),
+ buttons.Button(console, 'NUDGE RIGHT', 'nudge_right'),
+ buttons.Button(console, 'BANK LEFT', 'bank_left'),
+ buttons.Button(console, 'BANK RIGHT', 'bank_right'),
+ buttons.Button(console, 'LOCATE LEFT', 'locate_left'),
+ buttons.Button(console, 'LOCATE RIGHT', 'locate_right'),
+ buttons.Button(console, 'SHTL', 'shuttle'),
+ buttons.Button(console, 'SET', 'set'),
+ buttons.Button(console, 'IN', 'in'),
+ buttons.Button(console, 'OUT', 'out'),
+ buttons.Button(console, 'REW', 'transport_rew'),
+ buttons.Button(console, 'F.FWD', 'transport_ffwd'),
+ buttons.Button(console, 'STOP', 'transport_stop'),
+ buttons.Button(console, 'PLAY', 'transport_play'),
+ buttons.Button(console, 'REC', 'transport_rec'),
]
}
diff --git a/tascam_fw_console/osc.py b/tascam_fw_console/osc.py
index 2892168..46f6fc1 100644
--- a/tascam_fw_console/osc.py
+++ b/tascam_fw_console/osc.py
@@ -29,6 +29,19 @@ server = None
dispatcher = dispatcher.Dispatcher()
+class OSCClient(udp_client.SimpleUDPClient):
+ def __init__(self, ip, port):
+ super().__init__(ip, port)
+
+ def send_message(self, addr, args):
+ try:
+ print(addr, *args)
+ except Exception:
+ print(addr, args)
+
+ super().send_message(addr, args)
+
+
def init_dispatcher(console):
dispatcher.map("/loop_toggle", console.loop_toggle_handler)
dispatcher.map("/transport_stop", console.transport_stop_handler)
@@ -53,7 +66,7 @@ def init_dispatcher(console):
def init_client(ip, port):
global client
- client = udp_client.SimpleUDPClient(ip, port)
+ client = OSCClient(ip, port)
def init_server(ip, port, console):
diff --git a/tascam_fw_console/strip.py b/tascam_fw_console/strip.py
index fe7ca75..f472199 100644
--- a/tascam_fw_console/strip.py
+++ b/tascam_fw_console/strip.py
@@ -22,7 +22,6 @@
from tascam_fw_console.fader import Fader
from tascam_fw_console.encoder import Encoder
-from tascam_fw_console import osc
class Strip():
@@ -39,14 +38,13 @@ class Strip():
self._rec = False
self.pan = 0.5
self.trimdb = 0.0
- self.encoder = Encoder()
+ self.encoder = Encoder('Strip {}'.format(self.num),
+ '/strip/encoder',
+ self.num,
+ )
self.fader = Fader(self)
self.name = None
- self.encoder_handlers = {'PAN': self.send_pan,
- 'AUX1': self.send_trim,
- }
-
@property
def mute_led(self):
return self.console.unit.strips[self.num].mute_led
@@ -114,35 +112,3 @@ class Strip():
self.rec_led.turn_on()
else:
self.rec_led.turn_off()
-
- def send_pan(self, delta):
- addr = '/strip/pan_stereo_position'
- pan = self.pan + delta * 0.02
- if pan < 0:
- pan = 0
- if pan > 1.0:
- pan = 1.0
- osc.client.send_message(addr, (self.num, pan))
-
- def recv_pan(self, pan):
- print('Pan: {} {}'.format(self.num, pan))
- self.pan = pan
-
- def send_trim(self, delta):
- addr = '/strip/trimdB'
- trimdb = self.trimdb + delta * 0.5
- if trimdb < -20:
- trimdb = -20
- if trimdb > 20:
- trimdb = 20
- osc.client.send_message(addr, (self.num, trimdb))
-
- def recv_trim(self, trimdb):
- print('TrimdB: {} {}'.format(self.num, trimdb))
- self.trimdb = trimdb
-
- def handle_encoder(self, mode, delta):
- self.encoder_handlers.get(mode, self.default_encoder_handler)(delta)
-
- def default_encoder_handler(self, delta):
- print(delta)