Other Actions - FunkybotsEvilTwin/CSIWiki GitHub Wiki

NoAction

The cunningly named NoAction action, does nothing. I'll just pause for a second while that sinks in. Now, contrary to what you might be thinking, this can be really useful.

Let's say you go from "Home" to an "FX" zone. As discussed on the Zones page, this effectively overlays "FX" over the top of "Home". Widgets mapped in "FX" take over "Home" behaviour. Widgets mapped in "Home" but NOT in "FX" still work as they did before.

However, what if you want to stop this behavior? Maybe in "FX", we want to cancel the "Home" behaviour to avoid operator errors. For example, perhaps in "Home" I have the transport controls mapped to widgets, but in"FX" I want to "disable" these mappings.

In that case, map them to NoAction in "FX" and they will defiantly ignore your presses until you go back to "Home".

Zone "VST: UAD Teletronix LA-2A Silver (Universal Audio, Inc.)" "LA2ASlv"
     Rotary1             FXParam 0 
     RotaryPush1         NoAction
     DisplayUpper1       FixedTextDisplay "Thresh"
     DisplayLower1       FXParamValueDisplay 0

     Rotary2             FXParam 3
     RotaryPush2         NoAction  
     DisplayUpper2       FixedTextDisplay "HF Emph"
     DisplayLower2       FXParamValueDisplay 3

     Rotary3             FXParam 1
     RotaryPush3         NoAction 
     DisplayUpper3       FixedTextDisplay "Output" 
     DisplayLower3       FXParamValueDisplay 1 

     Rotary4             NoAction
     RotaryPush4         FXParam 2 [ 0.0 1.0 ]
     DisplayUpper4       FixedTextDisplay "CompLim" 
     DisplayLower4       FXParamValueDisplay 2

     Rotary5             FXParam 4 [ 0.0 0.50 1.0 ]
     RotaryPush5         NoAction     
     DisplayUpper5       FixedTextDisplay "Meter" 
     DisplayLower5       FXParamValueDisplay 4

     Rotary6             NoAction
     RotaryPush6         NoAction     
     DisplayUpper6       NoAction
     DisplayLower6       NoAction

     Rotary7             NoAction 
     RotaryPush7         NoAction
     DisplayUpper7       NoAction 
     DisplayLower7       NoAction 

     Rotary8             FXParam 8
     RotaryPush8         ToggleFXBypass
     DisplayUpper8       FixedTextDisplay "Wet"
     DisplayLower8       FXBypassedDisplay
ZoneEnd

FixedTextDisplay

Use the FixedTextDisplay action when you want to show static text within one of your displays. For instance, in this example, holding Shift and pressing RotaryPushA1 will reset (center) FXParam 1 on a particular fx.zon. But I want to leave myself a reminder of this functionality, so I added a message that will say "Press to Reset" on the lower display for that widget as soon as I engage the Shift modifier.

     Shift+RotaryPushA1        FXParam 1 [ 0.5 ]
     Shift+DisplayLowerA1      FixedTextDisplay "Press to Reset"

FixedRGBColorDisplay

Use this if you want to have a supported display widget [Select buttons on FaderPort8/16] change color in a particular zone. The values in the squiggly brackets represent the RGB (red, green, blue) color values.

In the below example, FixedRGBColorDisplay is being used to set the colors of certain buttons when entering this custom "NavigatorPan" SubZone. In this case, when the zone is active, the Pan button will turn blue { 0 55 255 }, and the other navigation buttons on this surface (Channel, Scroll) will go dark { 0 5 20 }.

Zone NavigatorPan
  Pan                   FixedRGBColorDisplay { 0 55 255 }

  Channel               FixedRGBColorDisplay { 0 5 20 }
  Channel               GoHome
  Channel               GoSubZone "NavigatorChannel"

  Scroll                FixedRGBColorDisplay { 0 5 20 }
  Scroll                GoHome
  Scroll                GoSubZone "NavigatorScroll"

  Shift+Scroll          FixedRGBColorDisplay { 0 5 20 }
  Shift+Scroll          GoHome
  Shift+Scroll          GoSubZone "NavigatorZoom"

  RotaryBigPush         Reaper _XENAKIOS_PANTRACKSCENTER // Xenakios/SWS: Pan selected tracks to center
  RotaryBig             TrackPan
