def __init__(self, ctrl):
        self.track_offset = 0
        self.scene_offset = 0
        self._scenes = []
        self._control = ctrl
        self.mode = SCENE_MODE_NORMAL
        self.receives_notify = True
        self.control_handler = ControlHandler(ctrl, self)
        self.soloexclusive = True
        self.mutedsolo = False
        for index in range(16):
            self._scenes.append(SceneElement(index, self))

        self._control.song().view.add_selected_track_listener(self._sel_track_changed)
        self.active = False
Esempio n. 2
0
 def getdata(self):
     if (self.socket is not None):
         currentstr = ""
         #isbegin=False
         while (
                 1
         ):  #ToDo remove onetime buffer read and add dynamic reading.
             self.controlmessage = str(self.socket.recv(self.buffersize))
             self.handler = ControlHandler()
             changedcomponents = self.handler.insertcontrolmessage(
                 self.controlmessage)
             #ToDo send the changed components to shutdown thread and create new
             #print "Control deamon data updated"
             return changedcomponents
             #break;
     else:
         print "Sory Control deamon socket has an error"
    def __init__(self, ctrl):
        self.track_offset = 0
        self.scene_offset = 0
        self._scenes = []
        self._control = ctrl
        self.mode = SCENE_MODE_NORMAL
        self.receives_notify = True
        self.control_handler = ControlHandler(ctrl, self)
        self.soloexclusive = True
        self.mutedsolo = False
        for index in range(16):
            self._scenes.append(SceneElement(index, self))

        self._control.song().view.add_selected_track_listener(self._sel_track_changed)
Esempio n. 4
0
class DeamonClient:
    def __init__(self, inpport=1000, inpip="127.0.0.1"):
        print inpport, " ", inpip
        self.port = int(inpport)
        self.ip = inpip
        self.socket = None
        self.buffersize = 1024

    def connect(self):
        try:
            self.socket = socket.socket()
            self.socket.connect((self.ip, self.port))
            return True
        except:
            return False

    def getdata(self):
        if (self.socket is not None):
            currentstr = ""
            #isbegin=False
            while (
                    1
            ):  #ToDo remove onetime buffer read and add dynamic reading.
                self.controlmessage = str(self.socket.recv(self.buffersize))
                self.handler = ControlHandler()
                changedcomponents = self.handler.insertcontrolmessage(
                    self.controlmessage)
                #ToDo send the changed components to shutdown thread and create new
                #print "Control deamon data updated"
                return changedcomponents
                #break;
        else:
            print "Sory Control deamon socket has an error"

    def disconnect(self):
        if (self.socket is not None):
            self.socket.close()
            self.socket = None
