Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: erich am Mittwoch, 17. Februar 2016, 10:03

Titel: Non-traditional key signatures
Beitrag von: erich am Mittwoch, 17. Februar 2016, 10:03
Hallo allen

Unter http://www.lilypond.org/doc/v2.19/Documentation/snippets-big-page.html (http://www.lilypond.org/doc/v2.19/Documentation/snippets-big-page.html) findet man das Beispiel

\relative {
  \set Staff.keyAlterations = #`((6 . ,FLAT)
                                 (5 . ,FLAT)
                                 (3 . ,SHARP))
  c'4 d e fis
  aes4 bes c2
}

, mit dem man die Vorzeichen  für eine Ganztonleiter setzen kann.
Ich wüsste gern, wo die Zuordnung zwischen Benennung (FLAT, SHARP, usw.) und dem ausgegebenen Zeichen vorgenommen wird. Kann mir da einer oder eine weiter helfen.
Ich würde den Mechanismus gerne für Zeichen wie accidentals.flat.arrowup  verwenden.

Gruß
Erich
Titel: Re: Non-traditional key signatures
Beitrag von: fugenkomponist am Mittwoch, 17. Februar 2016, 15:36
In scm/lily-library.scm wird SHARP als 1/2 definert und in scm/output-lib.scm wird 1/2 accidentals.sharp zugeordnet.
Titel: Re: Non-traditional key signatures
Beitrag von: erich am Freitag, 19. Februar 2016, 10:27
Hallo allen und Dank an fugenkomponist

Ich habe das Problem weitgehend gelöst bis auf eine Kleinigkeit, die ein Fehler in LP sein könnte.

Als Beispiel habe ich aus F.Schuberts Impromptu in f-moll D935 die ersten vier Takte gewählt und es möglichst kurz gehalten.
\version "2.18.2"

\paper {
 line-width = 130\mm
}

\header {
 title =   "Impromptu in f-moll"
 subtitle = "D 935-1 (Opus 142 No 1.) Franz Schubert"
}

#(define-public C        2721/100003)
#(define-public DX      36314/100003)
#(define-public D        9776/100003)
#(define-public EX      34359/100003)
#(define-public E         978/100003)
#(define-public F        6843/100003)
#(define-public GES     37291/100003)
#(define-public G        8798/100003)
#(define-public AX      35337/100003)
#(define-public A           1/100003)
#(define-public BX      44134/100003)
#(define-public B        1957/100003)

pitch-names =
  #`(
      (c    . ,(ly:make-pitch -1 0    C))
      (dx   . ,(ly:make-pitch -1 1 (- DX)))
      (d    . ,(ly:make-pitch -1 1    D))
      (ex   . ,(ly:make-pitch -1 2 (- EX)))
      (e    . ,(ly:make-pitch -1 2    E))
      (f    . ,(ly:make-pitch -1 3    F))
      (ges  . ,(ly:make-pitch -1 4 (- GES)))
      (g    . ,(ly:make-pitch -1 4    G))
      (ax   . ,(ly:make-pitch -1 5 (- AX)))
      (a    . ,(ly:make-pitch -1 5    A))     
      (bx   . ,(ly:make-pitch -1 6 (- BX)))
      (b    . ,(ly:make-pitch -1 6    B))
    ) 

pitchGlyphs =
  #`(
      (  2721/100003 . "") ; C
      (-36314/100003 . "accidentals.flat") ; Dx
      (  9776/100003 . "") ; D
      (-45112/100003 . "accidentals.flat") ; Eb
      (-34359/100003 . "accidentals.flat.arrowup") ; Ex
      (   978/100003 . "accidentals.natural") ; E
      (  6843/100003 . "") ; F
      (-37291/100003 . "accidentals.flat")        ; Gb
      (  8798/100003 . "") ; G
      (-35337/100003 . "accidentals.flat.arrowup") ; Ax
      (-46091/100003 . "accidentals.flat") ; Ab
      (     1/100003 . "") ; A
      (-44134/100003 . "accidentals.flat") ; Bx
      (  1957/100003 . "") ; B
    )
 
