Legatobögen, Crescendo... per Tastatur eingeben

Schwierige oder kniffelige Probleme, Feinheiten des Notensatzes etc.
Antworten
mas82
Beiträge: 94
Registriert: Mo Mai 08, 2017 10:00 pm

Legatobögen, Crescendo... per Tastatur eingeben

Beitrag von mas82 »

Hallo zusammen!

Nach vielem Suchen im Handbuch, Internet,... scheint es so, als ob man Intelligente Zeichen wie Legatobögen oder Crescendo-Gabeln ausschließlich mit dem dämlichen Doppelklick-Ziehen-Manöver eingeben muss. In Sibelius oder sogar dem Freeware-Programm MuseScore kann man ausgewählten Noten mit einem Tastendruck sofort Bögen und Gabeln hinzufügen. Geht super schnell und komfortabel.

Geht das in Finale 25 doch auch irgendwie?
Danke!
Hallo! Mein PC:
Windows 10 64bit
Finale 27

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

Re: Legatobögen, Crescendo... per Tastatur eingeben

Beitrag von Harald »

Das geht schon, z.B. für crescendo mit diesem JWLua-Script, das du z.B. per selbst definiertem Hotkey aufrufen kannst. Markiere eine Region, rufe das Script auf - es fügt in alle Notensysteme ein Crescendo ein:

Edit 21.10.18: Code hatte einen Bug, aktualisierter Code weiter unten im neuen Beitrag!

Die Alternative wäre, auf die Windows-Version von Jari Williamsons JWPattern zu warten. Damit kann man alle möglichen Zeichen einfügen. Falls du einen Mac hast, gbt's die auch jetzt schon. Welche Finale-Version auf welchem Betriebssystem hast du? Es vereinfacht die Kommunikation hier im Forum, wenn das z.B. in der Signatur auftaucht. Mit JWPattern kann man auch cresc./decres.-Kombinationen auf einen Hotkey legen. Irgendwo auf Youtube hatte mal ein Hollywood-Filmkomponist seine Finale-Tastaturbelegung dargestellt, wo er ganz massiv JWPattern angesteuert hat und damit viele Routineaufgaben automatisiert hat. Vielleicht finde ich das noch.

Ein interessanter Thread ist auch dieser, wo Autohotkey-Kommandos zum Bearbeiten mehrerer Intelligenter Zeichen gleichzeitig diskutiert wurden. Das ist nicht direkt deine Frage, steht aber im Zusammenhang und kann ja vielleicht auch helfen.

Falls das obige JWLua-Script das ist, was du suchst, kann ich das auch gerne für decresc. oder Legatobögen modifizieren. (Wobei die einzige Änderung für ein decresc. wäre, die Zeichenfolge SMARTSHAPE_CRESCENDO gegen SMARTSHAPE_DIMINUENDO auzutauschen).

Harald
Zuletzt geändert von Harald am So Okt 21, 2018 12:42 pm, insgesamt 2-mal geändert.
Finale 3.0-25.5 / Windows 7
Eine Bitte an neue User: gebt bitte Betriebssystem und Finale-Version in der Signatur an - danke.

mas82
Beiträge: 94
Registriert: Mo Mai 08, 2017 10:00 pm

Re: Legatobögen, Crescendo... per Tastatur eingeben

Beitrag von mas82 »

Oh mein Gott.... danke!! Danke!! DANKE!!!!

Ich sitze schon seit 5 Tagen und brüte über Lua Scripte, PDK Framework,... - etwa vier Stunden täglich und
das ist mien karges Ergebnis mit der Feststellung: "Ich geb's auf!!":

Code: Alles auswählen

