New Tool (3.2): PushyPushPush - Ableton Push 1 Integration

Hi all you cool people.

If anybody is stinking rich like me (joke), and has access to a Push 1, perhaps this will be of interest.

I’ve been tapping away a few evenings over the last week, getting the foundations set up for using Push to control Renoise.

So far, it’s working just as a demonstration of the building blocks. Very basic. There are four modes (which do nothing basically):
Sequencer is entered using the Note button
Matrix is entered using Session button
Instrument is entered with Device button
And Track is entered with, drumroll… The Track button!

You can start and stop Renoise from any of the modes, it defaults to restarting the pattern, but holding shift and pressing play will continue from current line.

The play button also reflects the playing status of Renoise.

If you hit the pads they light up red like the rose you gave to your first love.

The sequencer mode will show you the note of the first 8 lines of your pattern, extremely useful i think you’d agree. Leftmost pad is C, and on, etc.

If anybody has any ideas for things they would like to do to Renoise, using a Push to do them with, please chip in and let me know what comes to mind. I am aiming to make it quite functional, but not insane, as i hate having to hold loads of keys to get into modes etc. I just want a nice experience.

The code is horrible. I mean, truly terrible. It’s a shitload of table lookup to get things done. Lots of redundancy, inconsistent naming etc. I’m sure this will change. But basically am trying to write it to be portable, so that i can convert this work into a Reason Remote tool too.

Oh, and it should be able to run with both Ableton and Renoise at the same time. Not yet, but eventually. Cool huh.

The code is all on github here: GitHub - cupcake99/PushyPushPush

Code is now on bitbucket: Bitbucket
Github repo may fall behind so please migrate to bb with me…

And this is the tool in its current state:

PushyPushPush.xrnx (5.5 KB)

Bye bye.

1 Like

Fixed a crash at start-up if Push not connected. New version below should be safe to use. Still does nothing useful. But will do shortly.

PushyPushPush.xrnx (6.0 KB)

1 Like

Massive update pushed to the github page and new version below.

The tool now has a quite functional sequencer mode. It allows you to set and delete notes in (currently only) the first note column of a track by pressing a pad. Each line represents a pattern line. The playback line position can be manipulated by using the tempo dial or pressing the cursor up or down. Holding shift multiplies the movement by 10. You can set/delete a note for any line of the pattern visible on Push though, not just the edit/playback line.

The pads show notes entered in the first note column of the selected track. The track can be changed with the left and right cursor. If you try to enter a note on the master or send tracks it will probably crash the tool!

The lights for the notes are C-B on the pads in column 1-7 and note off is always the last pad of a row. If you hit an existing note light it will delete it from the pattern. The octave is fixed at the current octave setting of renoise. It will always delete a note whatever octave it’s in (hard to show this on the pads). Eventually sharps will be indicated somehow.
Mute button mutes the selected track. Play and record reflect and set the state of these controls in renoise.

Limited still, but heading somewhere i hope. If anybody has time to try it out i’d love some feedback and to know if it accidentally kills your computer and your dog.

More coming soon. pip pip x

lil.cupcake.PushyPushPush-v0.003.xrnx (8.3 KB)

1 Like

Fixed some bugs introduced by yesterday’s commit.

I realised that the drawing of sequences and note entry was strange on short patterns. All fixed now as far as i can tell. I changed the line movement to be on the Swing knob instead of Tempo (thinking tempo will be used to change patterns/sequence position). Introduced shitty brute force data thinning on the encoder values which are numerous and cause Renoise to yelp in pain.

Also, now the record button must be active to enter/change note data. You can change track via an encoder, and also now change instrument by encoder two. Also set master volume from the volume encoder.

Some naming rationalisation. Also blocked a few crash situations. Erm, probably other things i forgot.

New version with fixes: alpha alpha alpha alpaca - lil.cupcake.PushyPushPush-v0.003a.xrnx (9.0 KB)

1 Like

Spent the last two days heavily refactoring (i think that’s the right term) the code into a more object-oriented style. I didn’t need to have inheritance features or anything, and just wanted to have the Push object as a ‘top level domain’ under which the other objects live and communicate, so tried out an idea to initialise the sub-objects with a reference to the parent. To my surprise it worked! And i later found out this model of programming is called ‘composition’. So now i’m a composer…

Anyway, it works well, and i’m very pleased to have split the model into a more modular approach, with the Push object representing the physical device, a State object holding the state of Renoise and the interaction with the representation via the display and lights and such, Midi object to control the actual comms side of things, and a Mode object which can be easily modified to add different behaviours to the script/Push tool.

So now things are getting somewhere i think, maybe it’s possible to add a lot of functionality from here on in.

Todos include: adding more sensing of the Renoise song state and getting that into the model to be manipulated and displayed on the Push, and of course, bug hunting.

It’s still rudimentary, and i feel i’m shouting into the void a bit here as nobody has said anything, but it works so far, and that’s a lot of fun.

New version up on the github (code only) and here also as .xrnx:
lil.cupcake.PushyPushPush-v0.005.xrnx (11.9 KB)

very happy to see this! always loved my push 1 but never really got into ableton for full tunes. look forward to grabbing the WIP and seeing how it develops.

