🔥 Lifetime deal! Get Control Surface Studio for Just £67 👉 Click Here To Get It
Time left... mailtimers.com
⚠️ Lifetime licenses are ending soon, get yours before they're gone ⚠️
Your shopping cart is empty.

arm record & sessionbox

Submitted by theocarpentier123@gmail.com on Sat, 02/26/2022 - 13:12
theocarpentier123@gmail.com
Control Surface Studio User

Hello,

I have a footcontroller with 6 buttons (Blackstar Live Logic) that I linked to the sessionbox (1 scene x 6 tracks), and another controller one to navigate this box.
I would like that when I press one of these buttons mapped to the sessionbox, that it starts immediately to record (so also arm that specific track and unarm the other ones). I tried myself to make a script where the track gets armed when I push one of the sessionbox control buttons, but it doesn't work.
When I try with Track Selector it is not armed when it should be and it arms when it shouldn't.
With I use the Reactions nothing really seems to happen.

Attached you can find my script.
If somebody could have a look and find out what I did wrong, I would be very grateful!

Thanks,
Theo

upload files: 
Topic Category: 

10 Responses

Comments

Wim
Control Surface Studio User
#1

Hello Theo,
The Blackstar Live Logic looks stunning!
I checked your script and saw that you were almost there..
I changed/added two things:

  • I added "Session Record" to the script, assuming you work in session view
  • I added a "Reaction" that unarms all tracks when the script is loaded (you didn't set the loop function in your script)

Now when you press for instance 'Button 4', track 4 will record immediately. Press 'Button 4' again to stop recording and the loop will play. Now press 'Button 2' and Track 2 will record, press 'Button 2' again to stop recording, and so on.
Attached here is the code.
Hope this is what you wanted.
Greetings

theocarpentier123@gmail.com
Control Surface Studio User
#2

Hello,

Thank you for you answer, it was very helpful for me!!

The only thing that doesn't looks to work properly yet is that I sometimes have no time to push button 1 to stop track 1 recording ánd push button 2 to start track 2 recording. If I immediately push button 2 it also works, but track 1 is still armed. The problem occurs when I come back to track 1 to record another clip in that track: when I push button 1 it UNarms the track and from that moment the trackarming and cliptriggering are opposite of eachother, so are never triggered together.

Is there an option to have maximum 1 track armed and automatically unarms track 1 when I hit the record button of another track?

Attached you can find my script of Softstep 2 (button 1-10) and Blackstar (button 11-16) together. Blackstar is for triggering the tracks, Softstep will be for navigation and other commands.

Thanking you in advance,
Theo

upload files: 
Wim
Control Surface Studio User
#3

Hi Theo,
An easy and quick way to do that would be to add a 'Reaction' for each Button which unarms all other tracks than the one you selected.
For instance a 'Reaction' that unarms all tracks accept 'Track 1'

  • Insert a 'Reaction' called 'Unarm when recording Track 1 stops'
  • Listener: button 1 was pressed
  • Loop: Tracks ==> 'self.song().tracks''
  • Condition: 'loop - iteration number' --> '(Number) is not equal to' --> '0' ==> 'loop_number != 0' (Edit: the 0 stands for Track 1, for the next 'Reaction' you will have to put 1 here which stands for Track 2
  • Action: 'Track - Set Arm' (Tracks: 'Track' -> Track Number: 'loop - iteration number') --> 'False' ==> 'self.song().tracks[loop_number].arm = False'

'
Do this for each Track (6 in total)
When it works the way you want, you can later streamline the code and maybe use a modifier.

I do want to warn you that it is not good practice to join 2 hardware controllers in 1 script. They may send conflicting data at one point in time. That is not something you want during a show!
It is best to make another script for Softstep 2. Ableton can have up to 6 control surfaces.

Happy codings ;-)

theocarpentier123@gmail.com
Control Surface Studio User
#4

Hello,

Thanks again for your help!
I works already much better;)

At the moment I have still two questions that I would like to ask:

1) when I move the session box (6x1) to the right so it covers track 7-12 or 13-18, it doesn't work.
Probably because of the unarm reaction. When I use button 1 to trigger track 7, it unarms everything except track 1. What is the best way to solve this? Something like 'loop_number != 0 and 6 and 12 and 18' or is there a relative way to the sessionbox the write this, which is probably better?

2) For example when I am recording some melody in track 1 and the next phrase I want to record in track 2 without stopping playing, I only have to press button two in the bar before the new phrase (global quantization is 1 bar), which is really nice (previous post)!
The problem is that from the moment I hit button 2 it stops the Session record button immediately, so almost the whole last bar of the first phrase is never complete recorded. Is there a way to not stop to Session recording of track 1 till the very end before start recording track 2?

And thanks for the tip, I will make two separate scripts for them, but for now it is still in one.

Thank you,
Theo

upload files: 
Wim
Control Surface Studio User
#5

Hello Theo,

For simplicity and flexibility, it is easier to make a 'Reaction' for each footswitch. In that 'Reaction' you can check if the Session Box has 'moved' or not. If not, switch 1 will represent Track 1. If changed Switch 1 will represent Track 7.

Now for question 2: You could leave Track 1 armed and then start recording Track 2. But that will lead to other problems, for instance, each time you record a track, all (previously) armed tracks will start recording too.
Also, Ableton doesn't know when to end a recording and start looping.

