FingerPlay MIDI

FingerPlay MIDI is a MIDI controller for Android. Any changes made to the controllers on your phone are transmitted over the WIFI network to a receiving computer using either OSC messages or its own FingerPlay format. The MIDI messages can then be sent to any music software capable of receiving MIDI input.

qrcode

Download FingerPlay MIDI from the Android Market

Download FingerPlayMIDI-0.9.0.apk if your phone can’t access the market.

Get the source code from Google Code.

A FingerPlay MIDI patch for Pure Data by Bérenger Recoules

FingerPlay MIDI Layout Generator by Bruno Molteni

FingerPlay in Windows with LoopBe1

Download and install Java and remember to set the path to Java.

Download and install a virtual MIDI driver like LoopBe1.

Download the FingerPlayServer zip-file and unpack it somewhere on your hard drive. Start it from the command line with:
java -jar FingerPlayServer.jar

The server will display the IP address and port number you need to connect to it from your phone.

Once you’ve connected, select LoopBe1 from the list of available MIDI output devices.

Start Ableton and make sure LoopBe1 is enabled for input in the MIDI settings.

Any changes made to the controllers in FingerPlay will be sent over the network to Ableton as a MIDI Message.

OSCulator

Click the top right button in FingerPlay to go to the settings screen, choose “OSC Server” as the “Server Type” and in “Server Address” enter your computer’s IP address followed by “:8000″ (which is the default port for OSCulator).

So if your IP address is 192.168.0.4, enter “192.168.0.4:8000″.

If the phone manages to connect you can back out of the settings screen and play around with the MIDI controllers in FingerPlay which will send messages to OSCulator.

If you see the messages coming through to OSCulator, you can click one of them and set its event type to “MIDI CC” and give it a control change value in the “Value” column. This should be enough to send it to Ableton as long as you’ve enabled OSCulator in Ableton Live’s preferences (enable “track” and “remote” for OSCulator under the “MIDI Sync” tab).

Custom layouts

If you create a folder on your sdcard called FingerPlayMIDI and put a file in it called layout.xml, FingerPlay will use that file instead of its own default layout.

Here’s the default layout file:

http://fingerplaymidi.googlecode.com/svn/trunk/client/res/raw/layout_default.xml

Remember to turn off USB storage before starting FingerPlay MIDI or it won’t be able to access the file on the card.