local region = finale.FCMusicRegion()
region:SetCurrentSelection()
local selected = finale.FCSmartShapeMeasureMarks()
selected:LoadAllForRegion(region)
for measure in each(selected) do
local center = true
measure:CreateSmartShape(center)
measure:SaveNew()
end
for noteentry in eachentry(finenv.Region()) do 
    for note in each(noteentry) do
               print ("Note", note.NoteID)
                
   local ssem = finale.FCSmartShapeEntryMark()
   ssem:SetNoteEntry(noteentry)
   if ssem:LoadFirst() then
        local centerr = true
        ssem:CreateSmartShape(centerr)
        ssem:Save()
        if ssem:CalcLeftMark() then
        print ("Linker Marker gefunden")
        end
        if ssem:CalcRightMark() then
        print ("Rechter Marker gefunden")
        end
   print ("-------------------------------------------------------------------------")
    end
end
end
Der traurige Versuch herauszufinden, wie ich SmartShapes in Lua hinbekomme aber das ist einfach zu hoch für mich...

Leider funktioniert dein Code aber noch nicht richtig: Wenn ich etwas mit dem Auswahlwerkzeug markiere und dein Skript ausführe, erscheint eine lange, horizontale, rote Linie:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Hallo! Mein PC:
Windows 10 64bit
Finale 27

mas82
Beiträge: 94
Registriert: Mo Mai 08, 2017 10:00 pm

Re: Legatobögen, Crescendo... per Tastatur eingeben

Beitrag von mas82 »

Hab jetzt auch noch die Signatur geändert! - danke für den Hinweis!
Und auch danke für die Info zu den Patterson Plugins! Dann lohnt sich das Warten! :D

Jedenfalls ist dein Code super! Ich freu mich schon darauf, ihn zu studieren!
Ich würde wirklich gerne tiefer in Lua eintauchen und hab in den vergangenen Tagen viel gelernt
aber die Aufgabe mit den SmartShapes war mir viel zu schwer.

Wie hast du es geschafft, Lua so gut zu lernen? Bist du beiläufig C++ Programmierer oder so? :lol:
Jedenfalls großen Respekt!!!
Hallo! Mein PC:
Windows 10 64bit
Finale 27

mas82
Beiträge: 94
Registriert: Mo Mai 08, 2017 10:00 pm

Re: Legatobögen, Crescendo... per Tastatur eingeben

Beitrag von mas82 »

Sorry, ich muss nochmal:
Der Fehler oben tritt nur auf, wenn ich einen ganzen Takt anwähle - mit einem einfachen Click mit dem Anwahlwerkzeug.
Wenn ich aber Noten teiltaktig anwähle geht's.
Hallo! Mein PC:
Windows 10 64bit
Finale 27

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

Re: Legatobögen, Crescendo... per Tastatur eingeben

Beitrag von Harald »

Hm, erstmal danke für den Bug-Hinweis... da habe ich so lange dran gebastelt, bis die Zuordnung zu Teiltakten funktionierte, dass ich vergessen habe, die Funktionstüchtigkeit bei der Anwahl von ganzen Takten zu checken :shock: ...mach ich gleich.
mas82 hat geschrieben:
So Okt 21, 2018 1:11 am
Wie hast du es geschafft, Lua so gut zu lernen? Bist du beiläufig C++ Programmierer oder so? :lol:
Ich bin im Hauptberuf Musiker/Musiklehrer, habe aber seit Commodore64-Zeiten immer gerne musikalische Anwendungen programmiert. Nach C64/128 (Basic/Assembler) dann auf dem PC in Turbo Pascal und viel C++. Das Problem in den letzten Jahren ist halt, dass die Entwicklungswerkzeuge immer größer, mächtiger und komplizierter werden, sodass es immer schwerer wird, hobbymäßig auf dem Laufenden zu bleiben. MinGW mit Code::Blocks ist meine momentane Entwicklungsumgebung, damit bin ich voll ausgelastet :) . Da ist JWLua ein super Mittelweg, weil man sehr schnell an den musikalischen Inhalten arbeiten kann, ohne allzuviel Zeit auf Projektmanagement, Compileroptionen etc. zu verwenden. Der Nachteil ist in der Tat die sehr mäßige Dokumentation, insbesondere was das zugrunde liegende Datenmodell angeht - das ist aber vermutlich ein grundlegendes Defizit des Finale PDK, das Jari einfach weitergibt.
Finale 3.0-25.5 / Windows 7
Eine Bitte an neue User: gebt bitte Betriebssystem und Finale-Version in der Signatur an - danke.

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

