Feature #835

Feature #821: continuous frequency sonification

level/solo control for sonified layers

Added by Chris Cannam over 10 years ago. Updated almost 10 years ago.

Status:ClosedStart date:2014-01-08
Priority:NormalDue date:
Assignee:Chris Cannam% Done:

90%

Category:-
Target version:-

Description

Lacking the parameter box area found in SV to the right of the panes, we have no way to control the solo/mute and levels for sonified layers. (And in any case we'll need a simpler way than those.)

We could add a set of toggle buttons in the toolbar? Circular control knobs? Circular control knobs that toggle on/off when simply clicked? What other possibilities might be good?

Any opinions welcomed.

tony_control_bar.png - proposed sonification controls 18.8 KB, downloaded 35 times Justin Salamon, 2014-01-23 12:27 AM

History

#1 Updated by Chris Cannam over 10 years ago

  • Assignee set to Chris Cannam
  • % Done changed from 0 to 40

Added some controls that cycle through visibility and audibility states for the three kinds of layer we currently have. This doesn't work very well, it's quite clumsy and will have to be revised, but it does mean we have something to work with while tuning the audio output.

#2 Updated by Justin Salamon over 10 years ago

Just sharing some thoughts...

From my experience listening to pitch contours together with the original audio signal, it is very helpful to be able to control the volume of each source separately. Sometimes controlling the panning is also very handy.

As far as sonification of the f0 curve goes, I have mainly worked with sinusoids in the past, though sometimes something with a more distinct timbre (e.g. sawtooth wave or a sinewave with some harmonics) helps in distinguishing the sonification from the original audio signal.

#3 Updated by Chris Cannam over 10 years ago

Reshuffled (c21b87a62ce6) so as to have two separate sets of toggle buttons, one for show and one for play. Still a rough draft though.

This is less simple and I think less clear, but it is quicker to use once you understand it. I don't think we have the "right" answer yet, so other suggestions are welcome (include a sketch if you like!)

#4 Updated by Justin Salamon over 10 years ago

Reshuffled again (8571ad52349a) to order controls as proposed most recently (see attached), still missing the gain and pan knobs.

#5 Updated by Justin Salamon over 10 years ago

Gain (180e6af1806c) and pan (106fdf38c6c9) knobs now added, but missing text labels to distinguish gain from pan.

#6 Updated by Chris Cannam about 10 years ago

Suggestion from an earlier email:

One thing we could try... would be to lose the "show" toggle (the eye button) entirely and instead just have an active/inactive indicator like a checkbox. Then when a layer is active, it is displayed and its playback controls are enabled. When it's inactive, it is hidden and not played and its playback controls either disappear or are greyed out.

That would slightly simplify the workflow -- because toggling a feature entirely would only take one click -- and would remove the possibility of having an invisible layer still be heard, something that I think is probably a source of confusion more than a useful feature. It would also mean we don't need an icon meaning "show" at all.

#7 Updated by Justin Salamon about 10 years ago

I've given a shot at implementing this just for the pitch layer, it works until you click anywhere in the selection pane, when the playPitch button is re-enabled even though it should stay greyed out. I've traced the problem to line 938 of source:src/MainWindow.cpp:
connect(this, SIGNAL(canPlay(bool)), m_playPitch, SLOT(setEnabled(bool)));

This seems to link the enabled state of the button to whether there is pitch audio to play or not. Commenting out this line solves this, but then the playPitch button is not greyed out when Tony is first launched.

Chris?

#8 Updated by Chris Cannam about 10 years ago

We probably want a separate canXX() signal emitted from updateMenuStates in MainWindow to communicate the enabled state for each of the play-layer buttons.

That is, something like canPlayPitchTrack would be emitted if canPlay has already been found to be true and the pitch track is enabled according to the analyser.

Then the MainWindow would connect that canXX function to the enabled state of the button, instead of the generic canPlay.

The other part of this as described above was

to lose the "show" toggle (the eye button) entirely and instead just have an active/inactive indicator like a checkbox

This could in theory be accomplished by just replacing the pixmap on the "eye" button with the layer type pixmap, and removing the layer type image.

#9 Updated by Justin Salamon about 10 years ago

I like the idea of removing the layer image widget and using the icon on the "show" toggle. Assuming we can fix the enabling/disabling of the play button, it turns the "show" toggle into a "activate layer" toggle, and removes ambiguity.

I'll give it a shot (at least the basic stuff), I may need help with setting up the signals (I'm not 100% clear on how to setup/send signals, yet).

