ffont / push2-python

Utils to interface with Push2 from Python
MIT License
85 stars 19 forks source link

Good news about the Push 3 #9

Open SteveElbows opened 1 year ago

SteveElbows commented 1 year ago

Hi,

I have a Push 3 (standalone but can obviously still use it in controller mode).

I wanted to establish whether the display etc implementations are simillar to the Push 2. I used your code to do so. I changed the MIDI port names in your constants file to look for 3 in the names instead of 2, and changed the USB device ID to 0x1969 and your display example code worked on my Push 3!

ffont commented 1 year ago

Hi @SteveElbows,

This is amazing news! I have not had the possibility to get a Push3 although I'd like to get one in the future, but good to see that at least the basics of its interface have not changed. Would be nice to see for example how the pad's MPE stuff works. Also it would be great to see if in the future we can "hack" the included computer to run our own apps so Push becomes a fully programmable device. I guess this is science fiction at this point, but being able to interface with Push3 in a similar way as Push2 is already good news.

Thanks!

SteveElbows commented 1 year ago

Glad the news made you happy!

In regards MPE, it looks like the pads can be put in that mode using sysex similar to selecting channel or polyphonic aftertouch on the Push 2. There is also sysex for setting the expressive parameters of the pads when they are in MPE mode.

I havent actually tested the following sysex to make sure it works, so far I just got as far as sniffing it by monitoring communication between Live and Push 3:

Set pads to MPE mode: F0 00 21 1D 01 01 1E 02 F7 (same format as channel and poly pressure sysex in previous pushes, just a new value of 02 for MPE mode)

Enable per-pad pitch bend: F0 00 21 1D 01 01 26 07 08 02 00 F7 Disable per-pad pitch bend: F0 00 21 1D 01 01 26 07 08 00 00 F7

Set 'In tune' location to Finger: F0 00 21 1D 01 01 26 07 0E 01 00 F7 Set 'In tune' location to Pad: F0 00 21 1D 01 01 26 07 0E 00 00 F7

Set 'In Tune width':

F0 00 21 1D 01 01 26 07 14 vv 00 F7

Where vv is one of the following values:

0mm: 00 1mm: 04 2mm: 08 2.5mm: 0C 3mm: 10 4mm: 14 5mm: 18 6mm: 1C 7mm: 20 10mm: 30 13mm: 40 20mm: 60

Set 'Slide Height':

F0 00 21 1D 01 01 26 07 24 vv 00 F7

Where vv is one of the following values:

16mm: 13 15mm: 19 14mm: 20 13mm: 27 12mm: 2D 11mm: 34 10mm: 3B

Other values might do something too, in the above I just listed the values for the various mm options that are currently presented to users on that page of settings in the Push.

In terms of what MIDI is sent from the pads, it looks like standard MPE as per the MPE spec. I didnt check to see whether standard MPE config messages can be used to change the default piutch bend range (its probably defaulting to 48 which is a pretty standard value for MPE). Biggest complication will be if we want the playing surface to behave how it does in Live in terms of pads only showing the notes that are present in particular musical scales. Probably need to write all the code for that ourselves, with an additional complication compared to the previous Pushes: we'd also need to write our own code to process the pitch bend messages in a way that makes them actually bend to the next note in the chosen scale when the centre of the next pad is reached by a finger.

SteveElbows commented 1 year ago

As for the internal computer, fairly standard Linux by the looks of things. wifi connection helps too, eg might well be possible to ftp or ssh into it via wifi if someone figures out the security. Failing that, might be possible to do something by removing internal SSD and connecting it to another computer. None of this is stuff I will be trying!

ffont commented 1 year ago

Thanks for this information, I'll be looking into it if I manage to get a Push 3.

Biggest complication will be if we want the playing surface to behave how it does in Live in terms of pads only showing the notes that are present in particular musical scales.

I have built apps on top of push2-python that do these things (and many more!) with an effort to have a "standalone" Push midi controller (with Push+raspberry pi), but now with Push 3 standalone this will all be "solved". Nonetheless hacking devices is fun so let's see what we can do in the future with Push 3.