Thanks, if you have any ideas about features you’d like to see on the tool, do write them here and i’ll see if they can be added. I don’t want it to be complicated to use, but i’m sure everybody has different things they do in Renoise, and may see a way to use Push to do them.

Just had to do some nuclear bomb housekeeping and totally destroyed the history on the github repo. Sorry to anybody who has pulled it, please delete the old repo and start again. Nothing has changed in the source, but the history is now much cleaner and will be easier to maintain. Some weird shit was going on due to the esoteric mystery of git refs and whatnot.

this project completely slipped my mind but i just tried to dive in and fell at the first hurdle…

what’s the setup procedure? which mode does the push need to be in?

Hi hi,

Well, it should just work if Ableton isn’t running. Plug the Push into your computer, turn it on, and then open Renoise. There’s a loop that looks to connect to the Push, but it scans by name. So, thinking about this, it might be the case that the tool can’t find your Push if you are on Windows as i don’t know what name the Push gets in the Renoise MIDI devices on that OS. Maybe you could have a look and tell me? Just have a look under the normal MIDI device connection panel in the preferences and see what it’s calling it there.

I should change this at some point to do a scan by sysex id request. Will make it more robust. Am planning to implement proper User mode, so that Ableton and Renoise can use Push at the same time. It’s possible, but i just haven’t got to it yet. So far the tool is super basic. I am going to start work on it again this week. Got a bit bummed out around new year when i realised i couldn’t send MIDI notes to Renoise directly from the script, which makes editing patterns a bit useless, as you can’t audition the notes as they are entered.

If you’re confident to edit the tool just for yourself to make it work, then look for the variable ‘Push.device_name’ in push.lua. Change that to whatever Push is showing up as on your system. It has to be an exact string, including spaces and symbols. Then it should load.

BTW, there’s a bug in the last version on the github repo, i only fixed it the other day but haven’t pushed the fix yet. It will crash if you load/open a new project while using the PushyPushPush tool.

Here’s a Reeves and Mortimer clip to ease your troubles and wish you well on the way to PushyPushing!

i see your good vibrations and raise you a campachoochoo

thanks for the tip! you were bang on the money - in windows 10 the device name is simply “Ableton Push” and setting the ‘Push.device_name’ worked a treat. well, to a point!

once that was sorted my LCD pipes up with “Track 01 un-named Length:64” which is full of eastern promise - the un-named string even updates with the name of the current intrument but that seems to be the limit of it. no other lights or reponse from the play/note/session button. or pads for that matter. i’ll see if i can commandeer my other halfs swanky MBP and see what the story is on OSX, my appetite has been whetted now!

Hi! Glad to hear that got you somewhere. On a Mac the Push shows up as two separate ports: User Port and Live Port. If i only open the Live port in my tool i get exactly the behaviour you describe. When Push is being opened in “Live Mode” it doesn’t receive any data from other programs. Oddly enough the display can still be written to! Anyway, i am trying to write a fix for this, but as i don’t have a windows 10 machine i can’t tell what needs to be done exactly. Perhaps you can be my guinea pig and report findings back on my attempts to fix?

I have run out of internet and as all the libraries and cafes are shut, not sure how i can get online to push a new version on github. The fix is too long to post here. Will see what i can figure out.

Thanks for the Mortimer bite.

Ok, browsing the Ableton developer documents for the Push 2 which are on github, they say that there should be two MIDI ports available on windows for the Push. The one you found called ‘Ableton Push’, then another called ‘MIDIIN2 (Ableton Push)’. Does anything like that show up in the settings anywhere? It would also be the port that you’d select in Live to set Push to do remote control assignment over parameters.

I think a lot of the basic stuff is similar between the two versions of Push, but annoyingly they wont release dev docs for the original due to it using secret Akai sysex.

Hello again, thanks for looking into this for me! I’d say all Windowsers, but looks like it might be just us? Anyway… Yes I get the MIDIIN2 (Ableton Push) port showing as a MIDI input in the Renoise preferences, bang on again. Setting the device name to this in your tool gives a Push not found error, however if I set it as a midi input in the Renoise prefs I can get the pads to send notes, which is nice! Is there more I can do at this end or does it require some tweaks in the code to accommodate this other port?

Hard to say what’s going on really, but i have a new version i am going to push to github today which hopefully helps with the connection.

It’s tricky to get right without having a test machine here running the other OSs.

You don’t need to select that port in the preferences or anything, though at least it’s good to know it does something!

Hi muckleby, i’ve pushed the new version to the github repo. Please give it a whirl and see if it works. All being well it will auto-detect and connect your Push…

If you’re not sure how to load the update just replace all the lua files in your pushypushpush folder with the ones in the github repo. I haven’t packed it as an xrnx yet (not much point, but i can if you want).

sod it, here’s an xrnx if u need; forgot i wrote a packaging script to make my life easier!

lil.cupcake.PushyPushPush-v0.007.xrnx (12.9 KB)

ah you champ! appreciate the hand-holding there :joy:
sadly the auto detect is a no go on my machine though, behaviour is the same as the first version i tried before manually entering the device name - terminal throws up the cannot find push error

im gonna have a go on a mac n see what im missing tonight anyway!