You can however beforehand set a number of beats (4 beats is a bar) to record After that amount of beats, the recording will stop. I made a script that records for 2 bars.
Here is the same problem, if you don't unarm the recorded track, Ableton will automatically start recording in the next available clip. You can try it out if you delete Action Block 1 (unarm all tracks) in the 'Reaction' "Unarm all Tracks and start recording Track 1 for X beats" and "Unarm all Tracks and start recording Track 2 for X beats"

The script will let you record in the first available slot till the end of the second bar, after that it will loop. Then you can record another track. You can alter the number of beats/bars, it is documented in the script. I only scripted for two footswitches, which will cover Track 1 or 7 and Track 2 or 8, depending on your Session Box.
The advantages are that you will have perfectly looped clips and it covers your Session Box. The disadvantage is that
you can't immediately switch tracks.

It kind of depends on what you find more important. Try it out and let us know what would work best.
;-)

theocarpentier123@gmail.com
Control Surface Studio User
#6

Hello,

Thanks again for your answer!

The select and arm mapping relative to the sessionbox works great!

1) In an earlier comment you recommended me to work with 2 different scripts for 2 different controllers.
I tried to map that my Blackstar is mapped to the control buttons in the sessionbox and that my softstep controls the Sessionbox Navigation. I enabled the combination mode, but however, the script of my softstep gives an error when I don't map buttons to the sessionbox in that script. But I don't want to map buttons from my softstep to the sessionbox itself. Is there something I miss, or how should I approach this issue?

2) regarding your last response: It is not really an option for me to put in my script already how long each track will record and as you said, leaving everything armed gives problems later...
But I was thinking, isn't there a way to delete the first action 'Unarm all tracks after button X' of my Reaction that is in my current script. And make a new Reaction that unarms other tracks when new clip slot is recording. So it is triggered only ON the next first beat and unarms the previous track really on the beat, and not when I press the button.
Is there a way to use a listener that only triggers when new clip slot is recording, or something similar that happens exactly at that time?

Thank you in advance,
Kind regards,
Theo

upload files: 
Wim
Control Surface Studio User
#7

Hello Theo,
Great to hear you are getting the hang of it!
Let's see.

  • Issue 1:
    • Yes, whenever you use a SessionBox, the code will expect some trigger buttons to be attached to it. You could try to add some 'ghost inputs' for 'fake triggering' the SessionBox but that is a very ugly hack. I will check if there can be a solution for this.
    • The reason I said it is good practice to make a script per device is because:
      • it is easier to update a single script
      • Midi devices will conflict if both share the same note number or CC at the same channel
    • In your specific case however, the amount of different Midi inputs of your Midi devices is rather limited. If you make sure the "MIDI Message Settings" in your Controller Templates are all unique, then I would opt to put both controllers back in one script.
  • Issue 2:
    • Good thinking!There is no option for deleting an Action in a Reaction, but you could try and set a Condition in that same Action. Something like: Only Continue if... --> Clip - is recording --> (Bool) is equal to --> False
    • To answer the last part: you can try to add a Reaction with as a listener: "Song's session record status value has changed" (Live Object Model --> Song --> Session record status has changed).

    Let us know if you get any progress!
    Greetings

theocarpentier123@gmail.com
Control Surface Studio User
#8

Hello again!

Thank you for your answer!
Issue 1 is clear. Issue 2 still doesn't work. But maybe I am making it too difficult and thinking too much.

What I want is being able to:
-record in one clip of my sessionbox for X amount of time/bars
-pushing on a button (quantization is 1 bar, so have one bar to trigger the buttons that are needed to trigger)
-record in another clip of my sessionbox

I want to make sure that the first clip stays recording till the really end of the last bar (the bar where I trigger the button(s)) and on the next first beat the other clip starts recording.

This doesn't seem to me like a very difficult mapping, but somehow I am struggling with it a lot.

Could you help me to map the action I need to trigger for realizing what I described above?

Thanking you in advance,
Theo

ps. Attached is what I have now after messing around;)

upload files: 
Wim
Control Surface Studio User
#9

Hi Theo,

I will have a look!
Till soon.

Wim
Control Surface Studio User
#10

Hi Theo,
You wrote: "I want to make sure that the first clip stays recording till the real end of the last bar (the bar where I trigger the button(s)) and on the next first beat the other clip starts recording."
Well as far as I know (I might be wrong, please someone correct me if so) that is a problem for Ableton, if you don't set beforehand the length of the loop, Ableton will never be able to make a loop in sync with your song. Because whenever you stop recording, it will immediately start looping. Ableton won't wait till the end of the bar unless you tell it to.

Now there is a more flexible solution :-) and that is to use the looper instrument from Ableton.

I have written a script that will link your foot pedal to the 'Multi-Purpose Transport Button', so it does exactly what you want and even more.
The script, as it is now, is set for 2 footswitches (tracks 1-6-11 and 2-7-12), if you want to, you can expand to max 20 tracks, without loss of flexibility.

All you have to do is drag a looper device in each track, make sure it is the first device of the track (see picture).

The use of the looper is pretty straightforward, but if you google or youtube 'Ableton looper' you'll get heaps of info ;-)

Hope this works for you!
Kind regards