MPC X, MPC Live, MPC One & MPC Key 61 Forum: Support and discussion for the MPC X, MPC Live, MPC Live II, MPC One & MPC Key 61; Akai's current generation of standalone MPCs.
User avatar
By Ultros Thu Oct 28, 2021 1:01 am
So for the few of you who have my cfw installed...

Since the MPC lacks some force interface buttons here's some crap to help you. It's been almost a year and it seems people are still struggling and wondering how to get that last little bit functionality.

Midi controllers on channel 10 will let you play the drums. However they will NOT control the matrix or any transport controls. It will give you a way to have some drum pads ready on the matrix screen though. (I use an mpk mini play.) The mpc software expects your drum pads to be on channel 10. You can then tap a square in the matrix and bash away on the drum pad on your keyboard provided the pads are- again.. channel 10. you may need to fidgit with the mapping in the program set it to chromatic c2 or map the drum controller.

What to do when you're finished filling out the collumns and rows and how you turn that into an arrangement is done like so: Press shift overdub and then press the play buttons on the touch screen on the right side of the matrix. This will record your sequences to the arrangement without having to point and click your way through things in an agonizing manner.

Here's how to render the arrangement without the help of the control interface of the force. Head over to sampler, select resample l+r. next hit record on the screen and then hit the play start button on the mpc. When you are done head over to your sample pool and name the file whatever you want and then save the project. During the resampling process you have the option to use an fx chain if you wanna get fancy with tape stops and final processing.

That's about all you really need to have a pretty full akai force (3.0.6) experience on mpc, the rest of the functionality works fine. Though some of these work-arounds arent optimal, they are better than paying $1400 am i right?
User avatar
By zangetsu01 Mon Nov 01, 2021 6:59 pm
Hey, I finally did it but I haven't reached my goal yet.

I've managed to to connect the Launchpad pro to the spoofed midi channel to acces the Force menus on the MPC.
In short: Triggering the pads on the Launchpad will interact as if you press the native Force buttons.

To my surprise the buttons are actually just sending midi notes to the firmware to interact with it.

So a G#7 note launches the mixer.

I've followed the Kik Gen's tutorial to get it done but it wasn't easy to follow. I really appriciate him for his work because thanks to him and Ultros we are getting closer to a full fledged MPC Force.

This only works on a modded firmware (MPC+Force firmware) like the one of Ultros.

You can find it here:

https://www.mpc-forums.com/viewtopic.php?f=41&t=210347

What I did to get it to work was to download the following files on the Kik Gen's github:

tkgl_anyctrl.so

You can find it here:

https://github.com/TheKikGen/MPC-LiveXplore/tree/master/src/preload_libs

Put this file in the root of your memory stick and power on your MPC.

Use PuTTY or an other SSH client to acces the MPC.

Once you've launched PuTTY just put in the IP adres of the MPC and hit open. After that you will be presented with a CMD/Powershell like window asking you for you users name and you can just use following user name:

root

After this you will have acces to the MPC.

I'm using a Novation Launchpad Pro MK3 as midi controller but you can use something different just connect your midi controller to the MPC and type in the the following code and hit enter:

# aconnect -l | grep client

This will show you all the names of all the devices connected to the MPC. Find the one of your midi controller. You will need it in a minute.

Next put in de the following code and hit enter:

# systemctl stop inmusic-mpc

This will stop the MPC/Force app. (The MPC/Force app is just a app that runs on Linux)

After that input the following code and hit enter:

# export ANYCTRL_NAME="Launchpad Pro MK3";LD_PRELOAD=/media/MSTICK/tkgl_anyctrl.so /usr/bin/FORCE

The Force app should launch again.

Now try to hit a few pads on your Launchpad or midi controller and see the magic happen on the MPC screen.

Try to reorder your pads to your desire (use can use the software that came with your controller).

*Let me explain the last code that you've injected:*

# export ANYCTRL_NAME="Launchpad Pro MK3";LD_PRELOAD=/media/MSTICK/tkgl_anyctrl.so /usr/bin/FORCE

Launchpad Pro MK3 is the recognized name of (in this case my midi controller) by the MPC.

MSTICK is the name of my memorystick

tkgl_anyctrl.so is the name of the file that I've downloaded from the Kik Gen's github.

/usr/bin/FORCE this tells the MPC to launch the Force app again.

If you'd put in: "/usr/bin/MPC" instead, it would've launched the MPC app instead.

