#!/usr/bin/env python3 """ Open Sound Control send/recieve daemon for Tascam Firewire control surface ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :copyright: Copyright (c) 2012-2014 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 buttons import Button 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, console, strip): name = 'Strip {} Fader'. format(strip.num) super().__init__(console, name) self.strip = strip self.pos = 0 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.pos @position.setter def position(self, pos): self.pos = pos self.console.unit.strips[self.strip.num].set_position(pos) def send_pos(self): osc.client.sent_message(self.addr, (self.strip, self.pos/1023)) def handle_console_status(self, pos): if pos != self.pos: print('{}: {}'.format(self.name, pos)) self.pos = pos self.send_pos() def press(self): self.console.status_thread.add_callback(self) super().press() def release(self): self.console.status_thread.remove_callback(self) super().press()