Ultimate TouchOSC Guide

       

So I’ve been using TouchOSC for a few years now and in the summer of 2021 Hexler released the latest version Mk2.

I was so impressed by the original version, I had been using it daily for Reaper, Finale, and OBS. Although it was a little bit complicated to figure out, there was just enough information online for me to teach myself how to use it.

Fast forward to the summer of 2021 with Mk2 and some extra time on my hands due to the pandemic, I decided to upgrade. I found myself totally lost and had to teach myself what I could with the help of the manual. Learning any new software is a lot of work, but it took me many hours of banging my head on my desk and trying different methods to get Mk2 to work the way I wanted to.

So I decided to start a set of video guides for other users to ease their transition into Mk2. I had no idea that there would be such a large and positive response, so now here I am making more and more content about TouchOSC.

Frequently Asked Questions

TouchOSC is a downloadable app for your mobile device. Once you’ve purchased and installed, you can create & edit templates. If you want to edit a template on a computer, download the Desktop editor. To run your template, you will need the app on a mobile device.

Check out my full list of downloads below!

  1. Make sure you download the editor on your computer and the app on your device.
  2. Open your desktop editor and select the WiFi icon in the top-right corner.
  3. Select Server and then check Enable.
  4. On your mobile device, in the menu, select the WiFi icon in the top-right corner.
  5. After your desktop server is enabled, you should see it listed in devices to connect to.
  6. Select your desktop.
  7. You’re connected!

*This doesn’t mean that your device is connected to your DAW. This is just a connection between the desktop editor and the TouchOSC app. You need to connect your device to your DAW separately. Check out my videos below or on the channel to see how to connect specific DAWs.

The Discord group and the Facebook group are a great place to ask the community for help.

My Github with all sorts of information.
https://github.com/attaccapublishing/TouchOSC

If you’re looking for tutorials on scripting with Lua, check out their website for a full list of tutorials and instructions.

Hexler Scripting API

YouTube Tutorial Subjects

  • Setting up TouchOSC
  • Buttons Faders & Radio Buttons
  • Connecting Ableton & Digital Performer
  • Changing Labels with Scripted Buttons
  • Connecting Cubase & Controlling an EQ
  • Sending & Receiving OSC Messages in Reaper
  • TouchOSC Bridge
  • Protokol and Editor Log
  • Sending Keystrokes with TouchOSC
  • Connecting PreSonus Studio One & Using Toggles
  • Tips & Tricks for Building Your Template Part 1
  • Tips & Tricks for Building Your Template Part 2
  • Using TouchOSC with Make Music Finale
  • Creating a Template for Reaper Plugins
  • Making a MIDI Template for Reaper
  • Adding a Dropdown Menu
  • Pairing TouchOSC with GarageBand
  • Pairing TouchOSC with LogicPro
  • Updates in MkII since release
  • Using Hidden Objects

The Ultimate Touch OSC Guide

Watch the Videos

Max 4 Live Track Name Patch

Download the Patch

Nudge Buttons

local fader_1 = self.parent:findByName("fader_1")
local increment = 0.05

function onValueChanged(key)
if (key == "x" and self.values.x == 1) then
fader_1.values.x = fader_1.values.x + increment
end
end

Sending Keystrokes

Originally from RickDDD on Github.

-- NOTE: It's necessary to use the more complex sendOSC syntax, because
-- the basic version converts the 'key down/up' values (1/0) to Floats (1.0/0.0)
-- which is not accepted for key commands by TouchOSC Bridge.
-- But never mind, just change 'SHIFT+l' in the code to whatever key you would like to send.

function onValueChanged(key)
if (key == "x") then

if self.values.x > 0 then
sendOSC({ '/key',{{ tag = 's', value = 'CONTROL+ALT+F11' }, { tag = 'i', value = 0 }}}) -- send key down

else
sendOSC({ '/key',{{ tag = 's', value = 'CONTROL+ALT+F11' }, { tag = 'i', value = 1 }}}) -- send key up
end

end
end

Highlight Last Object Touched

last_touched_var

(place this in a label)

local latch = ""