accidentalGlyphs =
  #`((  8798/100003 . "accidentals.natural"))        
 
\layout {
  \context {
    \Score
    \override Accidental.glyph-name-alist           = \pitchGlyphs
    \override KeySignature.glyph-name-alist         = \pitchGlyphs
    \override AccidentalCautionary.glyph-name-alist = \accidentalGlyphs
}}

#(ly:parser-set-note-names parser pitch-names)

\score {
  \new PianoStaff
  <<
    \new Staff
     <<
      \new Voice {
         \set Staff.keySignature = #`((6 . ,(- BX)) (5 . ,(- AX)) (2 . ,(- EX)) (1 . ,(- DX)))
                                   
         \times 2/3 {c'16 [f' ax']} c''4~ c''16 bx'16 ax'8.[ bx'16 g'8. ax'16 ]|
         f'8. ges'16 ex'8. f'16 dx'8. ex'16 c'8. dx'16 |
         \clef "bass" bx8. c'16 ax8. bx16 ges8. ax 16 f8. g?16|
         e8 r8 \clef "treble" <g' bx' dx''>8 r8 r2
      }
    >>
    \new Staff
     << \set Staff.keySignature = #`((6 . ,(- BX)) (5 . ,(- AX)) (2 . ,(- EX)) (1 . ,(- DX)))
       
      \new Voice {\voiceThree \clef "bass"   
         <f, ax>2. <g, c>4 ax, a, bx, c dx c dx c r1|
      }
      \new Voice {\voiceFour\clef "bass" 
         <f,~ c>1 <f,~ f> <f, f>2 bx,4 ax,4 |
         <g, bx,>8 r8 <e g bx dx'>8 r8 r2
      }
    >>
  >>
 \layout {indent = 0\cm}
 \midi {\tempo 4=100}
}

(http://www.kielnet.net/home/erich.meyer/D935_1_test.png)

Ich werde hierzu noch Erläuterungen auf meiner Hompage geben. Hier nur soviel:
das in Klammern gesetzte Versetzungszeichen am Ende des dritten Taktes wurde duch ein Fragezeichen nach dem Notennamen erzwungen; ohne diese Erzwingung erscheint kein Auflösungszeichen, was nach meiner Meinung ein Fehler in LP ist.

Gruß Erich
Titel: Re: Non-traditional key signatures
Beitrag von: fugenkomponist am Freitag, 19. Februar 2016, 10:41
Ich habe das Problem weitgehend gelöst bis auf eine Kleinigkeit, die ein Fehler in LP sein könnte.
Welche denn?

Ach ja, mir ist noch etwas aufgefallen: Die Reihenfolge der Vorzeichen ist nicht richtig, es sollte#`((6 . ,(- BX)) (2 . ,(- EX)) (5 . ,(- AX)) (1 . ,(- DX)))heißen, oder?
Titel: Re: Non-traditional key signatures
Beitrag von: erich am Freitag, 19. Februar 2016, 11:17

Es geht hier um eine MIDI-Ausgabe in Reiner Stimmung

Hallo allen und Dank an fugenkomponist

Ich habe das Problem weitgehend gelöst bis auf eine Kleinigkeit, die ein Fehler in LP sein könnte.

Als Beispiel habe ich aus F.Schuberts Impromptu in f-moll D935 die ersten vier Takte gewählt und es möglichst kurz gehalten.
\version "2.18.2"

\paper {
 line-width = 130\mm
}

\header {
 title =   "Impromptu in f-moll"
 subtitle = "D 935-1 (Opus 142 No 1.) Franz Schubert"
}

#(define-public C        2721/100003)
#(define-public DX      36314/100003)
#(define-public D        9776/100003)
#(define-public EX      34359/100003)
#(define-public E         978/100003)
#(define-public F        6843/100003)
#(define-public GES     37291/100003)
#(define-public G        8798/100003)
#(define-public AX      35337/100003)
#(define-public A           1/100003)
#(define-public BX      44134/100003)
#(define-public B        1957/100003)

pitch-names =
  #`(
      (c    . ,(ly:make-pitch -1 0    C))
      (dx   . ,(ly:make-pitch -1 1 (- DX)))
      (d    . ,(ly:make-pitch -1 1    D))
      (ex   . ,(ly:make-pitch -1 2 (- EX)))
      (e    . ,(ly:make-pitch -1 2    E))
      (f    . ,(ly:make-pitch -1 3    F))
      (ges  . ,(ly:make-pitch -1 4 (- GES)))
      (g    . ,(ly:make-pitch -1 4    G))
      (ax   . ,(ly:make-pitch -1 5 (- AX)))
      (a    . ,(ly:make-pitch -1 5    A))     
      (bx   . ,(ly:make-pitch -1 6 (- BX)))
      (b    . ,(ly:make-pitch -1 6    B))
    ) 

