State Feedback: Difference between revisions

From Loopy Pro Wiki
No edit summary
 
(One intermediate revision by the same user not shown)
Line 8: Line 8:


=== State Feedback Options ===
=== State Feedback Options ===
For some widget types there are state feedback options. For some widget types (sliders, xy pads and non-stepped dials, for example), state feedback is always on. Those widgets that have state feedback options have a gear wheel [[File:Widget options icon.png|31x31px]] in the widget's edit panel.
Those widgets that have state feedback options have a gear wheel [[File:Widget options icon.png|31x31px]] in the widget's edit panel to access the options. NOTE: some widgets (such as X/Y pads,  sliders, non-stepped dials) have no state feedback options.
 
[[File:Input_Selector_Setup.jpg|frameless]]
 
To access the State Feedback Options, tap the gear wheel [[File:Widget options icon.png|31x31px]] in the widget edit panel.
 
[[File:State feedback options panel.png|frameless]]
{| class="wikitable"
{| class="wikitable"
|
|- style="vertical-align:top;"
|
|[[File:Input_Selector_Setup.jpg|frameless]]
|[[File:State feedback options panel.png|frameless]]
|-
|-
|To access the State Feedback Options, tap the gear wheel [[File:Widget options icon.png|31x31px]] in the widget edit panel.
|
|
|
|}The State Feedback options determine how Loopy Pro synchronizes the widget state with its corresponding actions. The options are:  
|}
 
 
 
The State Feedback option determines how Loopy Pro synchronizes the widget state with its corresponding actions. The options are:  


* ''First Action'' - set the widget’s state based on the state of the widget’s first action (or the first action of a widget step or radio button). If a widget’s actions are to play clip 1 and turn on the reverb. The widget’s state is determined by solely by whether clip 1 is playing or not.
* ''First Action'' - set the widget’s state based on the state of the widget’s first action (or the first action of a widget step or radio button). If a widget’s actions are to play clip 1 and turn on the reverb. The widget’s state is determined by solely by whether clip 1 is playing or not.
* ''All Actions'' - set the widget’s state based on the state of all of the actions together.  If a widget’s actions are to play clip 1 and turn on the reverb, it will show as on/highlighted only when clip 1 is playing and the reverb is on. If you turn off the reverb, the widget will become unlit even if clip 1 is playing.
* ''All Actions'' - set the widget’s state based on the state of all of the actions together.  If a widget’s actions are to play clip 1 and turn on the reverb, it will show as on/highlighted only when clip 1 is playing and the reverb is on. If you turn off the reverb, the widget will become unlit even if clip 1 is playing.
* ''Disabled'' - ignore the state of the widget’s actions. For radio buttons and stepped dials, this setting leaves the dial or radio button at the last step that was active. This setting is used when you want the widget to stay where you set it regardless of what is happening in Loopy Pro. See the section ''When to Disable State Feedback'' below.
* ''Disabled'' - ignore the state of the widget’s actions. For radio buttons and stepped dials, this setting leaves the dial or radio button at the last step that was active. This setting is used when you want the widget to stay where you set it regardless of what is happening in Loopy Pro. See the section ''When to Disable State Feedback'' below.


=== How Are Actions Matched? ===
=== How Are Actions Matched? ===
When state feedback is on, Loopy Pro synchronizes the widget's state based on its actions and the state of the actions' targets. For example, if a button is set to "Play Clip 1," it will be highlighted when Clip 1 is playing. If the action is "Mute Clip 1," the button will highlight when that clip is muted. Similarly, if the button's action is "Mute All Clips," it will only be highlighted when all clips are muted. Pressing the button will mute all clips and highlight the button (unless State Feedback is disabled). If you unmute any clips, the button will no longer be highlighted.
The state matching is based on the action and the state of the action target. For example, if a button has the action ''Play/Stop Clip 1'', the button will be highlighted if Clip 1 is in the play state. It will be unhighlighted if the clip is in the stopped state. If the action is ''Stop Clip 1'' however, the button will be highlighted only when the clip 1 is stopped.


Trigger Widget actions match if the triggered widget is on/highlighted after triggered. If you have a button that triggers another button, for example, the first button’s state will be determined by the state of the button it triggered.
''Trigger Widget'' actions match if the triggered widget is on/highlighted after it is triggered. If you have a button that triggers another button, the first button’s state will be determined by the state of the button it triggered. If a ''Trigger Widget'' action selects a target element (a radio button or a dial step), the action matches when the selected item is the current item of that widget.


