#!/usr/bin/env python3 """ Open Sound Control send/recieve daemon for Tascam Firewire control surface ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :copyright: Copyright (c) 2018 Scott Bahling This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program (see the file COPYING); if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA :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) status_bits = ((1, 16), (1, 16), (17, 32), (1, 16), (17, 32), (1, 16), (17, 32), (1, 16), (17, 32), ) class Fader(Button): def __init__(self, strip): name = 'Strip {} Fader'. format(strip.num) super().__init__(strip.console, name) self.strip = strip if self.strip.num == 0: self.addr = '/master/fader' else: self.addr = '/strip/fader' 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) @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) else: osc.client.send_message(self.addr, (self.strip.num, pos/1023)) def press(self): self.console.status_thread.add_callback(self) super().press() def release(self): self.console.status_thread.remove_callback(self) super().press()