Re: Legatobögen, Crescendo... per Tastatur eingeben

Beitrag von Harald »

mas82 hat geschrieben:
So Okt 21, 2018 1:25 am
Der Fehler oben tritt nur auf, wenn ich einen ganzen Takt anwähle - mit einem einfachen Click mit dem Anwahlwerkzeug.
So, hier die korrigierte Version:

Code: Alles auswählen

function plugindef()
   -- This function and the 'finaleplugin' namespace
   -- are both reserved for the plug-in definition.
   finaleplugin.RequireSelection = true
   finaleplugin.MinFinaleVersion = "2025"
   finaleplugin.Author = "Harald Schollmeyer"
   finaleplugin.Version = "1.0"
   finaleplugin.Date = "20.10.2018"
   finaleplugin.AuthorEmail = "hschollm@gmx.net"
   finaleplugin.CategoryTags = "Measure, Region, Smartshape, Staff, UI"
   return "AddCrescendo", "AddCrescendo", "Adds a crescendo"
end

-- function to create and assign a measure-attached smart shape
function MakeMeasureAttachedSmartShape(SsT, StartMeasure, StartStaff,
                                                            EndMeasure, EndStaff, StartPointX, StartPointY, EndPointX, EndPointY)
local smartshape = finale.FCSmartShape()
        smartshape:SetShapeType( SsT )
        smartshape:SetEntryBased( false )
        smartshape:SetLineID(0)
        if (StartPointY == EndPointY ) then smartshape:SetMakeHorizontal(true) else smartshape:SetMakeHorizontal(false) end
        smartshape:SetVisible(true)
        smartshape:SetPresetShape(true)

        local leftseg = smartshape:GetTerminateSegmentLeft()
        leftseg:SetMeasure( StartMeasure)
        leftseg:SetMeasurePos( StartPointX  )
        leftseg:SetStaff(StartStaff)
        leftseg:SetEndpointOffsetX( 0 )
        leftseg:SetEndpointOffsetY( StartPointY )
        leftseg:SetCustomOffset(false)

        local rightseg = smartshape:GetTerminateSegmentRight()
        rightseg:SetMeasure( EndMeasure )
        rightseg:SetMeasurePos( EndPointX )
        rightseg:SetStaff(EndStaff)
        rightseg:SetEndpointOffsetX( 0 )
        rightseg:SetEndpointOffsetY( EndPointY )

        smartshape:SaveNewEverything(NULL,NULL)
end

-- initializing variables
local SmartShapeType = finale.SMARTSHAPE_CRESCENDO
local ss, es, sm, em = finenv.Region().StartStaff, finenv.Region().EndStaff, finenv.Region().StartMeasure, finenv.Region().EndMeasure
local StartMeasurePos = finenv.Region().StartMeasurePos
local EndMeasurePos = finenv.Region().EndMeasurePos

if finenv.Region():IsAbsoluteEndMeasurePos() then
local measure = finale.FCMeasure()
measure:Load(em)
 EndMeasurePos = measure:GetDuration()
 end

local VerticalPos = -150
-- loop over all staves, insert the smart shape
for staff = ss, es do
MakeMeasureAttachedSmartShape( SmartShapeType, sm, staff, em, staff, StartMeasurePos, VerticalPos, EndMeasurePos, VerticalPos)
end
Die 5 Zeilen ab "if finenv.Region():IsAbsoluteEndMeasurePos() then" sind neu, ich hatte übersehen, dass FCMusicRegion:EndMeasurePos bei vollständig angewählten Takten nicht die Taktbreite zurückliefert, sondern offensichtlich den Maximalwert 2147483647 (=2^31-1). Wenn man auf ganztaktige Anwahl checkt, kann man den Fall abfangen und dann die Duration des letzten Taktes stattdessen nehmen.
Das funktioniert jetzt soweit bei mir in allen geprüften Fällen, falls weitere Bugs auftauchen, immer her damit 8) .