517 Responses to “FingerPlay MIDI”

  1. Shinydiscopants says:

    Hello. Will this be developed to work with a Mac? I have an Android phone, but use a Macbook Pro as my DAW.

  2. N says:

    I downloaded the app on my Asus Transformer and after a while the app always force closes. Also I can’t reach the settings button to set up the server.

  3. flat20 says:

    @Henri Oh, that’s annoying. But I can either email you the GUI code or if you have a user on assembla.com I can give you access to the source code for it.

    The only reason it’s not in the SVN is because I wasn’t very happy with the code :)

  4. henri says:

    Hello flat20,

    I would like to make fingerplaymidi suitable for my old android 1.5 library. With the current source GUI.jar checks whether the SDK is 4 or higher because of multitouch. Is the source fo GUI.jar avaible so I can create a android 1.5 version of fingerplay?

  5. flat20 says:

    The source code is available from: http://code.google.com/p/fingerplaymidi/

    The most recent code, albeit a bit buggy, is in the dev branch.

  6. Phil says:

    Hi,

    would be nice to use this app, but i dont understand how to connect to ableton..i dont even know if there is a connection to my Computer

  7. ADogAndABabyDog says:

    I’ve been playing with FingerPlay for a while now, and I’ve made a few custom screens, but I’m wondering how I might be able to change the background image in an effort to help me organize some groups of buttons. All the links I’ve seen to the source code are broken, and I’ve tried looking through the folders on Android with Root Explorer but can’t seem to find the original image anywhere. Where might this be?

    Thanks

  8. Isaac says:

    I got finger play working, but I have a little problem. I want to get ride of the “press” function on the slider and xy. It seems to send a signal when I start using the slider and I don’t want that.

    Thanks!

    Isaac

  9. alberto says:

    the first time that i installed fingerplay everything went right. now i can only get on/off messages does anyone helps me?

  10. Arthur says:

    Hi,

    Is it possible to have a implementation of a switch between UDP and TCP in the OSC server type?

    In some situations the UDP Packets disappear and that should not happen in my setup.

    Thanks for any response. Keep up the great work :)

  11. flat20 says:

    @Jarrad They’re 0.0f – 1.0f. Good luck! I wish I could spend more time on FP and fix all these outstanding issues and bugs but it’s not likely to happen :(

  12. Jarrad says:

    @flat20: -.- lol. should have looked around before blindly copy and pasting google’s svn commands. currently merging, some of your changes are along the lines of what I did independently which is kind of nice. :) may take a week or two, this is my current “procrastinate exam study” project.
    just quickly, in what range is the float pressure passed to gui elements? does it come from your GUI.jar library?

  13. flat20 says:

    @Jarrad yeah feel free to add or change anything you like. I’d recommend you to work on the “dev” branch if you can though, because it’s a bit more up to date.

    Sorry for the lack of updates on FP in general. At least the code is out there for everyone to see and hopefully fix like Jarrad does :) .

  14. Jarrad says:

    @flat20:

    Been hacking away at the source for the past couple of days and have implemented sequencing for triggers, as well as changing the widgets so that touch and release can be separate events if desired. Haven’t played too much with it on the user side yet so it’s probably buggy, but if you’re interested I’ll cook up a patch set after some more thorough testing. :) I’m an SVN noob, sorry

    -Jarrad

  15. songhyu says:

    Is there any way that I can assign pitch bent on XY pad or slider? I have YAMAHA P-70 digital which doesn’t have pitch bend and modulation wheel. It would be wonderful if I can use smartphone as a pitch bend controller.

  16. Jarrad says:

    Wonderful!!
    Though your practice of indexing the y axis with 0 at the bottom had me scratching my head for a while :p

  17. [...] Werner Schweer added OSC support in MuseScore. Nicolas Froment created a demonstrator by hacking thesundancekid.net/blog/fingerplay-midi/ [...]

  18. El Toro says:

    Re: Default CC values, I just read some of the earlier posts. Sorry!

  19. El_Toro says:

    Hey,

    Sorry if this has already been asked by I’ve been playing with a custom layouts for DJing and I’ve been unable to create a horizontal slider. Is this possible at the moment?

    Also is it possible to default CC values to something other than 0 when the app starts up? (e.g. 64 for mid point)

    Thank you for all the work you’ve put in to this though! Really looking forward to seeing how I can integrate it in to my set up!

  20. plasticsoul says:

    Ah, just fixed it! For anyone having the same problem. You need switch remote ON, on the midi port configuration, mine was off, now everything works perfect! Great application! congratulations! :)

  21. plasticsoul says:

    Hi guys! I got fingerplay working here with Ableton Live but I have some problems!

    The pads are working, like piano roll notes, so I can play chords. But the sliders and x/y arent working. I clicked in the midi mapping in ableton but it doesnt map the sliders…

    How can I fix it, please? :)

  22. Tony Vigil says:

    Is there a way to disable the press function for sliders and the XY pads?

  23. Tony Vigil says:

    A few wishlist items…

    1. Buttons with a toggle function… basically pads with multiple states.

    2. Startup/Min/Max CC values for all controls in XML file

    3. Keep the app live when focus changes to another app or the return arrow is hit by accident (happens way to often!!!).

    4. On/Off switch (this goes along with the previous request) to actively close the application properly & ask the user if they do want to quit.

    5. The ability to load/change different interface XML’s while connected and running.

  24. EDVRTS says:

    For everyone who couldn’t get the controllers to register full midi values (just on/off signals)- when you auto assign a controler (this is for the slideable ones), just add +1 to the midi channel. You can see on the server program what midi channel are you using and that the program (FL studio in my case) registers the press signal instead of the midi value first. For X-Y and the pads just check the server program, it shows pressed values. I might have mixed some terms up.

  25. This is wicked, I thought I was going to have to do this all myself, you’ve saved me a tonne of faffing about. I’ve just hooked it up with the Kinect + Wiimote and can control up to 16 midi control channels at once with it:
    http://sites.google.com/site/newwaveinstrumentfabric/videos/telekinetic-conductor

    Mind you, finding an instrument that sounds good with all of this mangling is the next step.

    Cheers Fella!!!

  26. to ubjects I tremors human liquids and tramadol others double patients, viagra and cialis, bhmzle,

  27. GG says:

    Nice tool. Want to use it for some experiments with OSC.
    Until now only got the connection to the FP-Server running.
    It would be good, if the Server application lists *all* avaliable IP-ports. For me the first is the virtual network card to a virtual machine, but not the real ethernet. So I got no route to the IP-adress from my mobile phone…

  28. Freddy says:

    Hi flat20,

    Great tool!

    If at all, the features that would make it even more great would be:

    - a horizontal slider (I’ve tried to code a class called Sliderh.java, but I have no idea how to test/incorporate it – I’ve sent it to you via email)…

    - either, a “label” class, so that you can actually label your sliders, or
    - a possibility to simply import different background images for each individual screen to do the same trick (so far I’ve done it meself with a re-compile ;P.. but it is the same background for all three screens)

    Anyway,

    as I said before – GREAT TOOL :D !

    Thanks for that!

    Freddy

  29. flat20 says:

    @booggy

    If your IP address is 192.168.0.3 then you need to enter:

    192.168.0.3:4444

    @everyone

    Sorry for the lack of updates. I’m working on other things at the moment and unfortunately FingerPlay suffers because of it.

  30. booggy says:

    Have a problem with FingerPlayServer:

    Listening on [IP-Address]:4444
    Waiting for connection from phone..

    when trying to connect with :4444:8000
    getting message
    UnknownHostExeption

    please! tell me what i have to type in to get access

  31. [...] FingerPlay MIDI is a simple but effective controller that sends MIDI over WiFi, and is a good choice right now. [...]

  32. David Steinlage says:

    Hi, this is an interesting app and I just tried it out. I wanted to report a problem and ask for help to see if I can get it working.

    I followed your instructions using the free version of LoopBe1 (and I am wondering if I was supposed to use the non-free version in order to get this to perform well). The connection from the phone to the FingerPlay server connects, I can see data passing from the phone in the terminal window, there is activity, and this activity is being sent to Reason/Record. Record is set to accept midi from the phone and treat it as a generic midi keyboard, and later a generic midi control surface as I tried changing the profile of the device to see if it being treated as a keyboard might have been causing problems. It didn’t seem to help. One of the weird things I noticed while trying to setup a automation binding was that if I told it to learn the binding based on what surface/key I was touching and it would seem as if it would detect different keys simultaneously even though I was just pressing one (and they would be numbered one apart from each other; it might hold CC16 while I’ve got my finger down, but then change to CC17 when I release).

    Also, I have a feature request that may or may not have been made before but would it be possible to add the ability of using the phones accelerometer as a control source? My dream come true would be for me to be able to use my phone to emulate the effects that can be done with a nice piece of hardware out right now: http://www.sourceaudio.net/videos/post/dj-encanti-demos-the-midi-hot-hand-controller/

    Otherwise this looks like the a very cool app for the Android. Thanks!

  33. Duke says:

    This works well for me on FL Studio, good fun with this app.
    Maybe you could have an area on your site with more xml layouts, maybe user submitted ones?
    I would like more layouts but Im not comfortable with xml..

  34. smazeny says:

    Oh… should say I’m on Windows 7, 64-bit.

  35. smazeny says:

    Yet another error report…

    When I try to connect to the server on my phone, I get this error message:

    java.net.ConnectException: java.net.sockettimeoutexception: Transport endpoint is not connected

    Any and all help much appreciated!

  36. Damdamdam says:

    Have a problem with FingerPlayServer

    when running run.bat, it says:

    Listening on [IP-Address]:4444
    Waiting for connection from phone..
    java.net.SocketException: IP_ADD_MEMBERSHIP failed (out of hardware filters?)
    MulticastServerThread exit.

    OS is Windows 7 x64

    Is there a solution for this?

    thx

  37. Jee says:

    Hi all,

    We have developed one application in Android for the Archos 7 home tablet. With the Archos 7, there is an sdcard folder available. In code I can get the sdcard location using:

    Environment.getExternalStorageDirectory()

    But with the Archos 10i internet tablet, there is no sdcard folder available. Is there any related folder for sdcard is available in the Archos 10i internet tablet?

    Can anybody help? Thanks in advance.

  38. wodor says:

    @Tre Tuna
    in this week i’ll add XY’s , to get sliders (faders) you need to click the tool icon on the right, change type in the green menu, and click button unfortunatelly hidden under the tool icon.
    I will fix this soon too (in fact i was hoping that i’ll fin someone who will help me style this)

  39. Tre Tuna says:

    Hey Wodor,

    I like your little program for making a layout, but all I see are pads on it. Can we get some faders and XY areas?

  40. Tre Tuna says:

    Found my answer in the reading, just took me a bit! Love this program! Now to set it up the rest of the way… Wireless DJing! Haha

  41. Tre Tuna says:

    So I just downloaded FingerPlay yesterday and am got it setup today with OSCulator to use in Traktor for DJing… My problem is that the XY pads and the Faders are only sending on/off messages and not values in between 0 and 127. This basically renders the faders and XY pads useless to me which sucks cause the xy pads are one of the main things I want to use! Please help! :)

  42. SinuouS says:

    ok it is connected but it still only assigns each pad as the same thing in serato, when i map a function to fingerplay pad section it maps it as channel 1 note 15, and when i try to map a differnt function to a differnt button, it changes every pad to the last thing I syncd how do i assign a new function to each pad?

  43. flat20 says:

    @wodor That looks really good! Thanks for taking the time to write an editor. Feel free to use any assets you want from the FP app :)

    @Sinuous That probably means that some other application is already using the port 4444. If you start the jar like this:

    java -jar FingerPlayServer.jar 32123

    It will use port 32123 instead of 4444. Hopefully that port is available, if not just try some other ones :)

  44. SinuouS says:

    Ok i got it to work but when i try to map the up down left right library functions to the pad part it only midis the last one thing i press so all buttons would only be right or up or whatever. how do I map each button to have a midi function.

  45. SinuouS says:

    Hi cant wait to use the app with serato. I got it to connect but when i run the jar fingerserver.jar
    I get this

    fingerplayer v8.0

    listening on 192.168.0.110:4444
    java.net.BindException: Address already in use: JVM_Bind

    thanks

  46. wodor says:

    i’ve created a tool. I’ts in alpha state but it generates valid xml (for me).
    It allows drag & drop ,resizing and removing devices. Under the tool icon you can generate a screen from templates (more templates are about to come), it’s the only way to add devices right now.
    And it’s ugly like hell (i can make repo public for contibutors if anyone would like to help make it look more friendly)

    Resizing is oriented to NE (upper right) because FPMidi displays things that way.

    I know I still have many things todo:
    - fix controller numbers – add param to generator

    - generators should always consider screen size
    - generators should use ajax, not form submission
    - disallow moving to another screen (at least fix the freezing in the other screen (z-index), and emphasize which device belongs to which screen)
    - fix sliders screen
    - add xy device
    - write xy’s screen
    - write transport bar screen
    - fix alignment in screenConf div
    - fix the general settings
    - set up colors

    - adding devices
    - easier CC edit
    - uploading XML to the form
    - saving configs
    - sharing configs

    @flat20:
    I hope i haven’t abused anything by creating this tool, also I’d like to use graphics from FPMidi repo
    http://fingerplaymidi.googlecode.com/svn/trunk/client/res/drawable/
    may I ?

  47. wodor says:

    it’s simple
    you just need to edit GET parameters like in example above
    here you expand cell width to 150px and horizontal space between them to 5 px
    http://wodor.net/prace/gen.php?cellw=150&marginw=5

    first parameter must be preceeded by “?” and every next by “&”

    availble params are
    &cellw=120; // Button width
    &cellh=65; // button height
    &marginw=1; // margin between cells
    &marginh=1; // margin between cells
    &screenw=804; // width of the screen
    &screenh=478;// height of the screen
    &ctrlNum=35;// number of first controller

    then you just paste it to “screen” tag in this http://wodor.net/prace/layout_w.xml or
    http://fingerplaymidi.googlecode.com/svn/trunk/client/res/raw/layout_default.xml

    if more people will want this i’ll try to create an online generator for the whole layout file

    pls reply to wodor@wodor.net cause I may forgot to visit this site

Leave a Reply