How to control AbleSet + Mobilesheets remotely via pedal on Android

Hi there,

I’m about to optimize and robustify our live setup. Current setting:

  • One Windows laptop with audio interface, running Ableton and AbleSet
  • Two android tablets, running Mobilesheets (see MobileSheets ) to visualize the score, and AbleSet in a browser on split screen. One is primary, other one is backup
  • A sample Pad connected as USB midi to the laptop to emergency stop playback
  • Wifi router for local network

In the past, I only used Mobilesheets and one tablet, so a simple page turner pedal connected to the tablet was fine.

Now, there’re two tablets that should be kept in sync ideally, and both apps in split screen.

Now, I would like to use a pedal as a less obvious way to change the song in parallel in AbleSet and Mobilesheets, instead of swiping on the tablet on stage.

Would anybody have recommendations how to achieve that?

Wifi/BT midi automation? Connect the pedal to the laptop instead the tablets? Or is there any way to pass through the pedal actions to both apps in split screen? And even then, how to control AbleSet in the browser?

Note that Mobilesheets has a sync mechanism on its own as long as devices are in the same wifi, so it would be enough to just control it on one device.

Thanks a lot!

Jan

Hey @jankap,

That’s a well thought-out setup. One thing to keep in mind though: On Android, key and MIDI events go to the focused app only, so a pedal connected to the tablet can drive either MobileSheets or the AbleSet browser tab, but not both.

I had a look and MobileSheets has a desktop version (Windows 10 1809 or higher / Windows 11). If that’s an option for you, running it on the same laptop as AbleSet solves most of this at once — the pedal is already plugged in there, nothing wireless in the chain, and MobileSheets’ own sync still keeps the tablets following the desktop instance, so your on-stage displays don’t change.

From there:

1. Connect the pedal to the laptop via USB MIDI, same as your sample pad.

2. Map it in AbleSet. Settings → MIDI Mapping, OSC & Scripting → Edit MIDI Mapping → click plus, press the pedal switch, and pick “Next Song” / “Prev. Song” from the dropdown. You can also set a mapping’s trigger type to “double press” or “hold” if you want to guard against accidental taps. You can see this in action in the official tutorial: https://youtu.be/Ws8EQZBKqAo?t=241

3. Map the same pedal switches in MobileSheets for its own song change, and keep your setlist and sheet order matching so the two can’t drift apart.

On Windows a MIDI input port can usually only be opened by one application at a time, so the two apps may not both be able to listen to the pedal directly. If you hit that, a virtual MIDI port (loopMIDI is the common free one) lets you split the signal to both.

You also don’t need to worry about controlling the AbleSet browser tabs, as every AbleSet client on the network is a view of the same server, so both tablets update automatically.

Would this work for your use case?

Also, if you’re open to taking it a step further later, an AbleSet Project Script could make AbleSet the master and push song changes to MobileSheets. The advantage being that it wouldn’t matter how the song changed (pedal, sample pad, or AbleSet auto-jumping at the end of a song), the two would stay locked together instead of relying on both apps receiving the same press. Happy to walk you through that if it sounds useful.

1 Like

Awesome! Love your answer :slight_smile: and I think making the laptop the master also for Mobilesheets makes completely sense.

I’m curious what you had in mind regarding the scripting approach. Is there a way to control Mobilesheets via a script? Haven’t seen a public API to do so. But if that were possible, then AbleSet became the master which would be perfect imo.

Thanks!

Jan

Edit: or would you trigger midi actions ( MobileSheets ) via the user script Mobilesheets listens at?

@agustinvolpe there’s another caveat with the laptop-based solution, maybe even two:

  1. Right now, my pedal only mimics key-strokes, i.e., no midi commands; thus I either need a wrapper (script?), translating the strokes into midi commands. Does AbleSet offer any helpers for that or do I need to go the autohotkey+midimapper route? Perhaps just buying another pedal with midi support is easier?
  2. IF AbleSet becomes the master for MobileSheets via custom scripts, too - the biggest challenge would be IMO to sync the current song. Because in AbleSet I use loops, start/stop markers, potentially jumps, etc. so just keeping the order in the setlist identical is maybe not sufficient, what do you think?

I’m fine with some scripting, I have software background, but I’m not so much into MIDI and related protocols.

Thanks!

Jan

Hey @jankap,

Both good questions!

Your pedal is probably fine as it is. Is it a HID page-turner type pedal? AbleSet has native keyboard shortcuts, so a keystroke pedal could drive it:

  • — previous song
  • — next song / escape current loop
  • / — previous / next section
  • Space — play/pause

So if your pedal can be configured to send arrow keys, you wouldn’t need AutoHotkey, a MIDI converter, or a new pedal. The only requirement is that the AbleSet window is the active one, as shortcuts would go to the focused window, same as anywhere else.

That’s actually the strongest argument for making AbleSet the master: only AbleSet needs to receive the pedal. MobileSheets would follow over MIDI, so it wouldn’t need focus, and your two apps stop competing for it.

You can see the shortcuts in the official tutorial.

Also, AbleSet’s scripting has no way to listen for keystrokes, so it can’t do the key-to-MIDI translation itself. If your pedal is locked to keys AbleSet doesn’t use and can’t be remapped, then yes, AutoHotkey plus a virtual MIDI port, or a pedal with a MIDI mode. But check the pedal’s config first, that’s very likely to save you the detour.

Also, song sync should be easier than you’re fearing: Loops, stop markers, and jumps within a song don’t change the active song, so they’d never fire anything. Only an actual song change would. No matter how it happened (pedal, sample pad, manual tap on a tablet, or AbleSet auto-jumping at the end of a song). That’s the whole point of syncing on AbleSet’s state instead of mirroring pedal presses: MobileSheets follows what AbleSet actually did.

And you can drop the identical-order requirement by matching on song name instead of setlist position. In Settings → MIDI Mapping, OSC & Scripting → Project Script:

// Map each AbleSet song to the MIDI program number you assigned it in MobileSheets
const songs = {
  "Never Gonna Give You Up": 1,
  "Take On Me": 2,
  "Africa": 3,
};

onOscChange("/setlist/activeSongName", ([name]) => {
  const program = songs[name];
  if (program === undefined) return; // song not in the lookup — do nothing
  sendMidiPc("AbleSet to MobileSheets", 1, program);
}, true);

The true at the end fires the callback once on startup, so MobileSheets would land on the right sheet as soon as everything boots. "AbleSet to MobileSheets" is the virtual MIDI port name (loopMIDI, if both apps are on the laptop), and 1 is the MIDI channel.

Would that work for your use case?

1 Like

Still struggling to keep a stable connection to the laptop, so there’s nothing AbleSet related right now. I will test as soon as that’s solved, I appreciate your suggestions a lot! Thanks :slight_smile:

1 Like