class SceneMatrix:
    __module__ = __name__
    __doc__ = ' Special button class that can be configured with custom on- and off-values '

    def __init__(self, ctrl):
        self.track_offset = 0
        self.scene_offset = 0
        self._scenes = []
        self._control = ctrl
        self.mode = SCENE_MODE_NORMAL
        self.receives_notify = True
        self.control_handler = ControlHandler(ctrl, self)
        self.soloexclusive = True
        self.mutedsolo = False
        for index in range(16):
            self._scenes.append(SceneElement(index, self))

        self._control.song().view.add_selected_track_listener(self._sel_track_changed)
        self.active = False

    def notify_scene_mode(self, blinkstate):
        if self.receives_notify and self.active:
            num_scenes = len(self._scenes)
            for index in range(num_scenes):
                self._scenes[index].eval()
                self._scenes[index].notify(blinkstate)

    def mod_track_offset(self, delta):
        nr_of_tracks = len(self._control.song().tracks)
        newoffset = self.track_offset + delta * 16
        if newoffset > -1 and newoffset < nr_of_tracks:
            self.track_offset = newoffset
            self.show_track_control_message(nr_of_tracks)
            self.update()

    def mod_scene_offset(self, delta):
        scenes = self._control.song().scenes
        nr_of_scenes = len(scenes)
        newoffset = self.scene_offset + delta
        if newoffset > -1 and newoffset + 15 < nr_of_scenes:
            self.scene_offset = newoffset
            self.show_scene_control_message(nr_of_scenes)
            self.update()

    def show_scene_control_message(self, nr_of_scenes):
        self._control.show_message('Pads control Scenes ' + str(self.scene_offset + 1) + ' to ' + str(min(nr_of_scenes, self.scene_offset + 16)) + ' in Scene Mode')

    def show_track_control_message(self, nr_of_tracks):
        self._control.show_message('Pads control Tracks ' + str(self.track_offset + 1) + ' to ' + str(min(nr_of_tracks, self.track_offset + 16)))

    def _sel_track_changed(self):
        if self.mode == SCENE_MODE_SELECT:
            self.update()

    def in_main_mode(self):
        if self.mode == SCENE_MODE_NORMAL or self.mode == SCENE_MODE_CONTROL:
            return True
        return False

    def get_element(self, col, row):
        index = (3 - col) * 4 + row
        return self._scenes[index]

    def set_knob_mode(self, mode):
        self._control._master_knob._set_mode(KN2_MODE_GENERAL)

    def set_armsolo_exclusive(self, button):
        if self.soloexclusive:
            self.soloexclusive = False
            self._control.show_message(str('Exclusive Mode Arm/Solo Off'))
            button.send_value(0)
        else:
            self.soloexclusive = True
            self._control.show_message(str('Exclusive Mode Arm/Solo On'))
            button.send_value(100)

    def unbind(self):
        self._control.song().view.remove_selected_track_listener(self._sel_track_changed)
        num_scenes = len(self._scenes)
        for index in range(num_scenes):
            self._scenes[index].disable_color()
            self._scenes[index].force_value(0)
            self._scenes[index].unbind()

    def deassign(self):
        num_scenes = len(self._scenes)
        for index in range(num_scenes):
            self._scenes[index].set_launch_button(None)
            self._scenes[index].set_scene(None)
            self._scenes[index].set_track(None)
            self._scenes[index].eval()

    def assign(self):
        scenes = self._control.song().scenes
        tracks = self._control.song().tracks
        for index in range(16):
            tr_index = index + self.track_offset
            sc_index = index + self.scene_offset
            self._scenes[index].set_launch_button(self._control._button_sequence[index])
            if sc_index < len(scenes):
                self._scenes[index].set_scene(scenes[sc_index])
            else:
                self._scenes[index].set_scene(None)
            if tr_index < len(tracks):
                self._scenes[index].set_track(tracks[tr_index])
            else:
                self._scenes[index].set_track(None)
            self._scenes[index].eval()

    def set_mode(self, mode):
        self.mode = mode
        if self.mode == SCENE_MODE_NORMAL or self.mode == SCENE_MODE_STOP or self.mode == SCENE_MODE_CONTROL or self.mode == SCENE_MODE_XFADE:
            self.receives_notify = True
        else:
            self.receives_notify = False
        num_scenes = len(self._scenes)
        for index in range(num_scenes):
            self._scenes[index].assign_mode(mode)

        if mode == SCENE_MODE_CONTROL and self.control_handler.parm == None:
            trindex = self.control_handler.sel_track_parm_index
            track = self._control._mixer._channel_strips[trindex]._track
            if track != None:
                self.control_handler.track = track
                self.control_handler.reassign_mix_parm()
        self.update()

    def set_active(self, active):
        self.active = active

    def do_solo(self, track_index):
        if self.soloexclusive:
            tracks = self._control.song().tracks
            for index in range(len(tracks)):
                if index != track_index and tracks[index].solo:
                    tracks[index].solo = False

    def do_arm(self, track_index):
        if self.soloexclusive:
            tracks = self._control.song().tracks
            for index in range(len(tracks)):
                if index != track_index and tracks[index].can_be_armed and tracks[index].arm:
                    tracks[index].arm = False

    def eval_matrix(self):
        for index in range(16):
            self._scenes[index].eval()

    def fire_values(self):
        for index in range(16):
            self._scenes[index].set_value()

    def eval_control(self):
        nr_of_tracks = len(self._control.song().return_tracks)
        if self.control_handler.selected_sends_index >= nr_of_tracks:
            self.control_handler.selected_sends_index = nr_of_tracks - 1

    def setSelectedTrack(self, track):
        self._control.song().view.selected_track = track

    def getSelectedTrack(self):
        return self._control.song().view.selected_track

    def update_on_device(self, device):
        if self.mode == SCENE_MODE_CONTROL and self.control_handler.mode == CONTROL_DEVICE:
            self.control_handler.set_device(device)
            self.update()

    def update_on_device_parm_changed(self):
        if self.mode == SCENE_MODE_CONTROL and self.control_handler.mode == CONTROL_DEVICE:
            self.update()

    def disconnect(self):
        num_scenes = len(self._scenes)
        for index in range(num_scenes):
            self._scenes[index].disconnect()

        self.unbind()
        self._scenes = None
        self._control = None
        self.mode = None
        self.receives_notify = None
        self.control_handler.disconnect()
        self.soloexclusive = None
        self.mutedsolo = None

    def fix_track_offset(self, nr_of_tracks):
        while self.track_offset >= nr_of_tracks:
            self.track_offset -= 16

        self.show_track_control_message(nr_of_tracks)

    def fix_scene_offset(self, nr_of_scenes):
        while self.scene_offset + 15 >= nr_of_scenes and self.scene_offset > 0:
            self.scene_offset -= 1

        self.show_scene_control_message(nr_of_scenes)

    def update(self):
        if not self.active:
            return
        scenes = self._control.song().scenes
        tracks = self._control.song().tracks
        nr_of_tracks = len(tracks)
        nr_of_scenes = len(scenes)
        if self.track_offset < 0:
            self.track_offset = 0
        elif self.track_offset >= nr_of_tracks:
            self.fix_track_offset(nr_of_tracks)
        if self.scene_offset < 0:
            self.scene_offset = 0
        elif self.scene_offset + 15 >= nr_of_scenes:
            self.fix_scene_offset(nr_of_scenes)
        self.eval_control()
        for index in range(16):
            tr_index = index + self.track_offset
            sc_index = index + self.scene_offset
            if sc_index < nr_of_scenes:
                self._scenes[index].set_scene(scenes[sc_index])
            else:
                self._scenes[index].set_scene(None)
            if tr_index < nr_of_tracks:
                self._scenes[index].set_track(tracks[tr_index])
            else:
                self._scenes[index].set_track(None)
            self._scenes[index].eval()
            self._scenes[index].set_value()