pitchGlyphs =
  #`(
      (  2721/100003 . "") ; C
      (-36314/100003 . "accidentals.flat") ; Dx
      (  9776/100003 . "") ; D
      (-45112/100003 . "accidentals.flat") ; Eb
      (-34359/100003 . "accidentals.flat.arrowup") ; Ex
      (   978/100003 . "accidentals.natural") ; E
      (  6843/100003 . "") ; F
      (-37291/100003 . "accidentals.flat")        ; Gb
      (  8798/100003 . "") ; G
      (-35337/100003 . "accidentals.flat.arrowup") ; Ax
      (-46091/100003 . "accidentals.flat") ; Ab
      (     1/100003 . "") ; A
      (-44134/100003 . "accidentals.flat") ; Bx
      (  1957/100003 . "") ; B
    )
 
accidentalGlyphs =
  #`((  8798/100003 . "accidentals.natural"))        
 
\layout {
  \context {
    \Score
    \override Accidental.glyph-name-alist           = \pitchGlyphs
    \override KeySignature.glyph-name-alist         = \pitchGlyphs
    \override AccidentalCautionary.glyph-name-alist = \accidentalGlyphs
}}

#(ly:parser-set-note-names parser pitch-names)

\score {
  \new PianoStaff
  <<
    \new Staff
     <<
      \new Voice {
         \set Staff.keySignature = #`((6 . ,(- BX)) (5 . ,(- AX)) (2 . ,(- EX)) (1 . ,(- DX)))
                                   
         \times 2/3 {c'16 [f' ax']} c''4~ c''16 bx'16 ax'8.[ bx'16 g'8. ax'16 ]|
         f'8. ges'16 ex'8. f'16 dx'8. ex'16 c'8. dx'16 |
         \clef "bass" bx8. c'16 ax8. bx16 ges8. ax 16 f8. g?16|
         e8 r8 \clef "treble" <g' bx' dx''>8 r8 r2
      }
    >>
    \new Staff
     << \set Staff.keySignature = #`((6 . ,(- BX)) (5 . ,(- AX)) (2 . ,(- EX)) (1 . ,(- DX)))
       
      \new Voice {\voiceThree \clef "bass"   
         <f, ax>2. <g, c>4 ax, a, bx, c dx c dx c r1|
      }
      \new Voice {\voiceFour\clef "bass" 
         <f,~ c>1 <f,~ f> <f, f>2 bx,4 ax,4 |
         <g, bx,>8 r8 <e g bx dx'>8 r8 r2
      }
    >>
  >>
 \layout {indent = 0\cm}
 \midi {\tempo 4=100}
}

(http://www.kielnet.net/home/erich.meyer/D935_1_test.png)

Ich werde hierzu noch Erläuterungen auf meiner Hompage geben. Hier nur soviel:
das in Klammern gesetzte Versetzungszeichen am Ende des dritten Taktes wurde duch ein Fragezeichen nach dem Notennamen erzwungen; ohne diese Erzwingung erscheint kein Auflösungszeichen, was nach meiner Meinung ein Fehler in LP ist.

Gruß Erich
Titel: Re: Non-traditional key signatures
Beitrag von: fugenkomponist am Freitag, 19. Februar 2016, 14:40
[…]
Ich habe das Problem weitgehend gelöst bis auf eine Kleinigkeit, die ein Fehler in LP sein könnte.
[…]
[…]
#(define-public GES     37291/100003)
#(define-public G        8798/100003)
[…]
pitch-names =
  #`(
[…]
      (ges  . ,(ly:make-pitch -1 4 (- GES)))
      (g    . ,(ly:make-pitch -1 4    G))
[…]
    ) 