ZoneEnd

ClearAllSolo

ClearAllSolo is a CSI action designed to clear all solo'd tracks and also work with the global MCU 'Solo' widget to provide a visual indication that one or more tracks in your project may be in a solo'd state.

Example: you have an MCU surface, and Reaper tracks 1-8 are currently mapped to the surface's 8 faders, but you've got track 32 solo'd. When assigned to a widget capable of displaying two-state feedback, your surface will display a light indicating there is a solo'd track anywhere in your project. Pressing the button assigned to this action, will then clear any and all solo'd tracks.

Zone Home
        Solo            ClearAllSolo

ToggleChannel

ToggleChannel allows you to define a widget, such as RotaryPush, to toggle functionality assigned to that action. Example: this allows you to toggle between TrackPanAutoLeft + TrackPanAutoLeftDisplay and TrackPanAutoRight + TrackPanAutoRightDisplay on the same channel on the same zone. To do this, first you would define "RotaryPush|" to the ToggleChannel action. Next, you would use Toggle+ as a modifier.

Zone Track
    RotaryPush|                 ToggleChannel

    Rotary|                     TrackPanAutoLeft RingStyle=Dot
    Toggle+Rotary|              TrackPanAutoRight RingStyle=Dot

    DisplayLower|      		TrackPanAutoLeftDisplay
    Toggle+DisplayLower|   	TrackPanAutoRightDisplay
ZoneEnd

This functionality can also be used in FX.zon's to group like-parameters (example: you can flip between the Frequency and Q control on an EQ plugin).

Zone "VST: ReaEQ (Cockos)" "ReaEQ"

RotaryPush1              ToggleChannel

Rotary1                  FXParam 0
DisplayUpper1            FXParamNameDisplay 0 "Freq1"
DisplayLower1            FXParamValueDisplay 0

Toggle+Rotary1           FXParam 2
Toggle+DisplayUpper1     FXParamNameDisplay 2 "Q 1"
Toggle+DisplayLower1     FXParamValueDisplay 2

....
ZoneEnd

SendMIDIMessage

SendMIDIMessage allows you to send arbitrary MIDI message to any CSI device based on whatever conditions you'd like to setup. This is great for devices like the MIDIFighterTwister, the Launch Pads, and other MIDI surfaces that will change colors or functionality based on MIDI messages they receive. For example, I'm doing this in my Home.zon to turn on strobing and change colors of buttons on my MIDI Fighter Twister based on the playback and record states in Reaper.

Zone Home
OnRecordStart SendMIDIMessage "B1 0F 50"     // Makes button B8 red on record start
OnRecordStart SendMIDIMessage "B5 0F 04"     // Makes button B8 strobe on record start
OnRecordStop  SendMIDIMessage "B1 0F 5F"     // Makes button B8 pink on record stop
OnRecordStop  SendMIDIMessage "B5 0F 00"     // Makes button B8 stop strobing on record stop
OnPlayStart   SendMIDIMessage "B1 0E 2D"     // Makes button B8 green on play start
OnPlayStart   SendMIDIMessage "B5 0E 04"     // Makes button B8 strobe on play start
OnPlayStop    SendMIDIMessage "B1 0E 5F"     // Makes button B8 pink on play stop
OnPlayStop    SendMIDIMessage "B5 0E 00"     // Makes button B8 stop strobing on play start
     IncludedZones
          "SelectedTrack"r
          "Buttons"
          "SelectedTrackFXMenu"
          "SelectedTrackSend"
          "SelectedTrackReceive"
     IncludedZonesEnd
ZoneEnd

You can, of course, assign this to a button.

Zone Home
    SommeButton     SendMIDIMessage "B5 0E 04"     // Makes button B8 strobe on play start

SendOSCMessage

SendOSCMessage is designed to send arbitrary OSC messages to the address specified in the action. The syntax is [Widget/Virtual Widget] SendOSCMessage "[OSC address] [Value]" as shown in the examples below...