I will soon make a list of midi notes that corespondent to the the Force functions.

There are still functions that I could not trigger like: the launch buttons but we are MPC users so we don't realy need that.

But I would like to assign a button to the Matrix and to the Master (Master mixer) so I can acces the master and Sub busses. I think I'll have to acces the mixer first and hit the master button to acces the master mixer but I'm not sure. Maybe a Force user can help me with that.

The Fatt printed functions below are the ones that I've found so far:

FORCE_NAVIGATE - FORCE_KNOBS - FORCE_MENU - FORCE_MATRIX - FORCE_NOTE - FORCE_MASTER - FORCE_CLIP - FORCE_MIXER - FORCE_LOAD - FORCE_SAVE - FORCE_EDIT - FORCE_DELETE - FORCE_SHIFT FORCE_SELECT - FORCE_TAP - FORCE_PLUS - FORCE_MINUS - FORCE_LAUNCH_1 - FORCE_LAUNCH_2 - FORCE_LAUNCH_3 - FORCE_LAUNCH_4 - FORCE_LAUNCH_5 - FORCE_LAUNCH_6 - FORCE_LAUNCH_7 - FORCE_LAUNCH_8 - FORCE_UNDO - FORCE_REC - FORCE_STOP FORCE_PLAY - FORCE_MUTE - FORCE_SOLO - FORCE_REC_ARM - FORCE_CLIP_STOP - FORCE_STOP_ALL - FORCE_UP - FORCE_DOWN - FORCE_LEFT - FORCE_RIGHT - FORCE_LAUNCH - FORCE_STEP_SEQ - FORCE_ARP - FORCE_COPY - FORCE_ASSIGN_A - FORCE_ASSIGN_B

I dont know what the underlined functions do and I haven't found the others.

Next to this I could trigger all of the buttons on the MPC X so this might be usefull for MPC Live or MPC One users that just wan't all the MPC X buttons.

It may seem like a lot of text but the procedure will only take about 30 seconds once you get the hang of it. Once you know the name of your controller and memory stick you can save the code to a file and just copy and paste 2 codes and you're set.

If you guys try it and have discover new things, please share it with us.

I just want to end this post by saying all of this is not my work, I've just replicated what others have done. All credits go to Ultros and the Kik Gen.

May the Force be with you!
Last edited by zangetsu01 on Mon Nov 01, 2021 7:40 pm, edited 1 time in total.
User avatar
By Ultros Mon Nov 01, 2021 7:07 pm
Sweet! i'm gonna give this a try. i'm actually poking away at the mpc now finally!

i found this option for the config file as a string in the mpc and force software. I dont really know how disk streaming works so if you get bored give it a try tell me if this works lol. you seem more motivated than i.

<VALUE name="DiskStreamingEnabled val="1"/

*edit* had to mod tkgl_anycrtl.so for mpc one.. no input yet, but everything links up. no library errors.. so on to device name of controller.
User avatar
By zangetsu01 Mon Nov 01, 2021 10:18 pm
Apearantly we also need to load the 'tkgl_iamforcectrl.so' file so we get all the functionality I've mentioned above. but when I Pre_Load it I get the following error:

'There was an error connecting to the MPC X. Please switch your Force off and on again.'

So close man.
User avatar
By zangetsu01 Tue Nov 02, 2021 6:51 am
Ultros wrote:i also get the same error on my mpc one. i patched his lib to work, anyctrl.so works, but iamforce.so gives me the error you mentioned above.

but peep this, he did some extra coding to get his "kikpad" to work.

https://github.com/TheKikGen/kikpad/blo ... rce.h#L190

here's the mapping
https://github.com/TheKikGen/kikpad/blo ... MPCForce.h


Yes I've seen the mapping. The Kik Gen also pointed me to this file:

https://github.com/TheKikGen/MPC-LiveXplore-bootstrap/blob/main/.tkgl_bootstrap/scripts/tkgl_mod_iamforcectrl.sh?fbclid=IwAR3AWEjG6J-Fl1HKvIY22-JmbEM2Nvc7hKpc9eSOMh3kWRqMRpJbmz4mhAU

But I don't know how to use it. It's programmed in C. So I don't know how to load it into the MPC. Maybe you can poke away at it?
User avatar
By Ultros Tue Nov 02, 2021 12:57 pm
Not C, thats just shell script. save it as a whatever.sh and you can run it from your usb with sh /media/drive/whatever.sh