#10 Updated by Justin Salamon about 10 years ago

ok, i've removed the icon widgets and replaced the "eye" icon on each show button with the relevant icon for each layer. I've also added an empty widget between each group of controls to space them out a little, as they were too close to each other which was confusing. The spacing between the controls for a single layer is still a little weird (cf. spacing between play button pan/gain controls), but I wasn't able to find a quick fix for that.

Hiding any layer will now turn of its sonification and disable the its button, but I haven't touched the signaling yet, so clicking anywhere on the selection pane will re-enable any disabled buttons.

Comments?

#11 Updated by Matthias Mauch almost 10 years ago

  • Status changed from New to Resolved
  • % Done changed from 40 to 100

This all seems to be working great.

I didn't understand Justin's last comment (I think this is because it may have been resolved):

Hiding any layer will now turn of its sonification and disable the its button, but I haven't touched the signaling yet, so clicking anywhere on the selection pane will re-enable any disabled buttons.

i also moved the toolbar to the bottom of the application, since that resulted in fewer (or none) of the buttons to be hidden on small-ish screens; it also moves all gain and on/off controls to the bottom bar, which feels more consistent.

#12 Updated by Matthias Mauch almost 10 years ago

  • Status changed from Resolved to Closed

#13 Updated by Justin Salamon almost 10 years ago

  • % Done changed from 100 to 90

Actually this issue is still pending (I couldn't find how to re-open), albeit quite minor. Let me explain:

Generally, we agreed that when a layer is not visible, it should not be "sonifiable" (sonificable?). I.e., if the pitch curve is hidden, its speaker button should be unpressed and greyed out. Currently, hiding a layer (audio, pitch or notes) will automatically unpress its corresponding play button and grey it out (yay). However, pressing anywhere on the selection pane (the little one just above the sonification toolbar) will cause the automatic "ungreying" of all play buttons (boo). This has to do with the way the signaling is handled in Tony, more specifically a click on the selection pane sends a reset signal which re-enables all buttons in the toolbar. I looked into commenting out this reset signal, but that caused undesirable effects when Tony is launched.

To make a long story short, this issue hasn't been fixed yet, but is not crucial.

#14 Updated by Matthias Mauch almost 10 years ago

  • Status changed from Closed to In Progress
  • Priority changed from High to Normal

Aha, get it.

Ok. Let's see if I can re-open with Normal priority.

#15 Updated by Chris Cannam almost 10 years ago

  • Status changed from In Progress to Resolved

Should be fixed in cddada03e222 I think.

The enabled/disabled state of the play buttons is now linked to new signals canPlayNotes() etc, rather than to the general canPlay, and these are emitted based on the note layer visibility as well as the general existence of a playable model.

I also made it keep a record (in settings) of whether a layer was playing at the time you disabled it this way, so that it can be reset to the same playing state when re-enabled. Otherwise you have a situation where a layer is playing, then you hide it, then you show it again but you have another click to make it play again and restore the state it originally had.

#16 Updated by Chris Cannam almost 10 years ago

Closing this feature request. We do still have a couple of related issues open (e.g. #815, #984) but we should handle those separately.

#17 Updated by Chris Cannam almost 10 years ago

  • Status changed from Resolved to Closed

Also available in: Atom PDF