Using Ableton Push 2 to control Live 9 and VJ software simultaneously

sameloop

2016-12-03 15:36:37

Hi. I'm having a few problems, as a new and not very mathematically minded user of MT Pro.

Here's the ideal setup I want to achieve:

Ableton Live 9 and Magic (VJ software) running simultaneously and both controlled by the Ableton Push 2. Magic is fully MIDI controllable and so I wish to have a setup where I can, for instance, have a knob controlling the filter on a synth and a parameter in a Magic module at the same time, to match visuals with sound, or hit a note that has a sample on it and change a picture etc.

Basically, I think I can achieve this with other controllers (for instance, my Novation Launchkey), but I want to use the Push, because it is a better piece of hardware for live use (I'll be gigging this eventually, with the visuals projected).

The Push (as you may know) has two operating modes, the standard one, which is full duplex link to Live 9 with all the functions and synced display, and the other is 'User Mode', which just lets it operate as a generic controller. I'd rather use it in the former mode, ideally, but if I had to use it in User Mode, it wouldn't be a massive issue, all I want is the aforementioned setup to work.

My problem with the Push is the rotary encoders. They are infinite, accelerated and touch sensitive and as well as transmitting continuous controller data, they transmit a note on at a fixed pitch when touched (and note off when released). I'm not sure of the reason for this, but there it is. Anyway, this seems to mean that unless you are using them in Live, they transmit only the note, plus a value of 1 or 127 when turned either way. I want them to behave like a standard absolute controller and without the note message.

I've read a couple of answers on here dealing with this type of thing, but I couldn't get them to work:

forums/viewtopic.php?t=2036

forums/viewtopic.php?f=3&t=3517

This is mainly because I have a hard time getting my head around the way the software works and having a clue what to troubleshoot if things don't work. I'm sure it's easy if you know how!

Anyway, I would be really, really grateful for any help as I'm going a bit insane!

All the best, Sam.

sameloop

2016-12-05 18:23:33

Ok, so with a bit of poking around, I'm getting tantalizingly close to a solution...

I've used this post to help me achieve partial success with the rotary encoders:

forums/viewtopic.php?t=2036

By partial, I mean I've got one of them to work when I turn it to the right (behaves perfectly as absolute controller), but when I turn it left it just outputs '1' as controller data instead of smoothly going down through 127 steps. I just can't work out what I've done wrong.

My other issue now is that all other MIDI data from the Push is muted apart from my half-done translator entry. I realise this is deliberate, but now I need all MIDI notes to transmit normally. I have set up a new translator to receive all MIDI notes, but in the outgoing section, it doesn't have the option of sending out all notes, just a fixed note or value.

I hope this makes sense - in a nutshell, I would like notes to work as normal and be received by whatever I'm outputting to and also for the rotary encoders to work as absolutes when turning both ways.

I'm seriously confused. Not as confused as I was, but still confused. I have done plenty of reading the manual and searching, by the way :)

If I wanted to upload what I've been doing here to show you, what is the best way - sending the whole project or exporting it as text?

Any help greatly appreciated, thanks.

sameloop

2016-12-06 19:47:31

More findings:

So this is the code I have entered (copied from the aforementioned post):

Code: Select all

if oo<=64 then ga=ga+oo
oo=oo-64
if oo>0 then ga=ga-oo
if ga>127 then ga=127
if ga<0 then ga=0
Still no progression as such, but I have discovered that if I turn the encoder left very slowly (after turning it right until maximum value 127 is reached), the value changes to 64, then after another very slight turn to the left, it drops to 1. I can kind of see what's happening; it's the "oo=oo-64" line that's subtracting 64 steps from whatever value turning to the right creates.

I'm just too stupid to work out the solution :?

I'm trying not to go insane, but it won't be long before I'm curled up on the floor weeping pathetically.

Please help a slow person!

Thanks.

sjcaldwell

2016-12-06 20:16:53

Not sure why you are always setting oo to oo-64. I think you might need an IF condition on that.

sameloop

2016-12-06 20:21:58

sjcaldwell wrote:Not sure why you are always setting oo to oo-64. I think you might need an IF condition on that.
You sound like you know what you're talking about - unfortunately I don't - any chance of elaborating on that, in a way that a toddler might understand :D

That code, by the way, is copied from this post:

forums/viewtopic.php?t=2036

Scroll a little way down. It seemed to be the answer, but obviously isn't!

Thanks for the reply, by the way.

sjcaldwell

2016-12-06 20:49:58

Well sorry for this but could you please re-explain in your own terms what you are trying to accomplish. I'm having trouble following the thread. Then I'll give it my best shot and if I can't solve it maybe someone else can. Who knows, they might even be able to beat me to it.

sjcaldwell

2016-12-06 21:21:37

Actually I think I get what you are trying to accomplish however the previous thread that you referenced seems to be for different midi controller. With Ableton Push 2, the logic might be different but the solution is somewhat over my head.

For input you have continuous controller with relative values depending on direction and speed of movement.
For output you want absolute value of 0 to 127

The following might help for someone that has done this before. It is what the Ableton Push 2 says it says for each cc.

I found the below HERE

Code: Select all

2.9. Encoders

The encoders, when turned, send the following MIDI control change messages:

Turn Right: 10110000 0nnnnnnn 00xxxxxx        [10110000 = 0xB0 = 176]
Turn Left:  10110000 0nnnnnnn 01yyyyyy
The controller number nnnnnnn (0…​127) corresponds to the encoder. See MIDI Mapping.

The value 0xxxxxx or 1yyyyyy gives the amount of accumulated movement since the last message. The faster you move, the higher the value.

The value is given as a 7 bit relative value encoded in two’s complement. 0xxxxxx indicates a movement to the right, with decimal values from 1 to 63 (in practice, values above 20 are unlikely). 1yyyyyy means movement to the left, with decimal values from 127 to 64.

The total step count sent for a 360° turn is approx. 210, except for the detented tempo encoder, where one turn is 18 steps.
Sorry, again it is somewhat over my head (for now anyway).

sjcaldwell

2016-12-06 22:52:29

Hmm looking at this again, it is unclear the values sent by the controller when moving to the left.

You might want to try this. Just in case the value decreases instead of increases as you go left. Just a thought and maybe worth a try.

Code: Select all

if oo<=64 then ga=ga+oo
oo=64-oo
if oo>0 then ga=ga-oo
if ga>127 then ga=127
if ga<0 then ga=0
Wish I had something to play with to test out my theory.

Also make sure you are not using ga elsewhere in your project file.

sameloop

2016-12-07 10:48:40

sjcaldwell wrote:Hmm looking at this again, it is unclear the values sent by the controller when moving to the left.

You might want to try this. Just in case the value decreases instead of increases as you go left. Just a thought and maybe worth a try.

Code: Select all

if oo<=64 then ga=ga+oo
oo=64-oo
if oo>0 then ga=ga-oo
if ga>127 then ga=127
if ga<0 then ga=0
Wish I had something to play with to test out my theory.

Also make sure you are not using ga elsewhere in your project file.
Hi. Well, thanks for your input - it's all helpful. Unfortunately, that second line change sent it a bit screwy! As per previous post, the code I have works perfectly for turning right, but turning left makes it move 64 steps at a time until it hits 1. So 2 steps basically from 127 turned fully right.

I'm confused as to which line I should use from 'capture MIDI' - the following is when I turn left:

Control Change on ch. 1 with CC#:71 (0x47) and value:127 (0x7F)
Control Change on ch. 1 with CC#:71 (0x47) set 'pp' to value

I am using the second one, as the first one just fixes it at 127.

I get this when turning right:

Control Change on ch. 1 with CC#:71 (0x47) and value:1 (0x01)
Control Change on ch. 1 with CC#:71 (0x47) set 'pp' to value

Again, I use the second line, otherwise it's just a fixed value and doesn't use the variable, which means the rules don't affect anything.

So whichever way I turn it, the capture value is the same. I tried making 2 translators for left and right, but since it's the same message, it doesn't make any difference.

I'm afraid this is where I'm stuck!

sjcaldwell

2016-12-07 14:30:35

sameloop wrote:...

Control Change on ch. 1 with CC#:71 (0x47) and value:127 (0x7F)
Control Change on ch. 1 with CC#:71 (0x47) set 'pp' to value
Try

Control Change on ch. 1 with CC#:71 (0x47) set 'oo' to value

On output use 'ga'

The code shows you are manipulating oo not pp and that the final output value is ga.

Go back to your original script

Code: Select all

if oo<=64 then ga=ga+oo
oo=oo-64
if oo>0 then ga=ga-oo
if ga>127 then ga=127
if ga<0 then ga=0

sameloop

2016-12-07 14:35:37

sjcaldwell wrote:
sameloop wrote:...

Control Change on ch. 1 with CC#:71 (0x47) and value:127 (0x7F)
Control Change on ch. 1 with CC#:71 (0x47) set 'pp' to value
Try

Control Change on ch. 1 with CC#:71 (0x47) set 'oo' to value

On output use 'ga'

The code shows you are manipulating oo not pp and that the final output value is ga.
Hi. Sorry, I forgot to say I have already changed it to 'oo' from the default 'pp', so still the same. :(

sjcaldwell

2016-12-07 15:19:09

OK, not much else I can do without having the hardware to test.

sjcaldwell

2016-12-07 15:48:28

It would be interesting to see the value of oo periodically as you move the controller. That is where I would focus my energy if I had the hardware.

sameloop

2016-12-07 16:14:24

sjcaldwell wrote:It would be interesting to see the value of oo periodically as you move the controller. That is where I would focus my energy if I had the hardware.
Sorry, but not quite sure what you mean - do you mean in the Log Window?

florian

2016-12-15 12:31:07

Hi sameloop,
any progress yet? otherwise, could you enable the Log Window in MT Pro (as you've guessed; all options enabled) and post the output here -- with explanation what works and what doesn't? Also, please attach your current project file.

Thanks,
Florian

sameloop

2016-12-15 17:22:51

florian wrote:Hi sameloop,
any progress yet? otherwise, could you enable the Log Window in MT Pro (as you've guessed; all options enabled) and post the output here -- with explanation what works and what doesn't? Also, please attach your current project file.

Thanks,
Florian
Hi. Thanks for the reply - yes, I'll do that.

No real progress - it's driving me a bit nuts, 'cos I know there's a solution (that someone like yourself could probably work out in 5 minutes!), but I just can't get my head around the code and general workings of MT Pro. Believe me, I've tried.

I'll post later with the log window and project file, and more info generally.

Thanks again and despite my problems, I can see that MT Pro is a brilliant piece of software (just bought it) and will be useful for all sorts of stuff.

florian

2016-12-19 09:30:44

Hi sameloop,
you're not alone! for many users, it takes some time to get used to MT Pro's way of thinking... That's why we (and other MT Pro users!) try hard to help everyone on the forum.
Florian

PS: thanks for purchasing MT Pro :)