it just automates the start up process. you're already doing it by hand.
User avatar
By zangetsu01 Tue Nov 02, 2021 1:38 pm
Ultros wrote:Not C, thats just shell script. save it as a whatever.sh and you can run it from your usb with sh /media/drive/whatever.sh

it just automates the start up process. you're already doing it by hand.


Allright thanks,
I'll have a try once I get home.

But if we take a look at the code itself shouldn't we make some adjustments?

For example:
#!/bin/sh
#
# __ __| | | /_) | ___| | |
# | __ \ _ \ ' / | | / | _ \ __ \ | _` | __ \ __|
# | | | | __/ . \ | < | | __/ | | | ( | | |\__ \
# _| _| |_|\___| _|\_\_|_|\_\\____|\___|_| _| _____|\__,_|_.__/ ____/
#
# BOOTSTRAP script for ANYCTRL LD_PRELOAD LIBRARY.

# This "low-level" library allows you to run a Force binary with a mpc
# with all features enabled. We do not distribute the binary.

# Enter here the name (or a substring) of your external midi controller.
# You can use the command 'amidi -l' to find it

export ANYCTRL_NAME="nanoKEY Studio"

#------------------------------------------------------------------------------
# NB : We totally ignore the DFU mode here.

source $TKGL_PATH_FILE
FORCE_BIN=/media/tkgl/MPCF-306

ARGV="$@"

export LD_PRELOAD=$TKGL_LIB/tkgl_iamforcectrl.so

if type systemd-inhibit >/dev/null 2>&1
then
exec systemd-inhibit --what=handle-power-key $FORCE_BIN $ARGV $ARGV
else
# Reduce the soft stack size limit to 1MiB (from the default 8MiB). This
# is used as the default stack size for new threads and since MPC is
# locked in memory this memory is allocated. Since the limit is read
# before main, we cannot set it in the application and must do so here.
ulimit -S -s 1024
exec $FORCE_BIN $ARGV
fi


Shouldn't we change: export ANYCTRL_NAME="nanoKEY Studio"

to:

export ANYCTRL_NAME="The name of our controller"

And: FORCE_BIN=/media/tkgl/MPCF-306

tkgl should be replaced by the name of our memory stick 9I think). And I don't know what MPCF-360 is because I don't have such a file on my stick or is this generated by the script?

And finally this part:

export LD_PRELOAD=$TKGL_LIB/tkgl_iamforcectrl.so

This gives us an error when the MPC launches this shared object.
User avatar
By Ultros Tue Nov 02, 2021 4:04 pm
yeah this script is in no way any help.

i believe with the anyctrl.so you can map your device. remember there are many types of midi messages. like note on / off, toggle, cc, so on. if you look at his definitions for midi note numbers it looks like they're all there. your matrix pad is probably sending the wrong *type* of message to the control param addresses (midi number). maybe they arent notes? maybe a cc? ive not ivestigated but iirc there is only one midi number for the entire drum pad interface.

I dunno im not really actively working on it tbh lol. i would rather isolate the references within the force binary and modify it to the correct ones. Problems solved. It seems goofy to try man-in-the middle approach something that should be doable in a hex editor. I just need to get motivated and set up some debugging utils..

If they ever add "controller" to the damn midi options we'll be able to use it then.. but still waiting for mpc to catch up to the force environment.
User avatar
By Ultros Wed Nov 03, 2021 11:01 am
I need the mpc one and the mpc x's sysex data.. im not sure how to dump that crap though, not skilled with sysex messages. i'm poking at the library, i set a toolchain up and have been poking. Almost ready to go, but neither of us have an mpc live which is what the iamforce library expects.
User avatar
By zangetsu01 Wed Nov 03, 2021 12:34 pm
Ultros wrote:I need the mpc one and the mpc x's sysex data.. im not sure how to dump that crap though, not skilled with sysex messages. i'm poking at the library, i set a toolchain up and have been poking. Almost ready to go, but neither of us have an mpc live which is what the iamforce library expects.


You can get the sysex data from the MPC One and MPC X with this command:

# LD_PRELOAD=/media/tkgl/mpcroot/root/preload_libs/tkgl_ctrldump.so /usr/bin/MPC

you just need to have the tkgl_ctrldump.so file on your stick.

You can download it here:

https://github.com/TheKikGen/MPC-LiveXplore/blob/master/src/preload_libs/tkgl_ctrldump.so

This command will allow you to spy on the MPC's Sysex communication whenever you hit a pad or a button.

