Script Akkordtöne rotieren

TGTools, Patterson Plug-Ins, Forza! und andere Plug-Ins von Drittanbietern
Antworten
FrankBoehme
Beiträge: 8
Registriert: Sa Feb 27, 2021 8:13 pm

Script Akkordtöne rotieren

Beitrag von FrankBoehme »

Hallo, ich habe mir auf dem StreamDeck den Finale Controller installiert. Dort gibt es ein Skript, bei dem der obere Ton eines 4-st. Akkordes nach unten oktaviert wird.
Ich möchte gerne zwei Skripte in Finale erstellen bei dem in einem 4-st. Akkord a) der zweite Ton nach unten oktaviert wird und b) der zwei und vierte. (Also drop2 und drop2-4). Ich habe mir das Script herauskopiert und wollte durch probieren eine Lösung finden. Ist mir aber nicht gelungen.

Kann mir bitte jemand helfen? Vielleicht gibt es so etwas ja auch schon.
Danke Frank


ich habe es gefunden: in JW Staff Polyphony - Chord Lines - Transpose

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

Re: Script Akkordtöne rotieren

Beitrag von Harald »

Hallo Frank - willkommen im Forum.
FrankBoehme hat geschrieben:
So Feb 28, 2021 12:41 am
Ich möchte gerne zwei Skripte in Finale erstellen bei dem in einem 4-st. Akkord a) der zweite Ton nach unten oktaviert wird und b) der zwei und vierte. (Also drop2 und drop2-4). Ich habe mir das Script herauskopiert und wollte durch probieren eine Lösung finden. Ist mir aber nicht gelungen.
Kann mir bitte jemand helfen? Vielleicht gibt es so etwas ja auch schon.
Danke Frank
ich habe es gefunden: in JW Staff Polyphony - Chord Lines - Transpose
Willst du die Skripte jetzt noch erstellen, oder hat sich das damit erledigt, dass du das JW-PlugIn gefunden hast?
Falls du noch dabei bist: Drop2 und ähnliche Eingriffe gehen nicht mit FinaleScript (höchstens, indem ein FinaleScript das StaffPolyphony-PlugIn aufruft), sondern nur in JWLua. Eine JWLua-Script, das eine beliebige Stimme in einem angewählten Bereich droppt, könnte so aussehen:

Code: Alles auswählen

-- "FindVoiceNote" gibt die Note in der Stimme #v im Akkord e zurück
function FindVoiceNote( e, v )
    local n = e:CalcHighestNote( NULL )
        for i=2, v,1 do
            n = e:CalcHighestNote( n )
        end
    return n
end

-- "OctaveTranspose" transponiert eine Note um n Oktaven
function OctaveTranspose(note, n)
if note then 
    local SourcePitchString = finale.FCString()
    local entry = note:GetEntry()
    measures = finale.FCMeasure()
    local measure = entry:GetMeasure()
    measures:Load(measure)
    local key_signature = measures:GetKeySignature()
    note:GetString( SourcePitchString , key_signature, false, false)
    octave = tonumber( SourcePitchString.LuaString:sub(-1,-1)) + n
    local TargetPitchString = finale.FCString()
    TargetPitchString.LuaString = SourcePitchString.LuaString:sub(1,SourcePitchString.LuaString:len()-1)..octave
    note:SetString( TargetPitchString , key_signature, false)
end
end


---- START  ----
for entry in eachentrysaved(finenv.Region()) do
    local VoiceNote = FindVoiceNote( entry, 2)   -- "2" ist die 2.Stimme von oben im Akkord
    OctaveTranspose(VoiceNote, -1)  -- die gefundene Note wird eine Oktave abwärts transponiert
end
Für Drop2 kannst du das Skript direkt im JWLua-Editor aufrufen. Jeder weiterer Aufruf droppt die dann jeweils an 2.Stelle von oben stehende Stimme. Für Drop2+4 müsste man das Skript also zweimal aufrufen:
  • einmal mit FindVoiceNote( entry, 2), damit die 2.Stimme gedroppt wird
  • einmal mit FindVoiceNote( entry, 3), damit die ehemals 4. gedroppt wird, die ist nämlich nach dem Drop2-Schritt die dritte von oben
Finale 3.0-25.5 / Windows 7
Eine Bitte an neue User: gebt bitte Betriebssystem und Finale-Version in der Signatur an - danke.

FrankBoehme
Beiträge: 8
Registriert: Sa Feb 27, 2021 8:13 pm

Re: Script Akkordtöne rotieren

Beitrag von FrankBoehme »

Lieber Harald,
vielen herzlichen Dank. Das probiere ich gleich aus. Mit Lua kenne ich mich nicht so gut aus. Arbeite mich gerade ein wenig in FinaleScript ein. Herzliche Grüße Frank

FrankBoehme
Beiträge: 8
Registriert: Sa Feb 27, 2021 8:13 pm

