Finale-Script: Verbersserungsvorschläge?

Schwierige oder kniffelige Probleme, Feinheiten des Notensatzes etc.
Antworten
Yuval
Beiträge: 26
Registriert: Do Dez 19, 2013 10:55 pm

Finale-Script: Verbersserungsvorschläge?

Beitrag von Yuval »

Hallo zusammen,

ich habe grade mein erstes Script geschrieben, und wüsste nun gerne, ob Ihr noch Verbesserungsvorschläge habt. Ihr findet es weiter unten.

Vielen Dank und liebe Grüße!"
Yuval

menu item "Seitenlayout"
menu item "Akkoladen"
menu item "Ränder bearbeiten"
type 0 near "Oben"
type 0 near "Links"
type 0 near "Rechts"
type 0 near "Unten"
type 1 near "Akkolade"
button "Anwenden"

menu item "Seitenlayout"
menu item "Akkoladen"
menu item "Ränder bearbeiten"
select systems 5
syst margin top 30
select systems 10
syst margin top 30
select systems 15
syst margin top 30
select systems 20
syst margin top 30
select systems 25
syst margin top 30
select systems 30
syst margin top 30
select systems 35
syst margin top 30
select systems 35
syst margin top 30
select systems 40
syst margin top 30
select systems 45
syst margin top 30
select systems 50
syst margin top 30
select systems 55
syst margin top 30
select systems 60
syst margin top 30
select systems 65
syst margin top 30

select system 4
syst margin bottom 40
select system 9
syst margin bottom 40
select system 14
syst margin bottom 40
select system 19
syst margin bottom 40
select system 24
syst margin bottom 40
select system 29
syst margin bottom 40
select system 34
syst margin bottom 40
select system 39
syst margin bottom 40
select system 44
syst margin bottom 40
select system 49
syst margin bottom 40
select system 54
syst margin bottom 40
select system 59
syst margin bottom 40
select system 64
syst margin bottom 40
select system 69
syst margin bottom 40

select system 1
syst margin top 90
syst margin left 36
syst margin bottom 0

menu item "Seitenlayout"
menu item "Akkoladen gleichmäßig verteilen"
type 1 near "Seite:"
type 1 near "bis:"
type 4 next "Einrichten mit:"
button "ok"

menu item "Akkoladen gleichmäßig verteilen"
check "Seitenbereich"
type 2 near "Von:"
type del next "bis:"
type 5 next "Einrichten mit:"
Finale 2014, Finale 2012c
TG-Tools Vollversion, diverse JW-Plugins Generalbassfont von Ansgar Krause
Windows 10

Benutzeravatar
Harald
Beiträge: 338
Registriert: Sa Aug 30, 2003 6:43 pm

Re: Finale-Script: Verbersserungsvorschläge?

Beitrag von Harald »

Yuval hat geschrieben:wüsste nun gerne, ob Ihr noch Verbesserungsvorschläge habt.
Dazu müsste man wissen, was das Script überhaupt tun soll. Erst dann kann man beurteilen, ob es dieses Ziel erreicht und ob es ggf. andere oder bessere Wege gäbe.

Die Sache ist: wenn das Script das macht was es soll (und auch in einer vertretbaren Laufzeit), du es verstehst und ggf. bei Bedarf ändern und anpassen kannst, ist das sehr viel wert. Selbst wenn es andere Lösungen für das gleiche Ziel gäbe: vielleicht wären diese kürzer/ästhetischer/schneller oder was auch immer, aber das wiegt meiner Erfahrung oft nicht den Vorteil auf, dass der Programmierer volle Kontrolle über seinen Code hat.

Z.B. stellt sich immer die Alternative JWLua dar: man hat dort direkten Zugriff auf die einzelnen Elemente eines Finale-Dokuments und hat Schleifen, Verzweigungen und Variablen. JWLua-Code ist daher oft kürzer und leistungsfähiger als ein FinaleScript. In FinaleScript kann man nur die Anwahl von Menüoptionen automatisieren, hat aber weder Schleifen, noch Verzweigungen oder Variablen. Für FinaleScript muss man nur einige programmiertechnische Sachverhalte lernen, für JWLua deutlich mehr. Wenn du aber dein Script einfach verständlich und schnell änderbar halten willst, ist daher möglicherweise deine obige Lösung die beste.

