Show pause property for breath and casesura
Marc Sabatella fixed breath and caesura in https://github.com/musescore/MuseScore/pull/1707 .
This issue is to track adding the property in the UI.
Marc Sabatella fixed breath and caesura in https://github.com/musescore/MuseScore/pull/1707 .
This issue is to track adding the property in the UI.
Comments
Note that for breath, the proper behavior is *not* to add a pasue, but rather, to subtract from the length of the previous note. That is, dotted half note, breath, quarter note should sound more or less like half note, quarter rest, quarter note. Any customization should affect how much the previous note is shortened.
That isn't to say there couldn't *also* be a way to have breaths add a pause - there are unusual special situations where this would be appropriate - but it would be more important to get the standard playback effect first.
For caesuras, exposing the pause parameter should be totally sufficient. Probably belongs in Inspector.
Marc, do you happen to know how I could subtract from the length of the previous note?
Well, the length of the note for playback is controlled in rendermidi.cpp, when we generate the "events" for it. Probably the place to affect this would be in one of the renderChordArticulation() or renderNoteArticulation() functions, which is also where we apply the rules for staccato etc. The flow is a bit convoluated through there - several similarly named functions and/or use of recursion, I think. Stepping through with a debugger would probably help. I think ultimately, the staccato etc currently gets processes in updateGateTime(), but by the time we've reached that function, it's probably too late to check for a breath. So you'd want to do something similar but a little further upstream.
Marc, thanks for the reply! What should I do if the breath time is bigger then the previous notes duration?
I guess the breath time should be a fraction of the duration, expressed in %. Maybe a default of 25%?
I think we wouldn't allow that - it would make no musical sense.
https://github.com/musescore/MuseScore/pull/2498, so far for caesure at least
Looking at the code a good place to add this logic would be Score::createPlayEvents(Chord* chord). What would be the best way to check from a Chord object if the next element is a breath sign?
After talking with Jojo-Schmitz we got a few ideas on how to implement breath signs :
- Breath will have another property percentage of last note and it's pause will be a maximum between the pause property and the percentage of the last note.
- Default will still be 0 and users will be able to change it to whatever they want.
We also discussed about a good way to warn users that their breath sign is inappropriate or will not play at all (eg. inside a slur, or after a very fast note). We came up with :
- mark the breath sign in red color
- show a warning in the inspector
- not allow the user to add the breath sign at all
I guess a breath should sound (and internally be dealt with) like a staccato? Just with an adjustable setting in Inspector rather than via instruments.xml and ist fixed gateTime values.
Maybe we can even extend this one day to staccato and friends, make them changable as well
Fixed in branch master, commit 5acb41949f
fix #100856 Show pause property for caesura
Fixed in branch master, commit 2343dcf06c
Merge pull request #2498 from sraduvictor/pause_prop
fix #100856 Show pause property for caesura
Fixed in branch 2.0.4, commit 9d06dfa636
fix #100856 Show pause property for caesura
The pause property is now also shown for breath marks, which it definitely should not be (imagine a musician losing the downbeat after a breath). See Marc's comment #1 above.
Automatically closed -- issue fixed for 2 weeks with no activity.
I created a separate issue: #114491: Remove "Pause" property from Inspector for breath mark or make it 'stealing' time from preceeding duration