For the MPC Live Syses, maybe someone on this Forum can help us.
User avatar
By Ultros Wed Nov 03, 2021 4:38 pm
ah beautiful, thanks bud. i got the lib compiling and started poking at it and realised why it fails to load, it's trying to intercept the live sysex rather than our mpc one / mpc x sysex messages. i just gotta add a those strings and add some conditions to the write function.

I dont own an mpc x so if you could.. dump your sysex (then remove your serial number from it juat overwrite the serial # part with x's) and post it for me and i'll give you a working library.
User avatar
By zangetsu01 Wed Nov 03, 2021 5:33 pm
Ultros wrote:ah beautiful, thanks bud. i got the lib compiling and started poking at it and realised why it fails to load, it's trying to intercept the live sysex rather than our mpc one / mpc x sysex messages. i just gotta add a those strings and add some conditions to the write function.

I dont own an mpc x so if you could.. dump your sysex (then remove your serial number from it juat overwrite the serial # part with x's) and post it for me and i'll give you a working library.


Check your personal mesage box. (Because I'm not sure if I'm sending you the correct data.)

Edit:

I think this is it:

MPC --> hw:1,0,0 = F0 7E 00 06 01 F7 | .~... .

hw:1,0,1 --> MPC = F0 7E 00 06 02 47 3A 00 19 00 00 05 | .~... G:.....

hw:1,0,1 --> MPC = 00 00 00 00 00 00 41 31 31 38 30 34 31 37 38 37 | ..... .XXXXXXXXX
30 38 33 39 31 00 F7 | XXXXX ..

MPC --> hw:1,0,0 = F0 47 7F 3A 62 00 01 65 F7 F0 47 7F 3A 64 00 03 | .G.:b ..e..G.:d..
00 01 01 F7 F0 47 7F 3A 64 00 03 01 01 01 F7 F0 | ..... G.:d.......
47 7F 3A 64 00 03 02 00 00 F7 F0 47 7F 3A 64 00 | G.:d. ......G.:d.
03 03 00 00 F7 F0 47 7F 3A 63 00 03 00 00 00 F7 | ..... .G.:c......
F0 47 7F 3A 63 00 03 01 00 00 F7 F0 47 7F 3A 41 | .G.:c .......G.:A
00 00 F7 F0 7E 00 06 01 F7 | ....~ ....

hw:1,0,1 --> MPC = F0 47 00 3A 64 00 03 00 01 01 F7 F0 47 00 3A 64 | .G.:d .......G.:d
00 03 01 01 01 F7 F0 47 00 3A 64 00 03 02 00 00 | ..... ..G.:d.....
F7 F0 47 00 3A 64 00 03 03 00 0A F7 | ..G.: d......

hw:1,0,1 --> MPC = F0 47 00 3A 41 00 13 10 00 00 00 00 00 00 00 00 | .G.:A ...........
02 00 00 00 00 00 00 00 00 00 F7 | ..... ......

ButtonStates reply from firmware: {16,0,1,0}
hw:1,0,1 --> MPC = F0 7E 00 06 02 47 3A 00 19 00 00 05 00 00 00 00 | .~... G:.........
00 00 41 31 31 38 30 34 31 37 38 37 30 38 33 39 | ..AXX XXXXXXXXXXX
31 00 F7 | 1..
User avatar
By zangetsu01 Wed Nov 03, 2021 8:11 pm
Analyzing my previous post,

This might be what you are looking for?

{0xF0,0x7E,0x00,0x06,0x02,0x47,0x3A,0x00,0x19,0x00,0x00,0x05,0x00};
User avatar
By Ultros Wed Nov 03, 2021 8:32 pm
This is what i needed:
Code: Select allF0 7E 00 06 02 47 3A 00 19 00 00 05



si senore. i got it working on my mpc one but theres more hurdles... i got some work to do... *rolls up sleeves*

get read for a read...

Ok so i have it intercepting the internal device however that completely dicks up the entire button interface of the mpc. shits all willy nilly and rearranged because the force interface is completely different.

so either i have to get all the button and knob values from all the mpc units and write a midi message parser that replaces the values to rearrange the buttons and knobs to some semblence of sanity.

or the other option is to get the sysex of an apc mini (i have one) and only take force control messages from specifically that device thus forcing everyone who wants to gank the force has to atleast buy an apc mini lol.. but its a legit akai product..

the matrix of my apc mini doesnt fully work but i can select a couple squares. i am getting alot more options now as well, finally found that save screen...