OnInitialization SendOSCMessage "/Displays/UpperDisplay1 aString".   // String 
OnInitialization SendOSCMessage "/Displays/LowerDisplay1 -123"       // 32-bit integer
OnInitialization SendOSCMessage "/Displays/ValueDisplay1 24.98".     // Float

SetXTouchDisplayColors, RestoreXTouchDisplayColors

SetXTouchDisplayColors and RestoreXTouchDisplayColors are highly specialized actions for the X-Touch Universal and X-Touch Extenders to set the colors of all displays at once. When combined with the new OnZoneActivation, OnZoneDeactivation virtual widgets, these allow you to set all of the surface displays to the same color when you enter a SelectedTrackFXMenu zone and restore the prior colors when you exit that Zone...

Zone SelectedTrackFXMenu
	OnZoneActivation	SetXTouchDisplayColors Yellow
	OnZoneDeactivation	RestoreXTouchDisplayColors
...
ZoneEnd

On the X-Touch, you can also set all 8 colors to any arbitrary value you'd like, but it MUST be all 8 colors. You include the color name for each of the 8 channels in a string with quotes. The syntax for that is shown below:

      OnZoneActivation     SetXTouchDisplayColors "Red Red Magenta Blue Yellow Green Cyan Red"

Important Note: The X-Touch firmware only supports 8 track colors. These are not full RGB screens. CSI will translate the colors in Reaper to the nearest approximation of the colors supported on the X-Touch, which are...

Black
White
Red
Green
Blue
Cyan
Magenta
Yellow

Speak

OSARA is described as "a Reaper extension that aims to make Reaper accessible to screen reader users." CSI has added preliminary support for OSARA with the goal of improving CSI with these screen readers. A new "Speak" action was added that can be triggered in various scenarios. See the example below which would speak the phrase "UAD Fairchild 660 Compressor" when the FX.zon was activated.

Zone "VST: UAD Fairchild 660 (Universal Audio, Inc.)" "Fair660"
	OnZoneActivation	Speak "UAD Fairchild 660 Compressor"

	DisplayUpper1		FixedTextDisplay "HdRoom"
 	DisplayLower1		FXParamValueDisplay 9
	Rotary1			FXParam 9 [ 0.0 0.17 0.33 0.50 0.67 0.83 1.0 ]
   ...
ZoneEnd

Tip: Another use-case is creating a "Help" SubZone that can be called to identify what each button and control does on a surface. To do this, first you would add a SubZone called "Help" in your BUttons.zon with an action to call it up as needed (in this case, the smpteBeats button). Thanks to Equitone for the use-case and the examples below!

Zone Buttons
    SubZones
           Help
    SubZonesEnd

    smpteBeats                  GoSubZone Help

Then you'd have the below Help.zon file (assuming you're using an MCU or X-Touch Universal surface) where each control has its function spoken to the user. As with all things CSI, you may need to customize or otherwise modify this zone to fit your particular mapping.