pitchGlyphs =
  #`(
[…]
      (-37291/100003 . "accidentals.flat")        ; Gb
      (  8798/100003 . "") ; G
[…]
    )
 
accidentalGlyphs =
  #`((  8798/100003 . "accidentals.natural"))
[…]
    \override Accidental.glyph-name-alist           = \pitchGlyphs
    \override KeySignature.glyph-name-alist         = \pitchGlyphs
    \override AccidentalCautionary.glyph-name-alist = \accidentalGlyphs
[…]       
[…]
das in Klammern gesetzte Versetzungszeichen am Ende des dritten Taktes wurde duch ein Fragezeichen nach dem Notennamen erzwungen; ohne diese Erzwingung erscheint kein Auflösungszeichen, was nach meiner Meinung ein Fehler in LP ist.
LilyPond beruft sich da anscheinend auf die Accidental.glyph-name-alist, die an der Stelle G eben nur "" enthält. Klingt erstmal logisch, weil ja ohne vorherige andere Töne vor dem G nichts stehen soll. Es weiß wahrscheinlich sogar, dass es da jetzt ein Vorzeichen setzen müsste (weil ja vorher GES stand), aber nicht, welches, weil G eben kein #(ly:make-pitch … 0) mehr ist. Man müsste LilyPond also irgendwie mitteilen, dass eine Auflösung auch weiter auf das Auflösungszeichen zugreifen soll.

Ach ja: Das Vorzeichen sollte aber nicht in Klammern stehen, weil es ja zwingend ist. Wenn LilyPond es also nicht setzt (wer auch immer dran „schuld“ ist), sollte es „g!“ heißen und nicht „g?“
Titel: Re: Non-traditional key signatures
Beitrag von: erich am Freitag, 19. Februar 2016, 22:28
Hallo fugenkomponist

Zitat
Ach ja: Das Vorzeichen sollte aber nicht in Klammern stehen, weil es ja zwingend ist. Wenn LilyPond es also nicht setzt (wer auch immer dran „schuld“ ist), sollte es „g!“ heißen und nicht „g?“

Hast du das mal selbst ausprobiert? Bei mir funktionierte das Ausrufungszeichen im obigen Beispiel nicht.
Nur nebenbei: die Zeichen vor den Noten heißen Versetzungszeichen und die nach dem Schlüssel sind die Vorzeichen.

Gruß Erich
Titel: Re: Non-traditional key signatures
Beitrag von: fugenkomponist am Samstag, 20. Februar 2016, 11:22
Nein, ich hatte es nicht ausprobiert, habe aber eine einfache Erklärung: ! setzt ein Accidental (wie auch LilyPonds eigene Vorzeichen-Behandlung), ? dagegen ein AccidentalCautionary. Du müsstest also wohl weiter ? verwenden, kannst da aber die Klammern per (\once) \override AccidentalCautionary.parenthesized = ##f ausblenden.
Zitat
Nur nebenbei: die Zeichen vor den Noten heißen Versetzungszeichen und die nach dem Schlüssel sind die Vorzeichen.
Ja, das hab ich schon mal gehört. Aber im alltäglichen Sprachgebrauch vieler Musiker wird da nicht unterschieden und alle heißen Vorzeichen; ich schließe mich dem an, solange klar ist, was ich meine . Außerdem gibts Leute, die zwischen Generalvorzeichen und Vorzeichen statt Vorzeichen und Versetzungszeichen unterscheiden …
Titel: Re: Non-traditional key signatures
Beitrag von: erich am Samstag, 20. Februar 2016, 22:56
Hallo fugenkomponist, ich bin deinem Rat mit \override AccidentalCautionary.parenthesized = ##f gefolgt; das ist zu mindest ein work around.
Danke und Gruß Erich