[JW Lua] Issues with JW Lua's playback function in FCTextExpressionDef

Jan Angermüller jan at angermueller.com
Thu Feb 10 10:57:46 CET 2022


I have just noticed a severe issue which can mess up the expression 
definitions.
I wrote a "Clone" function to copy&paste properties from one expression 
definition to another and used the seemingly undangerous 
ExecutableShapeID property like this:

DestinationExprDef.ExecutableShapeID=SourceExprDef.ExecutableShapeID

But this will not only copy the ExecutableShapeID, but also reset all 
other playback values in that expression defintion - like key velocity, 
tempo, etc.

So, for example, if your source and destination expressions were dynamic 
expressions with the Key Velocity playback type and the destination used 
"Key Velocity: 75", it will change to "Key Velocity: 0". But the code 
line above will have no effect on the ExecutableShapeID as it is 0 in 
both cases.

Robert, could you update this in the documentation?
Currently it only says:
"Setting the shape to 0 can be used to clear the use of executable shape."
But it seems to me like:
"Setting the shape to 0 clears ANY playback value - even if the 
executable shape was not used at all."

And maybe add one line that assigning 0 to ExecutableShapeID will not 
change the "Value" field, if UseExecutableShape is not activated.

Test code:
local textexprdef=finale.FCTextExpressionDef()
textexprdef:Load(1)
local textexprdef2=finale.FCTextExpressionDef()
textexprdef2:Load(2)
textexprdef2.ExecutableShapeID=textexprdef.ExecutableShapeID
textexprdef2:Save()

A few other things that I noticed that affect expression definitions and 
playback and which might need attention:
1.) Get/SetPlaybackType() is listed as "Lua supported in 0.55", but it's 
not supported yet.
2.) SetPlaybackController is supported, but GetPlaybackController is not
3.) Get/SetPlaybackKeyVelocity() are in Jari's framework, but not in JW 
Lua   (probably not needed if you use SetPlaybackController with the key 
velocity type, but GetPlaybackController() isn't supported yet either)
4.) The documentation for SetPlaybackTempo doesn't mention very clearly 
that it turns a non-tempo playback expression into a tempo playback 
expression.
So it not only changes the tempo/duration value, but it seems to set a 
flag internally that the new playback is a "EXPPLAYTYPE_TEMPO" type. I 
had expected that I would have to call SetPlaybackType() additionally to 
change this behaviour.

Jan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://jwmusic.nu/pipermail/jwlua_jwmusic.nu/attachments/20220210/199ff6dd/attachment.html>


More information about the JWLua mailing list