Re: Script Akkordtöne rotieren

Beitrag von FrankBoehme »

Lieber Harald,
das funktioniert sehr gut und geht extrem schnell. Drop2 geht, drop 2-4 funktioniert nicht.
Ich gehe von folgender Überlegung aus:
Grundstellung: 1-2-3-4
Drop 2: 1-3-4-2
Drop 2-4 müsste sein: 1-3-2-4

wenn ich das Scrip 2-mal anwende kommt:
A) 1-2-3-4 (=Grundstellung)
B) 1-3-4-2 (=drop2)
C) 1-4-2-3 (weil der 2. Ton von oktaviert wird)

Oder habe ich einen Denkfehler?
Vielen Dank. Frank

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

Re: Script Akkordtöne rotieren

Beitrag von Harald »

FrankBoehme hat geschrieben:
Di Mär 02, 2021 12:45 am
das funktioniert sehr gut und geht extrem schnell.
Freut mich sehr. Man könnte eine drop2- und eine drop2+4-Funktion auch auf zwei Hotkeys legen, was beim Arrangieren für Big-Band hilfreich ist.
FrankBoehme hat geschrieben:
Di Mär 02, 2021 12:45 am
drop 2-4 funktioniert nicht.
wenn ich das Scrip 2-mal anwende kommt:
A) 1-2-3-4 (=Grundstellung)
B) 1-3-4-2 (=drop2)
C) 1-4-2-3 (weil der 2. Ton von oktaviert wird)
Da kommt das ins Spiel, was ich unten drunter geschrieben habe: wenn das Script einmal gelaufen ist, haben sich die Nummern der (Unter-)Stimmen geändert: 1.=1., die neue 2. ist die ehemalige 3., die neue 3. ist die ehemalige 4., die neue 4. ist die oktavierte ehemalige 2. . Willst du also außer der 2. Stimme auch die ehemalige 4. droppen, musst du faktisch einen Befehl zum droppen der 3.Stimme auslösen. Dazu müsste man das Hauptprogramm (ab "---- START ----") folgendermaßen ändern:

Code: Alles auswählen

---- START  ----
for entry in eachentrysaved(finenv.Region()) do
    local VoiceNote = FindVoiceNote( entry, 2)   -- "2" ist die 2.Stimme von oben im Akkord
    OctaveTranspose(VoiceNote, -1)  -- die gefundene Note wird eine Oktave abwärts transponiert

    VoiceNote = FindVoiceNote( entry, 3)   -- die 3. ist die ehemalige 4.Stimme von oben im Akkord
    OctaveTranspose(VoiceNote, -1)  -- die gefundene Note wird eine Oktave abwärts transponiert
end
Hier noch zur Demonstration eine leichter lesbare Variante. Die beiden Töne für drop2 und drop4 werden erst gesucht und in Variablen gespeichert. Vorteil: die Nummerierung der Stimmen ist noch nicht verändert, man kann also wirklich nach der 2. und 4. Stimme suchen. Erst nach dem Suchvorgang werden beide transponiert:

Code: Alles auswählen

---- START  ----
for entry in eachentrysaved(finenv.Region()) do
    local SecondVoiceNote = FindVoiceNote( entry, 2)   -- finde die 2.Stimme von oben im Akkord
    local FourthVoiceNote = FindVoiceNote( entry, 4)   --  finde die 4.Stimme von oben im Akkord

    OctaveTranspose(SecondVoiceNote, -1)  -- die Note der 2. Stimme wird eine Oktave abwärts transponiert
    OctaveTranspose(FourthVoiceNote, -1)  -- die Note der 4. Stimme wird eine Oktave abwärts transponiert
end
Finale 3.0-25.5 / Windows 7
Eine Bitte an neue User: gebt bitte Betriebssystem und Finale-Version in der Signatur an - danke.

FrankBoehme
Beiträge: 8
Registriert: Sa Feb 27, 2021 8:13 pm

Re: Script Akkordtöne rotieren

Beitrag von FrankBoehme »

Lieber Harald,
noch einmal vielen Dank. Du hast es genau durchschaut. Ich möchte das für den Unterricht nutzen damit die Studies sehr schnell kleinere Phrasen im Blocksatz (und den Kombinationen drop2 und drop2-4) probieren können.
Ich muss gestehen, dass ich das ich die Skriptsprache noch nicht richtig verstehe. Taste mich aber langsam vor. Durch ausprobieren habe ich jetzt das drop2-4 mit dem ersten Skript von dir kombiniert Wähle ich einen vierst. Satz an, kann ich zwischen dop2 oder drop2-4 auswählen. Tastaturkürzel belegt und es funktioniert alles tadellos.
ein großes Dankeschön. Ich gehe jetzt mit der Befehlsreferenz jeden Schritt noch einmal durch, um zu verstehen welcher Befehl welche Reaktion hervorruft.

Grüße vom F

Antworten