Proposal MultiButtons

From Audacity Wiki
Jump to: navigation, search
Proposal pages help us get from feature requests into actual plans. This proposal page is about single buttons that perform multiple functions.
Proposal pages are used on an ongoing basis by the Audacity development team and are open to edits from visitors to the wiki. They are a good way to get community feedback on a proposal.

  • Note: Proposals for Google Summer of Code projects are significantly different in structure, are submitted via Google's web app and may or may not have a corresponding proposal page.


In the past we've had 'problems' with too many different kinds of button for zooming. We could for example have buttons that zoom in and out x10, x100 /10 /100, that zoom to a particular fixed scale, the zoom-toggle buttons which move back and forth between two settings, as well as the zoom to selection, zoom selection to 80%, zoom to fit track, zoom to fit tracks.

We are about to have problems with too many different kinds of button for play. Play looped, play at speed, play excluding, play with/without RT preview, play with/without spectral selection.

Proposed Feature

It looks to me as if zoom and play require a dialog for all the settings, but that presets are so important that we have to have those too.

Bulb icon This feature is best implemented after we already have configurable menus and configurable choice of toolbar buttons.
  • Multibuttons can be viewed as a graphical version of a menu. Multibuttons are like drop down menus, with button graphics rather than text.

My proposed solution is that on the control toolbar where we currently have individual buttons, each button belongs to a family of related buttons (e.g. play or record buttons). Usually just one button from each family will be showing (in position '1'). As far as we can, we decorate the different buttons to show the different parameter choices that have been made for each, so we could actually have looped-play-excluding-region-with-spectral-selection shown on the button. The most useful button will be in position 1.

You can click a button to activate it. You can hover over a button and click a number key to activate the nth button (normal key binding if any is ignored). You can press the drop down icon that appears under the button when you hover over it and the whole set drops down so you can click any.

Shift click on a button allows you to configure it. There is also a configuration icon that appears when the full grid is shown. One special configuration options for a button is 'sticky' which means that if the button is clicked it stays on the toolbar even after the button has done its thing, so that you can use it again easily.

Yes the idea needs refinement e.g. to make sure everything is discoverable and that a user won't get stuck in a strange state. it does however allow us to have a very large number of related buttons in a small space, and for the user not to be overwhelmed.

  • Peter 28Nov16: A multi-button for Stop would be useful too: normal "Stop" (leaves cursor unchanged) & "Stop and Set Cursor" (whose shortcut is now "X").
  • Peter 28Nov16: Indeed multi-buttons could work for the Home and End buttons in the Transport Toolbar - anabling us to have long and short skips backwards/forwards (for which I think we have existing shortcuts but no commands or buttons, making them "occult commands") as well as just Home and End.


  1. What is the purpose of the feature? - To allow for many user-preset variants on standard commands accessible via button. E.g, play-looped-at-x1.3.
  2. What are the relative importances of the different features in it? (this is used to justify having a large button, a small button or just a menu item, for example) - The user can decide which presets are important to them and have them visible on the toolbar, with the less valued ones in a drop-down.
  3. Does the feature have modes, and if so how easy are the modes to get out of? (stuck in a mode) - You could regard having a minor button such as play-excluding-at-x2-speed in prime position (first) as a 'stuck in mode'. That would happen if the user had made a minor button sticky. Fix is to NOT persist the prime-button between sessions, so if you restart Audacity it is unstuck.
  4. Does the feature have invalid states that can be greyed out? - My intention is no. For example you can go straight from record to play.
  5. What is the factorisation of the feature? (e.g. pin/unpin can operate on its own, independent of scrub/seek). - Play: Speed/Direction/Loop/Excluding. Record: Steriosity/Triggers/Append. Zoom: Factor/Centre.
  6. What are the justifications for 'novelty' in the design? (e.g. RSI free operation, lack-of-precision in conventional sliders). - Desire for many easy to access canned variants on 'standard' features. It isn't quite as novel as it looks as it is essentially a menu system with buttons instead of text.
  7. Is VI use integral? (e.g. labels added a label editor dialog, essential for VI, useful for non ). - No. Menu style navigation is possible, but probably the customisation features would additionally need standard dialogs to be VI accessible and that is not planned 'from the start'.

Developer Backing

  • James Crook


Below is a rough and ready mock up of the multibuttons, showing buttons dropped down, and a button configuration option panel. The graphics would need to be nicer than this. It's just to give some idea. The options panel would only show if a configure icon had been pressed, and it would configure the currently selected button. It would for example be possible to have a button that is both loop play and play at speed. We have at least 8 options here. Play at speed could probably benefit from further options for what speed, so a looped play at x2 would be possible for a button. The x2 should be written on the button.

Play Button Details

  • Looped: Yes/No
  • Play-Excluding: Yes/No
  • Speed: Normal x0.5 x0.66 x1.5, x2 (or arbitrary) And now we have scrubbing, negative speeds, x-0.5 x-1 and 'By Mouse'.

Stop button details

  • Stop and reset play position to existing play cursor (existing behaviour)
  • Stop here (and reset play cursor to here) (just like a tape recorder)

Record Button Details

  • Pre-roll (continuous pre capture buffer)
  • Timer record, or trigger record.
  • Stereo or Mono record
  • Timer stop or trigger stop.
  • Auto label
  • Append, or to New track.
  • Punch-in record

Zoom Button Details

  • x0.1, x0.5, x2 x10, Selection->100%, ->80%, 100%->Selection, to-fit, (or arbitrary a to b) (or to arbitrary scale e.g to sample level)
    • Toggle (alternative parameters for toggled pair, e.g. x2 paired with x0.5)
  • FixedPoint: Centre, left, right (or arbitrary)