Harald
Zuletzt geändert von Harald am So Okt 21, 2018 11:10 pm, insgesamt 1-mal geändert.
Finale 3.0-25.5 / Windows 7
Eine Bitte an neue User: gebt bitte Betriebssystem und Finale-Version in der Signatur an - danke.

mas82
Beiträge: 94
Registriert: Mo Mai 08, 2017 10:00 pm

Re: Legatobögen, Crescendo... per Tastatur eingeben

Beitrag von mas82 »

Ja, du hattest recht! Es lag wirklich an finenv.Region() - deshalb hat es bei der Teil-Anwahl funktioniert aber nicht bei der Taktanwahl.
Einfach super!! Jetzt läuft es!

Eine letzte Kleinigkeit noch: ich habe nun den Enumerator: "SMARTSHAPE_SLURAUTO" eingefügt und VerticalPos auf 0 gesetzt. Der Legatobogen wird zwar wunderschön gemacht aber es fehlen ihm alle Eigenschaften zum Ausrichten. Also er geht immer nach oben und auch unter "Bogen ausrichten" kann man weder "Auto", noch "Ein" noch "Aus" wählen. Muss man da noch irgendwie den enum "SMARTSHAPE_3STATE" einbinden?
keine Ahnung... --- danke im Voraus! :D
Zuletzt geändert von mas82 am Mo Okt 22, 2018 12:27 am, insgesamt 1-mal geändert.
Hallo! Mein PC:
Windows 10 64bit
Finale 27

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

Re: Legatobögen, Crescendo... per Tastatur eingeben

Beitrag von Harald »

mas82 hat geschrieben:
So Okt 21, 2018 9:06 pm
Eine letzte Kleinigkeit noch: ich habe nun den Enumerator: "SMARTSHAPE_SLURAUTO" eingefügt und VerticalPos auf 0 gesetzt. Der Legatobogen[...]
Äh, du hast den Code auf Legatobögen geändert? Dann würde ich dich bitten, auch deinen Namen etc. oben rein zu schreiben. Ich möchte dich bitten, den Code mit meinem Namen zu löschen und ggf. durch Code mit deinem Namen zu ersetzen - danke im voraus.

Allerdings müssten Legatobögen entry-based sein, mein Code erzeugt nur Measure-attached Smart Shapes, wie es eben für cresc./decresc.-Gabeln nötig ist. Ein Algorithmus für Legatobögen müsste grundsätzlich anders aussehen, weil man innerhalb einer angewählten Region zunächst entscheiden muss, welche Entries bei unterschiedlichen Rhythmen überhaupt per Legatobogen verbunden werden. Da müsste also grundsätzlich erstmal mehr musikalische Logik enthalten sein - die ist für Dynamikgabeln nicht notwendig.

Von mir aus können wir gerne eine mögliche JWLua-Lösung für Legatobögen diskutieren, am besten im PlugIn-Unterforum in einem eigenen Thread, schlage ich vor.

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

mas82
Beiträge: 94
Registriert: Mo Mai 08, 2017 10:00 pm

Re: Legatobögen, Crescendo... per Tastatur eingeben

Beitrag von mas82 »

Entschuldige bitte den Faux-pas mit dem Namen. Hab ich leider übersehen, werde in Zukunft besser aufpassen.

Danke für die Erläuterung und für das Angebot, aber ich denke ich werde deine Geduld und Hilfe nicht länger überstrapazieren... :wink:
Zumindest vorläufig... :wink:
Ich werde deinen Code in Ruhe studieren, meine Lua Kenntnisse verbessern und mit deinem Hinweis, dass Legatobögen entry-based
sein sollen, es mal allein versuchen. Sollte ich wieder feststecken, dann poste ich sehr gerne im Plugin-Unterforum.

Hättest du vielleicht zum Abschluss ein, zwei Links zu guten Quellen/Tutorials, um einen guten Einstieg in Lua zu bekommen,
besonders in Hinblick auf den Einsatz in Finale? Das wäre noch sehr hilfreich. Danke!
Hallo! Mein PC:
Windows 10 64bit
Finale 27

Antworten