Some actions in Loopy Pro don't have an associated state for the app to track. When an action lacks a state, Loopy Pro treats it as "false." For example, the "Send MIDI Message" action doesn't have a state that Loopy can monitor, as it has no way to determine the state of the message receiver. If a widget performs multiple actions and one or more of them can't be tracked, the "All Actions" state feedback will always indicate that the state is off.
'''Ignored Actions'''. Some actions are ignored for state matching because they don't lead to a persistent (matchable) state. For example, a ''Send MIDI Message'' action or ''Merge/Move'' clip action don't result in a persistent matchable state. '''NOTE!''' In Loopy Pro 1.x, these ignored actions might have been evaluated as being false. There are ways to work around the lack of state-matching for such actions. See [[Tech Note: Persistent Send MIDI Widgets#Tech Note: Persistent Send MIDI Widgets|Tech_Note:_Persistent Send_MIDI Widgets]]


==== Faking/Forcing State Feedback ====
There may be cases where you want a button to be highlighted after being pressed even though its actions don't lead to the state being on/true. There are two convenient ways of dealing with this:


There are ways to work around the lack of state-matching for such actions. See [[Tech Note: Persistent Send MIDI Widgets#Tech Note: Persistent Send MIDI Widgets|Tech_Note:_Persistent Send_MIDI Widgets]]
* Use radio buttons with State Feedback disabled instead of buttons or a button grid. When state feedback is disabled, the last selected radio button is highlighted.
* Have your button trigger select or scroll to a stepped dial step that performs the desired action.
** Set up a stepped dial with a step that performs the action or actions you want.
** Set up your button to trigger that dial step. When that step changes, the button will stop being highlighted.
** ''Option'': You may want to hide the dial on another page.


=== When to disable state feedback ===
=== When to Disable State Feedback ===
State feedback is helpful when you want the widgets to updated to reflect the actions they trigger. There are situations where you will want Loopy Pro to leave a dial or radio button set to its assigned step regardless of the underlying actions. You will want to disable state feedback for radio buttons and stepped dials that will be used to trigger actions regardless of the state of your clips and widgets.
State feedback is helpful when you want the widgets to updated to reflect Loopy Pro's state as it changes. But there are situations where you want to initiate an action or actions with a widget and want that widget to stay highlighted/selected even if the state changes because you want the widget state to reflect only your actions. When this is the case, disable state feedback.


Here are a couple of examples where you would want to disable state feedback:
Here are some examples of situations where you would want to disable state feedback:


* Sequenced actions. Sometimes you use dial steps are radio buttons to sequence actions and you don't want changes in state to change the active step.
* [[Synth Routing Switch]] example - Let’s say you want a group or radio buttons that mutes all the synths but the one. Each radio button has two actions, trigger the buttons called mute all synths then unmute the targeted synth. We can’t use first  action for state feedback because the first action mutes all the synths and when the radio button has executed all the actions, there will be a synth that is not muted So, we need to disable state feedback. The radio button will reflect whatever radio button was pressed.
* [[Synth Routing Switch]] example - Let’s say you want a group or radio buttons that mutes all the synths but the one. Each radio button has two actions, trigger the buttons called mute all synths then unmute the targeted synth. We can’t use first  action for state feedback because the first action mutes all the synths and when the radio button has executed all the actions, there will be a synth that is not muted So, we need to disable state feedback. The radio button will reflect whatever radio button was pressed.
* Context-Sensitive Dial example - In the article [[Context-Sensitive Actions Using Follow Actions and a Stepped Dial]], we discuss using a dial that is set up by follow actions to a step that will be triggered manually. If State Feedback were on, Loopy Pro might change the dial in an unhelpful way.
* Context-Sensitive Dial example - In the article [[Context-Sensitive Actions Using Follow Actions and a Stepped Dial]], we discuss using a dial that is set up by follow actions to a step that will be triggered manually. If State Feedback were on, Loopy Pro might change the dial in an unhelpful way.


==== Testing State Feedback ====
=== Testing State Feedback ===
There may be times when you want to use state feedback with a group of actions, and it is not behaving as you expect. When that happens test each action individually in a widget to see what state results from triggering the widget.
There may be times when you want to use state feedback with a group of actions, and it is not behaving as you expect. When that happens test each action individually in a widget to see what state results from triggering the widget.


=== Tips and Tricks ===
=== Tips and Tricks ===
See [[Tech Note: Persistent Send MIDI Widgets]]
See [[Tech Note: Persistent Send MIDI Widgets]]

Latest revision as of 06:26, 31 March 2026

Loopy Pro is equipped with a state feedback system that keeps widgets’ visual states in sync with the elements they control.

For example, if you have a slider to control a plugin’s delay time, the slider will be updated to reflect the plugin’s delay time whether the delay time is changed by the slider, an interaction with the plugin, a MIDI binding, or changing the plugin’s preset. Or, you might have a button that triggers playback of a particular clip. Whenever that clip plays, the button will become highlighted to indicate that the clip is playing — no matter what triggered the playback.

For buttons, button grids, and radio buttons, state feedback determines whether the button is lit/highlighted or unlit. For stepped dials, state feedback can determine which step is shown as active which means that it will also affect what step is triggered when the dial is triggered or nudged.

State Feedback Options

Those widgets that have state feedback options have a gear wheel in the widget's edit panel to access the options. NOTE: some widgets (such as X/Y pads, sliders, non-stepped dials) have no state feedback options.

To access the State Feedback Options, tap the gear wheel in the widget edit panel.

The State Feedback options determine how Loopy Pro synchronizes the widget state with its corresponding actions. The options are:

  • First Action - set the widget’s state based on the state of the widget’s first action (or the first action of a widget step or radio button). If a widget’s actions are to play clip 1 and turn on the reverb. The widget’s state is determined by solely by whether clip 1 is playing or not.
  • All Actions - set the widget’s state based on the state of all of the actions together.  If a widget’s actions are to play clip 1 and turn on the reverb, it will show as on/highlighted only when clip 1 is playing and the reverb is on. If you turn off the reverb, the widget will become unlit even if clip 1 is playing.
  • Disabled - ignore the state of the widget’s actions. For radio buttons and stepped dials, this setting leaves the dial or radio button at the last step that was active. This setting is used when you want the widget to stay where you set it regardless of what is happening in Loopy Pro. See the section When to Disable State Feedback below.

How Are Actions Matched?

The state matching is based on the action and the state of the action target. For example, if a button has the action Play/Stop Clip 1, the button will be highlighted if Clip 1 is in the play state. It will be unhighlighted if the clip is in the stopped state. If the action is Stop Clip 1 however, the button will be highlighted only when the clip 1 is stopped.

Trigger Widget actions match if the triggered widget is on/highlighted after it is triggered. If you have a button that triggers another button, the first button’s state will be determined by the state of the button it triggered. If a Trigger Widget action selects a target element (a radio button or a dial step), the action matches when the selected item is the current item of that widget.

Ignored Actions. Some actions are ignored for state matching because they don't lead to a persistent (matchable) state. For example, a Send MIDI Message action or Merge/Move clip action don't result in a persistent matchable state. NOTE! In Loopy Pro 1.x, these ignored actions might have been evaluated as being false. There are ways to work around the lack of state-matching for such actions. See Tech_Note:_Persistent Send_MIDI Widgets

Faking/Forcing State Feedback

There may be cases where you want a button to be highlighted after being pressed even though its actions don't lead to the state being on/true. There are two convenient ways of dealing with this:

  • Use radio buttons with State Feedback disabled instead of buttons or a button grid. When state feedback is disabled, the last selected radio button is highlighted.
  • Have your button trigger select or scroll to a stepped dial step that performs the desired action.
    • Set up a stepped dial with a step that performs the action or actions you want.
    • Set up your button to trigger that dial step. When that step changes, the button will stop being highlighted.
    • Option: You may want to hide the dial on another page.

When to Disable State Feedback

State feedback is helpful when you want the widgets to updated to reflect Loopy Pro's state as it changes. But there are situations where you want to initiate an action or actions with a widget and want that widget to stay highlighted/selected even if the state changes because you want the widget state to reflect only your actions. When this is the case, disable state feedback.

Here are some examples of situations where you would want to disable state feedback:

  • Sequenced actions. Sometimes you use dial steps are radio buttons to sequence actions and you don't want changes in state to change the active step.
  • Synth Routing Switch example - Let’s say you want a group or radio buttons that mutes all the synths but the one. Each radio button has two actions, trigger the buttons called mute all synths then unmute the targeted synth. We can’t use first  action for state feedback because the first action mutes all the synths and when the radio button has executed all the actions, there will be a synth that is not muted So, we need to disable state feedback. The radio button will reflect whatever radio button was pressed.
  • Context-Sensitive Dial example - In the article Context-Sensitive Actions Using Follow Actions and a Stepped Dial, we discuss using a dial that is set up by follow actions to a step that will be triggered manually. If State Feedback were on, Loopy Pro might change the dial in an unhelpful way.

Testing State Feedback

There may be times when you want to use state feedback with a group of actions, and it is not behaving as you expect. When that happens test each action individually in a widget to see what state results from triggering the widget.

Tips and Tricks

See Tech Note: Persistent Send MIDI Widgets