Zone Help
    OnZoneActivation                Speak "XTouch help : ON"
    smpteBeats                      Speak "XTouch Help : OFF"
    smpteBeats                      LeaveSubZone

    // Modifiers declaration
    Flip           Speak "Flip, volume on rotaries, pan on faders"
    Flip           Flip

    // Left panel
    RotaryPush1        Speak "RotaryPush1, Set track 1 center pan"
    RotaryPush2        Speak "RotaryPush2, Set track 2 center pan"
    RotaryPush3        Speak "RotaryPush3, Set track 3 center pan"
    RotaryPush4        Speak "RotaryPush4, Set track 4 center pan"
    RotaryPush5        Speak "RotaryPush5, Set track 5 center pan"
    RotaryPush6        Speak "RotaryPush6, Set track 6 center pan"
    RotaryPush7        Speak "RotaryPush7, Set track 7 center pan"
    RotaryPush8        Speak "RotaryPush8, Set track 8 center pan"
    Rotary1            Speak "Rotary1, Track 1 pan value"
    Rotary2            Speak "Rotary2, Track 2 pan value"
    Rotary3            Speak "Rotary3, Track 3 pan value"
    Rotary4            Speak "Rotary4, Track 4 pan value"
    Rotary5            Speak "Rotary5, Track 5 pan value"
    Rotary6            Speak "Rotary6, Track 6 pan value"
    Rotary7            Speak "Rotary7, Track 7 pan value"
    Rotary8            Speak "Rotary8, Track 8 pan value"
    Flip+Rotary1       Speak "Flip+Rotary1, Track 1 volume" 
    Flip+Rotary2       Speak "Flip+Rotary2, Track 2 volume" 
    Flip+Rotary3       Speak "Flip+Rotary3, Track 3 volume" 
    Flip+Rotary4       Speak "Flip+Rotary4, Track 4 volume" 
    Flip+Rotary5       Speak "Flip+Rotary5, Track 5 volume" 
    Flip+Rotary6       Speak "Flip+Rotary6, Track 6 volume" 
    Flip+Rotary7       Speak "Flip+Rotary7, Track 7 volume" 
    Flip+Rotary8       Speak "Flip+Rotary8, Track 8 volume" 
    RecordArm1         Speak "RecordArm1, Track 1 record arm"
    RecordArm2         Speak "RecordArm2, Track 2 record arm"
    RecordArm3         Speak "RecordArm3, Track 3 record arm"
    RecordArm4         Speak "RecordArm4, Track 4 record arm"
    RecordArm5         Speak "RecordArm5, Track 5 record arm"
    RecordArm6         Speak "RecordArm6, Track 6 record arm"
    RecordArm7         Speak "RecordArm7, Track 7 record arm"
    RecordArm8         Speak "RecordArm8, Track 8 record arm"
    Solo1              Speak "Solo1, Track 1 solo"
    Solo2              Speak "Solo2, Track 2 solo"
    Solo3              Speak "Solo3, Track 3 solo"
    Solo4              Speak "Solo4, Track 4 solo"
    Solo5              Speak "Solo5, Track 5 solo"
    Solo6              Speak "Solo6, Track 6 solo"
    Solo7              Speak "Solo7, Track 7 solo"
    Solo8              Speak "Solo8, Track 8 solo"
    Mute1              Speak "Mute1, Track 1 mute"
    Mute2              Speak "Mute2, Track 2 mute"
    Mute3              Speak "Mute3, Track 3 mute"
    Mute4              Speak "Mute4, Track 4 mute"
    Mute5              Speak "Mute5, Track 5 mute"
    Mute6              Speak "Mute6, Track 6 mute"
    Mute7              Speak "Mute7, Track 7 mute"
    Mute8              Speak "Mute8, Track 8 mute"
    Select1            Speak "Select1, Track 1 select"
    Select2            Speak "Select2, Track 2 select"
    Select3            Speak "Select3, Track 3 select"
    Select4            Speak "Select4, Track 4 select"
    Select5            Speak "Select5, Track 5 select"
    Select6            Speak "Select6, Track 6 select"
    Select7            Speak "Select7, Track 7 select"
    Select8            Speak "Select8, Track 8 select"
    Hold+Select1       Speak "Hold+Select1, Track 1 volume to 0 DB"  
    Hold+Select2       Speak "Hold+Select2, Track 2 volume to 0 DB"
    Hold+Select3       Speak "Hold+Select3, Track 3 volume to 0 DB"
    Hold+Select4       Speak "Hold+Select4, Track 4 volume to 0 DB"
    Hold+Select5       Speak "Hold+Select5, Track 5 volume to 0 DB"
    Hold+Select6       Speak "Hold+Select6, Track 6 volume to 0 DB"
    Hold+Select7       Speak "Hold+Select7, Track 7 volume to 0 DB"
    Hold+Select8       Speak "Hold+Select8, Track 8 volume to 0 DB"
    nameValue          Speak "nameValue (No action)"
    GlobalView         Speak "GlobalView (No action)"
    Fader1             Speak "Fader1, Track 1 volume"
    Fader2             Speak "Fader2, Track 2 volume"
    Fader3             Speak "Fader3, Track 3 volume"
    Fader4             Speak "Fader4, Track 4 volume"
    Fader5             Speak "Fader5, Track 5 volume"
    Fader6             Speak "Fader6, Track 6 volume"
    Fader7             Speak "Fader7, Track 7 volume"
    Fader8             Speak "Fader8, Track 8 volume"
    Flip+Fader1        Speak "Flip+Fader1, Track 1 pan value"
    Flip+Fader2        Speak "Flip+Fader2, Track 2 pan value"
    Flip+Fader3        Speak "Flip+Fader3, Track 3 pan value"
    Flip+Fader4        Speak "Flip+Fader4, Track 4 pan value"
    Flip+Fader5        Speak "Flip+Fader5, Track 5 pan value"
    Flip+Fader6        Speak "Flip+Fader6, Track 6 pan value"
    Flip+Fader7        Speak "Flip+Fader7, Track 7 pan value"
    Flip+Fader8        Speak "Flip+Fader8, Track 8 pan value"
    MasterFader        Speak "MasterFader, Master track volume"

    // Right panel
    Track                       Speak "Track, OSARA: Toggle Report changes made via control surfaces"
    Pan                         Speak "Pan, OSARA: Toggle Report track numbers"
    EQ                          Speak "EQ, OSARA: Toggle Report transport state (play, record, etc.)"
    Send                        Speak "Send, OSARA: Toggle Report markers during playback"
    Plugin                      Speak "Plugin, OSARA: Toggle Report time movement during playback/recording"
    Instrument                  Speak "Instrument, OSARA: Toggle Report position when scrubbing"
    MidiTracks                  Speak "MidiTracks, No action"
    Inputs                      Speak "Inputs, No action"
    AudioTracks                 Speak "AudioTracks, No action"
    AudioInstrument             Speak "AudioInstrument, No action"
    Aux                         Speak "Aux, No action"
    Busses                      Speak "Busses, No action"
    Outputs                     Speak "Outputs, No action"
    User                        Speak "User, No action"
    F1                          Speak "F1, Toggle selected track send and tracks (Osara don't works in track send zone)"
    F2                          Speak "F2, Toggle selected track receive and tracks (Osara don't works in track receive zone)"
    F3                          Speak "F3, All track visible"
    F4                          Speak "F4, Track folders only"
    F5                          Speak "F5, No action"
    F6                          Speak "F6, No action"
    F7                          Speak "F7, No action"
    F8                          Speak "F8, No action"
    Shift                       Speak "Shift, Shift modifier"
    Shift                       Shift
    Option                      Speak "Option, Option modifier"
    Option                      Option
    Control                     Speak "Control, Control modifier"
    Control                     Control
    Alt                         Speak "Alt, Alt modifier"    
    Alt                         Alt
    Read                        Speak "Read, Read mode automation"
    Write                       Speak "Write, Write mode automation"
    Trim                        Speak "Trim, Trim mode automation"
    Touch                       Speak "Touch, Touch mode automation"
    Latch                       Speak "Latch, Latch mode automation"
    Group                       Speak "Group, Group mode automation"
    Shift+Read                  Speak "Shift+Read, Global Read mode automation"      
    Shift+Write                 Speak "Shift+Write, Global Write mode automation"      
    Shift+Trim                  Speak "Shift+Trim, Global Trim mode automation"      
    Shift+Touch                 Speak "Shift+Touch, Global Touch mode automation"      
    Shift+Latch                 Speak "Shift+Latch, Global Latch mode automation"      
    Shift+Group                 Speak "Shift+Group, Global Group mode automation"      
    Save                        Speak "Save, NoAction "
    Undo                        Speak "Undo, NoAction"
    Cancel                      Speak "Cancel, NoAction""
    Enter                       Speak "Enter, NoAction""
    Marker                      Speak "Marker, Select master track"
    Hold+Marker                 Speak "Hold+Marker, Master track to 0 db"
    Nudge                       Speak "Nudge, NoAction""
    Cycle                       Speak "Cycle, NoAction""
    Drop                        Speak "Drop, NoAction""
    Replace                     Speak "Replace, NoAction""
    Click                       Speak "Click, Toggle click"
    Solo                        Speak "Solo, NoAction""
    Rewind                      Speak "Rewind, Go to previous bar"
    Hold+Rewind                 Speak "Hold+Rewind, Go to start of project"
    FastForward                 Speak "FastForward, Go to next bar"
    Hold+FastForward            Speak "Hold+Rewind, Go to end of project"
    Stop                        Speak "Stop, Stop playing or recording"
    Play                        Speak "Play, Play/Pause"
    Record                      Speak "Record, Start recording"
    BankLeft                    Speak "BankLeft, Shift faders 8 tracks to left"
    BankRight                   Speak "BankRight, Shift faders 8 tracks to right"
    ChannelLeft                 Speak "ChannelLeft, Shift faders 1 tracks to left"
    ChannelRight                Speak "ChannelRight, Shift faders 1 tracks to right"    
    Up                          Speak "Up, Go to previous track"    
    Down                        Speak "Down, Go to next track"    
    Left                        Speak "Left, Select and go to previous item"    
    Right                       Speak "Right, Select and go to next item"    
    Zoom                        Speak "Zoom, Toggle Track mode and FX mode"    
    JogWheelRotaryCW            Speak "JogWheelRotaryCW, Move cursor 1 pixel to left"    
    JogWheelRotaryCCW           Speak "JogWheelRotaryCCW, Move cursor 1 pixel to right"     
    Scrub                       Speak "Scrub, Toggle loop segment scrub at edit cursor"     
    Footswitch1                 Speak "Play/Pause"     
    Footswitch2                 Speak "Start recording"     
