State Feedback: Difference between revisions
No edit summary |
|||
| (One intermediate revision by the same user not shown) | |||
| Line 8: | Line 8: | ||
=== State Feedback Options === | === State Feedback Options === | ||
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. | |||
{| 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 | |||
* ''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? === | ||
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 | ''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 | '''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: | |||
* 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 | === When to Disable State Feedback === | ||
State feedback is helpful when you want the widgets to updated to reflect | 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 | 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 === | |||
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 |
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.