Howdy, Stranger!

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

Sign In with Twitter

CNTRL:R Scene Launch

edited November -1 in Hardware
Howdy, I'm trying to figure out how to get Ableton to show a "Scene Launch" button on the CNTRL:R within the red window frame. Any ideas?

Comments

  • I'm not sure what you're trying to do: are you using a MIDI Remote Script, or are you trying to User Map it? (presumably with scripting, since you won't get the "red box" any other way....)

    a
  • Well, I'd prefer to use the Remote Script so I can take advantage of all the regular functionality. However, there's no scene-launch functionality built in. It's possible to map a button to Ableton's Scene Launch (visible in learn-mode above the main volume), but that doesn't follow the red box... it only applies to the selected row/scene, which is often outside of the red box.

    I could make a rudimentary script with modern.dj/app that'll allow for red-box-scene-launch buttons, but if I do that I'll lose all the other great functions that are in the native Remote Script.

    I'm thinking, since the OhmModes script has red-box-scene-launch in it, that I might be able to steal some lines from there and put it in the CNTRL:R Remote Script, but I'm not sure where to look. The coding language is VERY different between Livid's scripts and the modern.dj scripts.
  • You may have noticed this post here:

    http://blog.lividinstruments.com/forum/topic.php?id=2412

    I'm trying to centralize some of these questions. Basically, everything that I've written in those posts applies to your situation, you'll need to do basically the same things. Since the CNTRLR script has no modes, and was written with the OhmModes script as its base, the style that they are written in is mostly the same; it should be easier to sort things out with it. Have a read, and I'll try to help you out with specifics when I have more time later.

    a
  • My god, thank you man! This is exactly what I was looking for. I'll dig into this asap and get back to you.
  • Alright, I'm jumping into this.

    What I can tell is that the CNTRL:R is split into a few elements: fader, dial_left, dial_right, encoder, encoder_button, grid, and button.

    Here are the possible goals. I'm not sure which will be the most functional for live performance, but I'll start with the easiest.

    Goal: Add 4 scene-launch buttons that follow the red box.

    A few ways to do this:

    Option 1) Reduce the grid to 3 columns and 4 rows. The 4th column being the scene-launch.
    Option 2) Keep the grid as-is, and assign 4 scene-launch buttons to the button matrix (32), preferably replacing the track-select (set_select_button) row.
    Option 3) Reveal scene-launch controls in the grid during zoom.

    From a performance stance, I think the best option is #3, but I'm not sure how many things need to be changed.

    I'm digging in. So far, I can't even get the script to run by simply changing the size of the grid. I've got a gig tomorrow and probably won't be able to sort this out before then unless I'm lucky. However, I'll be tinkering on the plane. remotescripts.blogspot.com is proving to be VERY informative. Kudos.
  • #3 wouldn't be hard to do, really, you just need to modify the size of the ButtonMatrixElement that is assigned to the zoom. BUT: the only way that that shift is called in the ZoomComponent is internally, and you'd need to either override that whole component, or create a (more complicated) closure replacement. So, I don't recommend it as your first adventure ;)

    But #2 is pretty simple, if you can do without the track selects. You just need to replace track select assignment:

    `
    self._button[index+20].set_on_value(SELECT[self._rgb])
    self._mixer.channel_strip(index).set_select_button(self._button[index+20])
    `
    with one for the scenelaunch buttons:

    `self._scene[index].set_launch_button(self._button[index+20])`

    I'm pretty sure that's all you would need to do, but get back to me with questions, as I have to run for a while.

    a
  • Excellent! Works like a charm...

    I do have a lot of questions... Mostly I'm trying to figure out exactly how the individual controller CCs are laid out in the script. I see things like "index+20", and it makes me think there's a starting point defined, and then it counts out 20 places to the next range.... or something.

    Not entirely sure what 'index' refers to either. It seems like there's definitely an order in which the parts of the board are defined. For instance, I successfully shrank the redbox to 3x4, but then I lost all the bottom left navigation buttons. Almost like they got 'shifted' out of range of the board.

    Also foggy on how it defines the range. The "for index in range(#)" is what's got me confused. What does that reference?

    It's looking like I may have to just go ahead and learn a bit of raw python. I'm hoping it'll help, but most of these scripts are exclusively _Framework.
  • for index in range(number)

    for = a method for setting up recursive for loop.

    index = this is an arbitrary local variable, we are calling it index for convenience, but we could call it anything:

    for donuts in range(dunkin)

    (somebody mentioned donuts to me today....I guess it stuck)

    number = the number of recursions in the for loop.

    So, if we say:

    `
    for index in range(20):
    do_some_stuff(index)
    `
    We are telling the script to start a 'for loop', and each time the loop runs, the variable 'index' will be increased by 1. So the first time do_some_stuff() is called, it will be called with the index argument equal to 0, the next time 1, etc.

    There are two other things in there that are important, and even though this sort of recursive loop is used all the time in Python, it's really kind of an advanced piece of logic to break down if you don't know anything about programming:

    in = a way to reference all of the elements of an array.

    range() = returns an array from the arguments it's called with. If you said index(3, 20), you would get an array with all the numbers between 3 and 20, in order.

    Hope that helps :) FWIW, all of these functions are better described in the official Python docs, I'm just paraphrasing (and possibly incorrectly in places).

    You will, indeed, have to learn a bit of Python. But again, that parts not too hard. Just look up operator in Google, and you'll find some stuff giving examples and explanations. Honestly, that's how I learned this stuff.

    a
  • Hello amounra, can you explain to me step by step how you do this to access the script and change it? I'm having a hard time trying to find it and it would be very useful to me. Thanks


    But #2 is pretty simple, if you can do without the track selects. You just need to replace track select assignment:

    `
    self._button[index+20].set_on_value(SELECT[self._rgb])
    self._mixer.channel_strip(index).set_select_button(self._button[index+20])
    `
    with one for the scenelaunch buttons:

    `self._scene[index].set_launch_button(self._button[index+20])`
  • It's not really a straightforward affair, I'm afraid.  Ableton has been busy changing the core syntax of the scripts over the last several months, and that makes it rather difficult to figure out how to make the changes for myself, let alone tell others how. 


    I've made a simple change to the original script that replaces the sendReset buttons with sceneLaunch buttons instead, hopefully this will be sufficient for you for the time being.  Let me know if you have any trouble installing it, I've tested it with Live 9.1.1 and it appears to work fine:


    Cheers :)

    a

  • Ok thanks. Would be really helpful to have a stable script. But if you dont update Ableton there shouldnt be a problem right? 


    Can you show me how to download this to make it work with Ableton? How do I make the script run through Ableton? Sorry im beginner at this. 

    Thanks
  • Nice I got it to work! Ok so this means I should stick to 9.1.1 then. I play "live" with ableton as a performer. So I dont really use Ableton to produce so updating constantly Ableton wouldnt be a big problem for me. Also is it possible to give each other our emails. So whenever there is a new update you can send me a new script for that specific Ableton version? It would be nice. 


    Thanks :) 

Sign In or Register to comment.