ZoneEnd

SpeakFXMenuName, SpeakTrackSendDestination, SpeakTrackReceiveSource

The following new actions were added for OSARA users in order to allow CSI to speak the FX Menu Name of a plugin (SpeakFXMenuName) in the menu, or the track send destination (SpeakTrackSendDestination), or the receive source (SpeakTrackReceiveSource). These can be assigned to widgets to trigger when these actions take place. Note: SpeakTrackSendDestination and SpeakTrackReceiveSource will include the track number when speaking.

Zone SelectedTrackFXMenu
    RecArm     SpeakFXMenuName

Zone SelectedTrackSend
    RecArm     SpeakTrackSendDestination

Zone SelectedTrackReceive
    RecArm     SpeakTrackReceiveSource

ToggleRestrictTextLength

ToggleRestrictTextLength is designed to automatically truncate display text to a value you define after the action. For instance, if you have an MCU display that accommodates 7 characters on the screen, you can now instruct CSI to automatically truncate any track or FX parameter names to 7 characters. CSI. CSI will use some logic to strip out some characters to try to restrict the text length in a meaningful way. This action also works OSC surfaces.

You can set this up in your home.zon as shown below:

Zone Home
    OnInitialization ToggleRestrictTextLength 7

Or you could assign this to a button if you wanted to toggle the behavior.

Zone Buttons
    SomeButton     ToggleRestrictTextLength 7

Let's say you had a display that allowed for 10 characters, you would simply change the number following the ToggleRestrictTextLength action in your zone file.

Zone Home
    OnInitialization ToggleRestrictTextLength 10

ToggleUseLocalModifiers

ToggleUseLocalModifiers will change the behavior of modifiers triggered on the selected surface from Global (impacting other surfaces) to Local (impacting only the surface where the modifier was engaged). There is also a corresponding Broadcast and Listen option called "Local Modifiers" which will allow you to create a closed modifier group.

In the below example, when paired with an FXPrologue zone, any new auto-mapped or learned plugins would use LocalModifiers when entering an FX zone, and go back to global modifiers when that FX zone was deactivated.

Zone FXPrologue
	OnZoneActivation    ToggleUseLocalModifiers
	OnZoneDeactivation  ToggleUseLocalModifiers
	Plugin              ClearFXSlot
ZoneEnd

CSINameDisplay, CSIVersionDisplay

The CSINameDisplay and CSIVersionDisplay actions can be useful for troubleshooting. The former will show the acronym "CSI" on a display, and the latter will display the CSI major version number.

LeftDisplay     CSINameDisplay
RightDisplay    CSIVersionDisplay