Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: woto am Mittwoch, 4. März 2009, 00:04

Titel: override fingering
Beitrag von: woto am Mittwoch, 4. März 2009, 00:04
Hallo liebe Lilyponder,

gibt es eine Möglichkeit, dass die Zahlen für das Fingering nicht auf die 5 Finger begrenzt wird? Ich möchte die Griffnummern nämlich für Posaunenzugpositionen verwenden und da gibt's ja sieben. Wenn ich zb c4-6 eingebe, dann klappt das schon, aber ich bekomme immer eine Warnung beim Kompilieren und da suche ich mich immer blöd, wenn echte Fehler in meinem Code sind.

Hat jemand 'ne Idee?

Beste Grüße, Woto.
version "2.10.33"
jEdit+lilypondtool

Ich hatte die Frage zuerst im Ubuntu-Forum gestellt (http://forum.ubuntuusers.de/topic/lilypond-override-fingering/#post-1861181)
Titel: Re: override fingering
Beitrag von: comper am Mittwoch, 4. März 2009, 10:48
Schuld ist die engstirnige Scheme-Routine fingering::calc-text.

Vielleicht etwa so:
  eine stumme Version aufstellen
#(define (polydaktyl grob)
  (let*
      ((event (event-cause grob))
       (digit (ly:event-property event 'digit)))
    (number->string digit 10)
  ))
und dann fingering::calc-text damit ersetzen
  \override Fingering #'text = #polydaktyl

Das reicht bis neun; ab 10 streikt der Parser.

Gruss
Titel: Re: override fingering
Beitrag von: woto am Mittwoch, 4. März 2009, 17:27
Haha, polydaktyl ist gut!!!  :D

Vielen Dank schon mal für den Vorschlag, leider weiß ich nicht so genau, wo ich das jeweils hinschreiben muss. Das define hab ich in die Layout-Umgebung gepackt und das override dann in eine score-Umgebung. Beim Kompilieren erhalte ich "Unbound variable: polydaktyl"

Was mache ich denn falsch?

\layout {
\context {\Score \remove "Bar_number_engraver"}
#(define (polydaktyl grob)
  (let*
  ((event (event-cause grob))
(digit (ly:event-property event 'digit)))
  (number->string digit 10)
  ))
}

\book {
\header {
title = "..."
subtitle = "..."
composer = "..."
date = "..."
}

%Naturtöne
\score {\override Fingering #'text = #polydaktyl \new StaffGroup << \time 2/4
\new Staff \relative c {\set Staff.instrumentName =  #"1. Lage "\clef bass
\tiny ais4-1^"Ais" b^"B" f'2^"f" ais4^"ais" b^"b" d2^"d'" f^"f'" gis4^"gis'"^"+" as^"as'"^"+" ais^"ais'" b^"b'" c2^"c''"\bar "|."}
\new Staff \relative c {\set Staff.instrumentName =  #"2. Lage "\clef bass
\tiny a2-2^"A" e'^"e" a^"a" cis4^"cis'" des^"des'" e2^"e'" g^"g'"^"+" a^"a'" h^"h'"\bar "|."}
\new Staff \relative c {\set Staff.instrumentName = #"3. Lage " \context Staff #(set-accidental-style 'forget) \clef bass
\tiny gis4-3^"Gis" as^"As" dis^"dis" es^"es" gis^"gis" as^"as" c2^"c'" dis4^"dis'" es^"es'" fis^"fis'"^"+" ges^"ges'"^"+" gis^"gis'" as^"as'" ais^"ais'" b^"b'"\bar "|."}
\new Staff \relative c {\set Staff.instrumentName = #"4. Lage "\clef bass
\tiny g2-4^"G" d'^"d" g^"g" h^"h" d^"d'" f^"f'"^"+" g^"g'" a^"a'"\bar"|."}
\new Staff \relative c, {\set Staff.instrumentName = #"5. Lage " \context Staff #(set-accidental-style 'forget) \clef bass
\tiny fis4-5^"Fis" ges^"Ges" cis^"cis" des^"des" fis^"fis" ges^"ges" ais^"ais" b^"b" cis^"cis'" des^"des'" e2^"e'"^"+" fis4^"fis'" ges^"ges'" gis^"gis'" as^"as'"\bar"|."}
\new Staff \relative c, {\set Staff.instrumentName = #"6. Lage "\clef bass
\tiny f2-6^"F" c'^"c" f^"f" a^"a" c^"c'" dis4^"dis'"^"+" es^"es'"^"+" f2^"f'" g^"g'"\bar"|."}
\new Staff \relative c, {\set Staff.instrumentName = #"7. Lage "\clef bass
\tiny e2-7^"G" h'^"H" e^"e" gis4^"gis" as^"as" h2^"h" d^"d'"^"+"_\markup \column {\line{\tiny {+ Diese Töne der Naturtonreihe sind zu tief }} \line { \tiny{und müssen etwas höher gezogen werden.}}}
 e^"e'" fis4^"fis'" ges^"ges'"\bar"|."}
>>\header { piece = "Naturtonreihen in den verschiedenen Zugpositionen (Lagen)"}}
Titel: Re: override fingering
Beitrag von: comper am Mittwoch, 4. März 2009, 18:14
Zwischen den \layout-Klammern bleibt diese Scheme-Definition versteckt.
Solche Sachen stehen üblicherweise unverschachtelt herum.

Und \override könnte jeweils vor den Tönen stehen,
aber bei diesem Blatt lieber nur einmal; also score-weise, z.B.:

#(define (polydaktyl grob)
  (let*
  ((event (event-cause grob))
(digit (ly:event-property event 'digit)))
  (number->string digit 10)
  ))

\layout {
  \context { \Score
    \remove "Bar_number_engraver"
    \override Fingering #'text = #polydaktyl
  }
}

Gruss
Titel: Re: override fingering
Beitrag von: woto am Mittwoch, 4. März 2009, 20:31
Klappt einwandfrei, vielen Dank!
LG Woto
Titel: Re: override fingering
Beitrag von: etilli33 am Donnerstag, 5. März 2009, 08:19
Hi comper,
das wäre doch ein tolles Schnipsel für http://lsr.dsi.unimi.it/

Gruss
Till