Harald
Finale 3.0-25.5 / Windows 7
Eine Bitte an neue User: gebt bitte Betriebssystem und Finale-Version in der Signatur an - danke.

Yuval
Beiträge: 26
Registriert: Do Dez 19, 2013 10:55 pm

Beitrag von Yuval »

.... ok, dann beschreibe ich es hier mal ganz kurz: Es geht darum, dass die Ränder von allen jeweils ersten und letzten Akkoladen auf einen bestimmten Wert gesetzt werden und dann die Seiten gleichmäßig verteilt werden.

In einem ersten Schritt werden alle Akkoladenränder komplett auf 0 gesetzt:
menu item "Seitenlayout"
menu item "Akkoladen"
menu item "Ränder bearbeiten"
type 0 near "Oben"
type 0 near "Links"
type 0 near "Rechts"
type 0 near "Unten"
type 1 near "Akkolade"
button "Anwenden"


Dann sollen die Ränder der jeweils ersten Akkoladen ab S. 2 eingestellt werden (Die erste Seite hat vier Akkoladen, alle anderen jeweils 5):
menu item "Seitenlayout"
menu item "Akkoladen"
menu item "Ränder bearbeiten"
select systems 5
syst margin top 30
select systems 10
syst margin top 30
etc.


Kann man das irgendwie so definieren, dass er automatisch die Ränder der Akkoladen, die ein vielfaches von 5 sind, also 5, 10, 15, 20 etc. einstellt? Oder muss ich das wirklich für jede Akkolade wiederholen?

Als nächstes passiert das gleiche mit dem unteren Rand der letzten Akkolade jeder Seite:
select system 4
syst margin bottom 40
select system 9
syst margin bottom 40
select system 14
syst margin bottom 40
etc.
Dann werden noch die Ränder auf der ersten Seite, die ja unterschiedlich groß sind, eingestellt....
select system 1
syst margin top 90
syst margin left 36
syst margin bottom 0
...und schließlich zuerst die Akkoladen auf S. 1, dann ab S. 2 gleichmäßig verteilt:
menu item "Seitenlayout"
menu item "Akkoladen gleichmäßig verteilen"
type 1 near "Seite:"
type 1 near "bis:"
type 4 next "Einrichten mit:"
button "ok"

menu item "Akkoladen gleichmäßig verteilen"
check "Seitenbereich"
type 2 near "Von:"
type del next "bis:"
type 5 next "Einrichten mit:"
Vor allem würde mich interessieren, ob es einen Befehl gibt, mit dem ich die Akkoladenränder nicht immer einzeln ändern muss. Denn wenn ich z.B. das Script so wie im ersten Beitrag über ein Dokument mit nur drei oder vier Seiten laufen lasse werden auch viele Ränder von gar nicht existierenden Akkoladen geändert....