function onValueChanged(key)
if (latch ~= self.values.text) then
local new_last = self.parent:findByName(self.values.text)
local old_last = self.parent:findByName(latch)

print("new: " .. new_last.name)
new_last.outline = true
if (nil ~= old_last) then
print("old: " .. old_last.name)
old_last.outline = false
end
latch = self.values.text
end
end

(script on object)

local ltv = self.parent:findByName("last_touched_var")

function onValueChanged(key)
  if ("touch" == key) then
    ltv.values.text = self.name
  end
end

last_touched_edge

(place this in a label)

local latch = ""

function onValueChanged(key)
  if (latch ~= self.values.text) then
    local new_last = self.parent:findByName(self.values.text)
    local old_last = self.parent:findByName(latch)
    
    print("new: " .. new_last.name)
    new_last.outline = true
    if (nil ~= old_last) then
      print("old: " .. old_last.name)
      old_last.outline = false
    end
    latch = self.values.text
  end
end


(script on object)

local ltv = self.parent:findByName("last_touched_edge")

function onValueChanged(key)
  if ("touch" == key) then
    ltv.values.text = self.name
  end
end

Reaper

Ableton Live

Cubase

Digital Performer 11

Studio One

Logic Pro

Open Sound Control

OSC

Open Sound Control

Lua

Lua

My Gear List

Gear List

Join the Discord server

Discord Server

Download my templates & scripts

Github
  • 0 Bank Select (MSB)
  • 1 Modulation Wheel
  • 2 Breath controller
  • 3 = Undefined
  • 4 Foot Pedal (MSB)
  • 5 Portamento Time (MSB)
  • 6 Data Entry (MSB)
  • 7 Volume (MSB)
  • 8 Balance (MSB
  • 9 = Undefined
  • 10 Pan position (MSB)
  • 11 Expression (MSB)
  • 12 Effect Control 1 (MSB)
  • 13 Effect Control 2 (MSB)
  • 14 = Undefined
  • 15 = Undefined
  • 16-19 = General Purpose
  • 20-31 = Undefined
  • 32-63 = Controller 0-31
  • 64 Hold Pedal (on/off)
  • 65 Portamento (on/off)
  • 66 Sostenuto Pedal (on/off)
  • 67 Soft Pedal (on/off)
  • 68 Legato Pedal (on/off)
  • 69 Hold 2 Pedal (on/off)
  • 70 Sound Variation
  • 71 Resonance (Timbre)
  • 72 Sound Release Time
  • 73 Sound Attack Time
  • 74 Frequency Cutoff (Brightness)
  • 75 Sound Control 6
  • 76 Sound Control 7
  • 77 Sound Control 8
  • 78 Sound Control 9
  • 79 Sound Control 10
  • 80 Decay or General Purpose Button 1 (on/off) Roland Tone level 1
  • 81 Hi Pass Filter Frequency or General Purpose Button 2 (on/off) Roland Tone level 2
  • 82 General Purpose Button 3 (on/off) Roland Tone level 3
  • 83 General Purpose Button 4 (on/off) Roland Tone level 4
  • 84 Portamento Amount
  • 85-90 = Undefined
  • 91 Reverb Level
  • 92 Tremolo Level
  • 93 Chorus Level
  • 94 Detune Level
  • 95 Phaser Level
  • 96 Data Button increment
  • 97 Data Button decrement
  • 98 Non-registered Parameter (LSB)
  • 99 Non-registered Parameter (MSB)
  • 100 Registered Parameter (LSB)
  • 101 Registered Parameter (MSB)
  • 102-119 = Undefined
  • 120 All Sound Off
  • 121 All Controllers Off
  • 122 Local Keyboard (on/off)
  • 123 All Notes Off
  • 124 Omni Mode Off
  • 125 Omni Mode On
  • 126 Mono Operation
  • 127 Poly Mode

TouchOSC Mk2

Touch OSC Mk2

TouchOSC Bridge

Touch OSC Mk2

TouchOSC Editor

Touch OSC Editor

TouchOSC Protokol

Touch OSC Protokol

TouchOSC Mk1

Touch OSC Mk1

Have a Question?Ask it Here