# Touch Screen Control Surface for Reaper



## Chris Hurst (Mar 22, 2017)

Hi All.

I'm trying out Reaper at the minute as an alternative to Logic and am enjoying some of the features that Reaper has (track templates being a huge time saver for me).

As my template is growing though, I'm wondering whether any Reaper users out there using touch screen controllers (I have an iPad), know if it is possible to set up Touch OSC/Lemur to do things like 'jump to Strings' or 'jump to Brass' to make navigation of a larger template a bit quicker?

I have Touch OSC set up doing simple things with MIDI CC's etc, but I'm wondering if it can do more on the Navigation front.


----------



## Spip (Mar 22, 2017)

I see at least 2 options :

1. Make a group for each "strings", "Brass" etc. and then a macro with some actions like show group 1, 2 etc and hide other tracks (something like that). Next, assign this macro to any shortcut or midi event.

2. Much more powerful (and easy), IMHO, use screensets. Assigned to shortcut or midi, of course. That's what I do.

Look for "screensets" (in Setting Up Shop) in the Reaper's videos : http://reaper.fm/videos.php


----------



## samphony (Mar 22, 2017)

There was a lua script as well that allows to mimic behaviors like cubendo use it. Including show only tracks with content at cursor.


----------



## Ozymandias (Mar 22, 2017)

You can absolutely do those things. With that said, where workflow/navigation tasks are concerned I would consider using OSC rather than MIDI. Reaper has excellent OSC implementation and it's a friendlier protocol for tasks that benefit from being described with words (as opposed to MIDI CC numbers etc.).


----------



## pmcrockett (Mar 23, 2017)

Ozymandias said:


> You can absolutely do those things. With that said, where workflow/navigation tasks are concerned I would consider using OSC rather than MIDI. Reaper has excellent OSC implementation and it's a friendlier protocol for tasks that benefit from being described with words (as opposed to MIDI CC numbers etc.).


I've not had much luck trying to use Reaper's OSC implementation. OSC in Reaper is set up to interact with control surfaces and not with open-ended systems like those you can design in Lemur. You can't just pass OSC data back and forth between freely-defined addresses like you can with more flexible implementations of OSC; you have to follow Reaper's pre-defined addresses which are already configured to do specific things within Reaper. These limitations on OSC are my biggest disappointment with Reaper so far.


----------



## Ozymandias (Mar 23, 2017)

The addresses in .ReaperOSC files are editable, so I'm not sure I follow you. I would say the functionality encompasses most/many of the use cases where two-way communication (parameter feedback) is essential.

However, the sort of task Chris describes ('jump to Strings' or 'jump to Brass') doesn't really demand two-way communication. To my mind it's sufficient to bind those actions to OSC messages (reaper-osc-actions.ini), which is a doddle in Lemur because you can derive the string for an OSC address from a control name. By contrast, trying to wrangle hundreds of actions using MIDI is like painting the hallway through the letterbox.

On the rare occasion that I've needed to set up custom two-way communication, I've used dummy JSFX sliders in concert with ReaScript to send data back to Lemur. A bit kludgy, but useful.


----------



## Chris Hurst (Mar 23, 2017)

OK, thanks for your input everyone. I'll investigate further!


----------



## pmcrockett (Mar 23, 2017)

Ozymandias said:


> The addresses in .ReaperOSC files are editable, so I'm not sure I follow you. I would say the functionality encompasses most/many of the use cases where two-way communication (parameter feedback) is essential.
> 
> However, the sort of task Chris describes ('jump to Strings' or 'jump to Brass') doesn't really demand two-way communication. To my mind it's sufficient to bind those actions to OSC messages (reaper-osc-actions.ini), which is a doddle in Lemur because you can derive the string for an OSC address from a control name. By contrast, trying to wrangle hundreds of actions using MIDI is like painting the hallway through the letterbox.
> 
> On the rare occasion that I've needed to set up custom two-way communication, I've used dummy JSFX sliders in concert with ReaScript to send data back to Lemur. A bit kludgy, but useful.



As far as I'm aware, there are only two ways to use OSC in Reaper.

1) You can use a .ReaperOSC file to sync a control surface to Reaper. In this context you're limited to the addresses in the .ReaperOSC file which are all predefined, though not necessarily all present in any given file. These addresses each accept specific data types and send that data to specific Reaper functions. There is a small degree of customization, but the system is designed to sync control surfaces and not to transmit large amounts of arbitrary data to/from Reaper scripts.

2) You can trigger actions/scripts with OSC messages. My recollection from experimenting with this is that pulling actual data from the OSC message (beyond the triggering effect) is pretty limited. You're supposed to be able to use reaper.get_action_context() from within the triggered script to pull this data, but I couldn't get this to work in any useful way -- I can't remember exactly what the issue was, but it was something like it would only read binaries, or couldn't read floats, or couldn't read strings, or something, and it definitely couldn't batch receive large amounts of data. And you can't send OSC data OUT of a script -- the only OSC messages you can send from a script go to Reaper itself via the .ReaperOSC definitions.

At any rate, it's all far more limited than I expected from an OSC-capable, scripting-focused program.

What I want to be able to do is receive arbitrary types and amounts of data at arbitrary addresses and send arbitrary types and amounts of data to arbitrary addresses -- all in realtime from within a deferred script. You can do this in more fully-featured OSC environments such as Lemur and Pure Data, and I was hoping to be able to do it in Reaper, too. I've hacked together a system that lets me achieve the equivalent with sysex messages instead of OSC messages (using a JSFX plugin as a bridge between the script and the MIDI in/out ports, which sounds similar to what you're doing) but it would make my life easier to be able to do it natively with OSC.


----------



## Ozymandias (Mar 23, 2017)

pmcrockett said:


> In this context you're limited to the addresses in the .ReaperOSC file which are all predefined, though not necessarily all present in any given file.



Again, either I've misconstrued you or this is not right. The functions are fixed but you can definitely edit the addresses.

Anyhow, I do appreciate that you'd like bi-directional and user-definable everything. In my case, while I do rely on feedback for transport, mixing and parameter control, my Lemur projects are mostly made up of one-way triggers for actions.


----------



## Spip (Mar 24, 2017)

samphony said:


> There was a lua script as well that allows to mimic behaviors like cubendo use it. Including show only tracks with content at cursor.



You can do it simply with just a macro including, in this order :

Show all tracks
Select all items in current time selection
Select only tracks with selected items
Show selected tracks, hide others
Unselect all items/tracks/env points

(almost all actions are from SWS)


----------