Ich würde gerne mit Lua anfangen, aber ich habe bisher absolut keine Erfahrung im Programmieren, und schon die Einleitung auf der Seite von Jari ist etwas zu kompliziert für mich..... Ich denke, ohne Hilfe kann ich da nicht weit kommen..... :-(
Finale 2014, Finale 2012c
TG-Tools Vollversion, diverse JW-Plugins Generalbassfont von Ansgar Krause
Windows 10

Benutzeravatar
Harald
Beiträge: 338
Registriert: Sa Aug 30, 2003 6:43 pm

Beitrag von Harald »

Unter den gegebenen Umständen ist dein existierendes Script sicher eine taugliche Lösung. Ich vermute mal, dass du damit nicht beliebige Finale-Dokumente bearbeitest, sondern nur Dokumente mit einer bestimmten Zahl von Notensystemen pro Akkolade. Möglicherweise hast du ein Projekt bzw. eine Besetzung, bei denen es mehrere Finale-Dokumente gibt, deren Aussehen vereinheitlicht werden soll. Insofern kann ich innerhalb von FinaleScript keine kürzere Lösung finden.

Aber zu deinen Fragen:
Yuval hat geschrieben:Kann man das irgendwie so definieren, dass er automatisch die Ränder der Akkoladen, die ein vielfaches von 5 sind, also 5, 10, 15, 20 etc. einstellt? Oder muss ich das wirklich für jede Akkolade wiederholen?
In FinaleScript kann man halt keine Entscheidungen abhängig von Variablen treffen, daher ist deine Lösung die einzige, die ich sehe (möglicherweise gibt's aber Lösungen, die ich nicht sehe...). In Lua wäre das dagegen einfach - der folgende Code setzt die oberen und unteren Ränder aller Akkoladen, deren Nummer durch 5 teilbar ist, auf 30 EVPUs:

Code: Alles auswählen

local staffsystems = finale.FCStaffSystems()
staffsystems:LoadAll()
for ss in each(staffsystems) do
        if ( ss.ItemNo % 5 == 0 ) then
            ss.TopMargin = 30 
            ss.BottomMargin = 30 
        end
end
staffsystems:SaveAll()
Kurze Erläuterung: alle Akkoladen werden in Zeile 1 in der Variable "staffsystems" abgebildet. Zeile 2 lädt alle aktuellen Werte aller Akkoladen in diese Variable. Dann folgt eine Schleife über alle Akkoladen, in denen die Teilbarkeit ihrer Nummer durch 5 geprüft wird (genaugenommen wird geprüft, ob die "modulo 5"-Berechnung 0 ergibt, das ist gleichbedeutend mit der Teilbarkeit durch 5). Ist die Prüfung erfolgreich, werden oberer und unterer Akkoladenrand auf 30 gesetzt. Zum Schluss wird alles gespeichert.
Yuval hat geschrieben:Vor allem würde mich interessieren, ob es einen Befehl gibt, mit dem ich die Akkoladenränder nicht immer einzeln ändern muss. Denn wenn ich z.B. das Script so wie im ersten Beitrag über ein Dokument mit nur drei oder vier Seiten laufen lasse werden auch viele Ränder von gar nicht existierenden Akkoladen geändert....
In FinaleScript gibt es das nicht. In meinem Lua-Code (der eigentlich wesentlich von Jari stammt...) wird keine Annahme über eine Akkoladenanzahl getroffen, sondern alle vorhandenen Akkoladen werden in einer Sammelvariable abgebildet. Diese ist Grundlage für die Schleife und Fallunterscheidungen. Das ist dann eben nur in einer Sprache möglich, die Variablen und Entscheidungen kennt, also z.B. Lua oder wie in einem echten Finale-Plugin in C++.

Die anderen Maßnahmen, die in deinem Script automatisiert werden, könnte man in Lua ebenfalls in einen Algorithmus umformulieren, sodass z.B. in Abhängigkeit der Position der Akkolade auf einer Seite bestimmte Änderungen erfolgen.
Yuval hat geschrieben:Ich würde gerne mit Lua anfangen, aber ich habe bisher absolut keine Erfahrung im Programmieren, und schon die Einleitung auf der Seite von Jari ist etwas zu kompliziert für mich..... Ich denke, ohne Hilfe kann ich da nicht weit kommen..... :-(
Wenn es dich interessiert, versuch's, so schwer ist es nicht. Es lohnt sich, parallel zu Finale im Webbrowser immer in einem Tab die Klassenbibliothek offen zu haben, in einem anderen Tab Jaris Beispiele und in einem dritten z.B. eine allgemeine Lua-Referenz. Dazu in Finale das JWLua-Plugin mit seinem "Class Browser". Auch ich, wie jeder andere, muss immer wieder Dinge nachschauen.

Harald
Finale 3.0-25.5 / Windows 7
Eine Bitte an neue User: gebt bitte Betriebssystem und Finale-Version in der Signatur an - danke.

Antworten