Scripting for basic holds and pauses playback (only Dorico 5)

Edit 08.06.23 version 2:

  • A single stave breath mark was added, which works only on a single stave (as the name implies), but is much faster
  • The fermatas are also faster now and also work on rests now
  • The caesuras now don’t erroneously set the voice end property
  • The multiple staves breath mark was removed, because it doesn’t work reliable in certain situations. For now just add a single stave breath mark for every stave seperately

Hello,

thanks to the team for revamping the way script commands are handled! Now in Dorico 5 it’s finally possible to have basic playback of Holds and Pauses via scripts (it took me some days :sweat_smile:)

So in case some of you are interested in this, here are the scripts (only work in Dorico 5):
Basic_Holds_and_Pauses_Playback_v2-08-06-23.zip (6.8 KB)

---------------------------------------------------------------------------------
Usage Breath marks: Select the notes before the breath mark and run the script. It also works on non-adjacent staves, but the notes have to end simultaneously (they don’t have to start simultaneously).
breath_marks
---------------------------------------------------------------------------------
Usage Caesura: Select the notes in all (!) staves before the caesura and run the script. Here also the notes have to end simultaneously (they don’t have to start simultaneously).


---------------------------------------------------------------------------------
Usage Fermata: Select one note at any stave, where the fermata should apply to, and run the script. It won’t work on 1/16-notes or shorter.
fermatas
---------------------------------------------------------------------------------
Usage End of Flow: Select the notes in all staves before the final note and run the script.
grafik

The scripts are meant for chorales in normal tempo, so it’s easy to find edge cases where they don’t work as expected. Nonetheless some of you might find them helpful.

If you want to see and hear these in action, I’ve packed all categories in this bach chorale (not always musically adequate, but for showing the effect they make) :
Dein_Glanz_all_Finsternis_verzehrt.dorico (1.0 MB)

For Deleting, it’s honestly the most simple thing to undo them if possible, because you can revert any script in Dorico 5 with one undo command. If thats not possible, select all notes around the marking (before and after!), uncheck the checkboxes “Playback start offset”/“Playback end offset” in the category “Notes and Rests” and delete all the tempo signposts.

Quick tip: If you want the same category but a different duration, so e.g. you have a short caesura in the score but want to try out a medium caesura, you can just select the exact same notes again and run the script for the medium caesura - that will overwrite the values of the short caesura. This doesn’t work when the category differs, so e.g. if you have a caesura in the score but want a breath mark: You have to delete the caesura first.

Best regards
Stephan

5 Likes

Why would those only work in version 5? I’ve scanned over the code, but can’t immediately pinpoint anything that wouldn’t be possible in, say, version 4.

These are great, but I notice the following for the fermata scripts. If I start at say q = 80 tempo and then add a medium fermata sometime later, the resulting tempo lane value in the key editor is left at 800. The tempo is actually correct (since you are using a different duration value for the computed tempo) but it looks strange that the key editor tempo lane doesn’t return to its original value of 80.

It’s not that a single line only works in Dorico 5, it’s that those lines one after another don’t work in Dorico 4 because it doesn’t do what it’s supposed to do. Example:
local app=DoApp.DoApp()
app:doCommand([[UI.InvokePaletteButton?PaletteIndicatorID=tempopreset.relative_lento&PaletteSectionID=kTempoRelativePanel&PropertyButton=false&SetOldValue=false&Set=true&UseLocalOverride=0]])
app:doCommand([[UI.InvokePropertyChangeValue?Type=kTempoText&Value=string: “”]])
app:doCommand([[UI.InvokePropertyChangeValue?Type=kTempoImmediateRelativePercent&Value=double: 97]])
Try executing this in Dorico 4 and it only will add a Lento, but not change it’s tempo or hide it. If you execute each line seperately in Dorico 4, it will work. But in a script it won’t work. They have fixed that in Dorico 5.

Yes, you are right about that, and that shouldn’t show that way. It is not specific to my scripts, as you can insert a ritardando followed by a relative tempo change from the right panel and get the exact same visual bug. I will probably post a bug report about this in the future.

All this complexity is required to get fermata playback semi-operational, and only in v5! Sibelius solved this problem long ago and has fine grained adjustment of fermatas via the inspector. Fermatas play a very important role in my music and accurate midi playback is essential. Placing hidden tempo changes for every pause is an annoying workaround. I guess there’s still a role for Sibelius in my studio for pieces that don’t require unusual player/instrument setups that Dorico does a great job with.