Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Sign In with Twitter
  • Enabling send mode or selecting a track arms record on the selected track

    Ok, right you are.  I can duplicate.


    To remedy, you can open up the Base.py script and comment line 812 so that it looks like this:

    #self._setup_autoarm()

    Restart Live and you should be good to go!

    a




  • Mapping left and right faders and knobs when a Stepp-r is loaded

    Hey Mike, sorry I've been meaning to get back to you.  Try this:


    Create a new function, it should look like this:

    def translate_faders(self, chan):
    if FADER_BANKING:
    for fader in self._fader:
    fader.release_parameter()
    fader.set_channel(chan)
    fader.set_enabled(chan is 0)
    fader.force_next_send()
    if DIAL_BANKING:
    for dial in self._dial_right:
    dial.release_parameter()
    dial.set_channel(chan)
    dial.set_enabled(chan is 0)
    dial.force_next_send()
    for dial in self._dial_left:
    dial.release_parameter()
    dial.set_channel(chan)
    dial.set_enabled(chan is 0)
    dial.force_next_send()
    self.request_rebuild_midi_map()

    Around line 1179, you should see:

    self.assign_mixer_controls()

    Comment that, and right below it add your new function:

    #self.assign_mixer_controls()
    self.translate_faders(10)  

    10 is the channel that it will remap to, which is actually 11 since we're counting from 0

    Let me know if that gets you there ;)

    a

  • Modifying amounra Ohm control script for custom controller

    Hi all, I have build a custom controller with the brain2 and i m modifying amounra`s script.  I m no programmer.

    My system is: osx 10.9.2, Brain2, Live 9.1.2
    Until now i m able to communicate with the script, i have re size de "highlight clip trigger"  box AKA "redbox" to fit my controller (16x4), i can move it around. But i can't seem to understand how to assign the midi notes to the grid.  My controller has a matrix of 16x4 but i want a grid of 15x3 to have scene lunch and select track.
    Here is the button matrix part of the script: 

    session = SessionComponent(15, 3)

    session.name = 'Session_Control'

    session.set_track_bank_buttons(right_button, left_button)

    session.set_scene_bank_buttons(down_button, up_button)

    matrix = ButtonMatrixElement()

    matrix.name = 'Button_Matrix'

    scene_launch_notes = [31,47,63]

    scene_launch_buttons = [ ButtonElement(is_momentary, MIDI_NOTE_TYPE, 0, scene_launch_notes[index]) for index in range(3) ]

    #track_stop_buttons = [ ButtonElement(is_momentary, MIDI_NOTE_TYPE, index, 52) for index in range(8) ]

    for index in range(len(scene_launch_buttons)):

    scene_launch_buttons[index].name = 'Scene_'+ str(index) + '_Launch_Button'

    #for index in range(len(track_stop_buttons)):

    # track_stop_buttons[index].name = 'Track_' + str(index) + '_Stop_Button'

    #stop_all_button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, 0, 81)

    #stop_all_button.name = 'Stop_All_Clips_Button'

    #self._session.set_stop_all_clips_button(stop_all_button)

    #self._session.set_stop_track_clip_buttons(tuple(track_stop_buttons))

    #self._session.set_stop_track_clip_value(2)

    #button_notes = [15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]

    for scene_index in range(3):

    scene = session.scene(scene_index)

    scene.name = 'Scene_' + str(scene_index)

    button_row = []

    scene.set_launch_button(scene_launch_buttons[scene_index])

    #scene.set_triggered_value(2)

    for track_index in range(8):

    button = ButtonElement(is_momentary, MIDI_NOTE_TYPE, CHANNEL, (track_index * 3) + scene_index)

    button.name = str(track_index) + '_Clip_' + str(scene_index) + '_Button'

    Can someone point me in the right direction? Thanks in advance !

  • modifying remote scripts
    Hey Amounra,

    Thanks for the 411.  Still trying to wrap my mind around where to paste these bits.

    I assumed all this code belongs in Cntrlr.py

    I put the following in the import section:
    from _Framework.SubjectSlot import subject_slot, subject_slot_group

    I put the following:
        @subject_slot('value')
       def on_tempo_up_value(self, value):
          if value:
                self.song().tempo = min(self.song().tempo + 1, self.song().tempo.max)
        

      @subject_slot('value')
       def on_tempo_down_value(self, value):
            if value:
                self.song().tempo = max(self.song().tempo - 1, self.song().tempo.min)

    In this section:
    class Cntrlr(ControlSurface):

    As to the last part I was at a loss.  I would like to map the tempo +1 -1 buttons to two of the bottom 32 buttons, specifically the first two arm buttons (20 and 21).  In order to do this I first commented out the existing arm assigns in the following section:

    """here we assign the left side of our mixer's buttons on the lower 32 keys"""

    #self._button[index+4].set_on_value(ARM[self._rgb]) #set the arm color from the Map.py

    #self._mixer.channel_strip(index).set_arm_button(self._button[index+4]) #assign the arm buttons to our mixer channel strips

    Is this correct?  Is it also required that I comment out the deassign?

    I was not able to determine the syntax for the rest as it appears encoders are perhaps treated differently then buttons?  Can you indicate what code and precisely where to?  I get the feeling the assign and deassign code needs to be surgically placed without noob antics.

    Lastly I would also like to do the same thing for pitch +1 and -1.  Would the procedure be similar?  I realize pitch is attached to each clip and the controls would have to be context sensitive.

    Thanks for explaining Python to civilians.  I mightily appreciate it.

    Many thanks,
    .:pl

  • Base and Aftertouch...
    Hey A,

    Thanks for the link. Having some trouble getting it working. Everything I do just breaks the script totally. 

    Here's the layer 3 block from my base.py with the added lines:

    def _set_layer3(self, shifted = False):
    with self.component_guard():
    for pad in self._pad:
    pad.send_value(0, True)
    self._display_mode()
    self._deassign_all()
    self._send_midi(USERBUTTONMODE)
    for index in range(8):
    self._mixer.channel_strip(index).set_select_button(self._touchpad[index])
    self._touchpad[index]._descriptor = 'Select'
    self._touchpad[index].set_on_off_values(CHAN_SELECT, 0)
    self._mixer.master_strip().set_volume_control(self._fader[8])
    for button in self._button[4:8]:
    button.set_on_off_values(USERMODE, 0)
    self._user_mode_selector.set_enabled(True)
    self._assign_alternate_mappings(self._user_layer+12)
    self._send_midi(tuple([240, 0, 1, 97, 12, 61, 1, 1, 1, 1, 1, 1, 1, 1, 2, 247]))
    self._send_midi(tuple([191, 122, 72])) #turn local ON for CapFaders
    self._notify_descriptors()

    #self.set_chain_selector(self._user_mode_selector._mode_index)
    PAD_COLORS = (1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
    for pad in self._pad:
    pad.send_value(PAD_COLORS[self._pad.index(pad)], True)

    Can you clarify whether I am getting the indenting structure right, and whether the PAD_COLORS function should come before or after the #self.set.chain function? I've tried both with no luck so far.


  • modifying remote scripts

    Amounra,


    I took a closer look at the code. Documentation was super helpful.

    Applied suggestions successfully.

    For anyone interested:

    I figured out the Editor allows for easy swaps of note values.  So any of the 32 bottom buttons can be simply moved around.  With this graphic for reference:


    Swap em in any order you want.  Make sure that no matter the order, every number is represented in the ID range of 16-47.  Send to device then permasave.

    I wasn't able to get the 32 buttons moved predictably in the Map.py file.

    Few things have been rough on me:

    How to add incremental tempo to two buttons in my case for buttons 20 (up +1 bpm) and 36 (down -1 bpm).  I found this tutorial but I wasn't able to get it working right with the editor.


    In the editor I see an OUTPUT value but not cc.  The article above suggests that the same cc be assigned to both buttons followed by two values 0 and 127.  Can't figure this out in the editor any tips?

    I'm also looking to assign pitch +1 and -1 to two buttons based on what clip is selected.  Seems like the method above should do the same for pitch?  

    I also commented out the code associated with resetting returns in the main script to free up those 4 buttons for tempo and pitch.  Hope I didn't miss anything.

    #self._send_reset.set_buttons(tuple(self._button[index + 8] for index in range(4)))

    Tricky part for me is getting led on/off behavior in the script for both pitch and tempo buttons.

    Any help much appreciated.

    .:pl







      
  • Livid Code 2 - no led response

    I'm looking into this from my end, sorry for leaving you hanging.  You're setup is made more complicated by the fact that there are several semi-unique things going on;  not that it's "bad", but it takes a little extra effort to wrap my brain around what's happening here.


    The Codec script calls a factory reset when first loaded.  This could be messing things up for you.  You can disable it in the script by commenting line 391:

    #self._initialize_code()

    I've added a new flag to the Map.py file for this in my working version so that it can be more easily configured by the user, and I'll add it to the next published version.  Let me know if this clears things up for you.
  • Tweaking OhmModes - is this doable?
    Hey Rick,
    Totally doable, and not too complicated. To start with, you'll want to change that line to:
    self._mixer.channel_strip(column).set_send_controls(tuple([self._dial[column], self._dial[column + 4], self._dial[column + 8]]))
    You'll also need to remove the assignments that were originally made for the panning by commenting them:
    #self._mixer.channel_strip(column).set_pan_control(self._dial[column + 8])
    I think that's all that needs to be changed, but I'm not in a place to test it. Have a look at your log.txt file in Ableton's preferences (if you open it in Console on OSX, it will update each time there's an entry) to see if you are getting any errors, and I can help you out further if you need it.
    Cheers :)
    a