Griffschrift

Aus Lilypond Wiki
Wechseln zu: Navigation, Suche

Allgemeines

Definieren einer Griffschrift für Steirische Harmonika in Lilypond. Die von mir recherierten Beispiele lasse ich der Vollständigkeit halber in dieser Seite stehen.

Die Griffschrift sieht zwar aus wie eine Notenschrift, bezeichnet jedoch keine Notenwerte. Welcher Notenwert durch eine bestimmte Note der Griffschrift dargestellt wird, hängt von der aktuellen Stimmung der Harmonika ab.

Tasächlich bedeuten die Notenköpfe, welcher Knopf in welcher Reihe zu drücken ist. Noten in der ersten Reihe liegen ausschließlich auf den Notenlinien, Noten in der zweiten Reihe in den Zwischenräumen (oder umgekehrt, was jedoch für die Notation keinen Unterschied macht). Noten in der dritten Reihe werden durch ein Kreuz (ähnlich einem Doppelkreuz) bezeichnet, Noten in einer eventuell vorhandenen vierten Reihe durch ein anderes Zeichen, beispielsweise eine Raute oder ein Kreuz in einem Kreis.

Die Platzierung eines Notenkopfes innerhalb der Notenlinien sagt aus, der wievielte Knopf in der Reihe zu drücken ist, nicht welche Höhe der dadurch erzeugte Ton hat.

Für die Erstellung einer Griffschriftnotation ist es nicht erforderlich zu wissen, welche Reihe durch welchen Ton repräsentiert wird.

Die Bassnotation kann durch einfachen Lyric-Mode erfolgen, da eine Transponierung grundsätzlich nicht erforderlich ist. Ebenso werden die Griffschriftnoten prinzipiell nicht transponiert. Zug- und Drucknotation realisiere ich in einem Dynamic-Context mit Hairpins, deren Höhe auf 0 gesetzt wird.

Eine Griffschrift muss daher folgende Anforderungen erfüllen:

- Vorzeichen sind nicht erforderlich
- Notenschlüssel sind nicht erforderlich
- die Symbole vor den Noten sollen untereinander exakt in einer Spalte stehen
- die Eingabe soll mit möglichst wenigen Zeichen erfolgen

Lösung

Im LSR fand ich den Beitrag #784, Arrow notation and transposition for quarter tones, den ich für meine Zwecke adaptierte.

LSR Code #784

%% http://lsr.di.unimi.it/LSR/Item?id=784

% Define the alterations as fraction of the equal-tempered whole tone.
% We use an alteration of 0.2 rather than 0.25 of a tone, so that the 
% raised natural is a slightly different pitch than the lowered sharp.
#(define-public DOUBLE-SHARP  10/10)
#(define-public SHARP-RAISE    7/10)
#(define-public SHARP          5/10)
#(define-public SHARP-LOWER    3/10)
#(define-public NATURAL-RAISE  2/10)
#(define-public NATURAL-LOWER -2/10)
#(define-public FLAT-RAISE    -3/10)
#(define-public FLAT          -5/10)
#(define-public FLAT-LOWER    -7/10)
#(define-public DOUBLE-FLAT  -10/10)

  % Note names can now be defined to represent these pitches in our
  % Lilypond input.  We extend the list of Dutch note names:
arrowedPitchNames =  #`(
       (ceses . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
       (ceseh . ,(ly:make-pitch -1 0 FLAT-LOWER))
       (ces   . ,(ly:make-pitch -1 0 FLAT))
       (cesih . ,(ly:make-pitch -1 0 FLAT-RAISE))
       (ceh   . ,(ly:make-pitch -1 0 NATURAL-LOWER))
       (c     . ,(ly:make-pitch -1 0 NATURAL))
       (cih   . ,(ly:make-pitch -1 0 NATURAL-RAISE))
       (ciseh . ,(ly:make-pitch -1 0 SHARP-LOWER))
       (cis   . ,(ly:make-pitch -1 0 SHARP))
       (cisih . ,(ly:make-pitch -1 0 SHARP-RAISE))
       (cisis . ,(ly:make-pitch -1 0 DOUBLE-SHARP))

       (deses . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
       (deseh . ,(ly:make-pitch -1 1 FLAT-LOWER))
       (des   . ,(ly:make-pitch -1 1 FLAT))
       (desih . ,(ly:make-pitch -1 1 FLAT-RAISE))
       (deh   . ,(ly:make-pitch -1 1 NATURAL-LOWER))
       (d     . ,(ly:make-pitch -1 1 NATURAL))
       (dih   . ,(ly:make-pitch -1 1 NATURAL-RAISE))
       (diseh . ,(ly:make-pitch -1 1 SHARP-LOWER))
       (dis   . ,(ly:make-pitch -1 1 SHARP))
       (disih . ,(ly:make-pitch -1 1 SHARP-RAISE))
       (disis . ,(ly:make-pitch -1 1 DOUBLE-SHARP))

       (eeses . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
       (eses  . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
       (eeseh . ,(ly:make-pitch -1 2 FLAT-LOWER))
       (eseh  . ,(ly:make-pitch -1 2 FLAT-LOWER))
       (ees   . ,(ly:make-pitch -1 2 FLAT))
       (es    . ,(ly:make-pitch -1 2 FLAT))
       (eesih . ,(ly:make-pitch -1 2 FLAT-RAISE))
       (esih  . ,(ly:make-pitch -1 2 FLAT-RAISE))
       (eeh   . ,(ly:make-pitch -1 2 NATURAL-LOWER))
       (e     . ,(ly:make-pitch -1 2 NATURAL))
       (eih   . ,(ly:make-pitch -1 2 NATURAL-RAISE))
       (eiseh . ,(ly:make-pitch -1 2 SHARP-LOWER))
       (eis   . ,(ly:make-pitch -1 2 SHARP))
       (eisih . ,(ly:make-pitch -1 2 SHARP-RAISE))
       (eisis . ,(ly:make-pitch -1 2 DOUBLE-SHARP))

       (feses . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
       (feseh . ,(ly:make-pitch -1 3 FLAT-LOWER))
       (fes   . ,(ly:make-pitch -1 3 FLAT))
       (fesih . ,(ly:make-pitch -1 3 FLAT-RAISE))
       (feh   . ,(ly:make-pitch -1 3 NATURAL-LOWER))
       (f     . ,(ly:make-pitch -1 3 NATURAL))
       (fih   . ,(ly:make-pitch -1 3 NATURAL-RAISE))
       (fiseh . ,(ly:make-pitch -1 3 SHARP-LOWER))
       (fis   . ,(ly:make-pitch -1 3 SHARP))
       (fisih . ,(ly:make-pitch -1 3 SHARP-RAISE))
       (fisis . ,(ly:make-pitch -1 3 DOUBLE-SHARP))

       (geses . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
       (geseh . ,(ly:make-pitch -1 4 FLAT-LOWER))
       (ges   . ,(ly:make-pitch -1 4 FLAT))
       (gesih . ,(ly:make-pitch -1 4 FLAT-RAISE))
       (geh   . ,(ly:make-pitch -1 4 NATURAL-LOWER))
       (g     . ,(ly:make-pitch -1 4 NATURAL))
       (gih   . ,(ly:make-pitch -1 4 NATURAL-RAISE))
       (giseh . ,(ly:make-pitch -1 4 SHARP-LOWER))
       (gis   . ,(ly:make-pitch -1 4 SHARP))
       (gisih . ,(ly:make-pitch -1 4 SHARP-RAISE))
       (gisis . ,(ly:make-pitch -1 4 DOUBLE-SHARP))

       (aeses . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
       (ases  . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
       (aeseh . ,(ly:make-pitch -1 5 FLAT-LOWER))
       (aseh  . ,(ly:make-pitch -1 5 FLAT-LOWER))
       (aes   . ,(ly:make-pitch -1 5 FLAT))
       (as    . ,(ly:make-pitch -1 5 FLAT))
       (aesih . ,(ly:make-pitch -1 5 FLAT-RAISE))
       (asih  . ,(ly:make-pitch -1 5 FLAT-RAISE))
       (aeh   . ,(ly:make-pitch -1 5 NATURAL-LOWER))
       (a     . ,(ly:make-pitch -1 5 NATURAL))
       (aih   . ,(ly:make-pitch -1 5 NATURAL-RAISE))
       (aiseh . ,(ly:make-pitch -1 5 SHARP-LOWER))
       (ais   . ,(ly:make-pitch -1 5 SHARP))
       (aisih . ,(ly:make-pitch -1 5 SHARP-RAISE))
       (aisis . ,(ly:make-pitch -1 5 DOUBLE-SHARP))

       (beses . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
       (beseh . ,(ly:make-pitch -1 6 FLAT-LOWER))
       (bes   . ,(ly:make-pitch -1 6 FLAT))
       (besih . ,(ly:make-pitch -1 6 FLAT-RAISE))
       (beh   . ,(ly:make-pitch -1 6 NATURAL-LOWER))
       (b     . ,(ly:make-pitch -1 6 NATURAL))
       (bih   . ,(ly:make-pitch -1 6 NATURAL-RAISE))
       (biseh . ,(ly:make-pitch -1 6 SHARP-LOWER))
       (bis   . ,(ly:make-pitch -1 6 SHARP))
       (bisih . ,(ly:make-pitch -1 6 SHARP-RAISE))
       (bisis . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
       )
pitchnames = \arrowedPitchNames
#(ly:parser-set-note-names parser pitchnames)

  % The symbols for each alteration
arrowGlyphs = #`(
        (,DOUBLE-SHARP . "accidentals.doublesharp")
        (,(+ SHARP SHARP-LOWER) . "accidentals.sharp.arrowup")
        (,SHARP-RAISE  . "accidentals.sharp.arrowup")
        (,SHARP        . "accidentals.sharp")
        (,SHARP-LOWER  . "accidentals.sharp.arrowdown")
        (,NATURAL-RAISE . "accidentals.natural.arrowup")
        (  0            . "accidentals.natural")
        (,NATURAL-LOWER . "accidentals.natural.arrowdown")
        (,FLAT-RAISE   . "accidentals.flat.arrowup")
        (,FLAT         . "accidentals.flat")
        (,FLAT-LOWER   . "accidentals.flat.arrowdown")
        (,(+ FLAT FLAT-RAISE) . "accidentals.flat.arrowdown")
        (,DOUBLE-FLAT  . "accidentals.flatflat")
)
  % Transposition could generate pitches with alterations
  %  double-sharp-lower (8/10) or double-flat-raise (-8/10)
  %  but there are no such symbols in the font, so we substituted
  %  the most appropriate symbols.
  % If some pitch in your score has no symbol, LilyPond gives a warning.

  % The glyph-list needs to be loaded into each object that
  %  draws accidentals.
\layout {
  \context {
    \Score
    \override KeySignature.glyph-name-alist = \arrowGlyphs
    \override Accidental.glyph-name-alist = \arrowGlyphs
    \override AccidentalCautionary.glyph-name-alist = \arrowGlyphs
    \override TrillPitchAccidental.glyph-name-alist = \arrowGlyphs
    \override AmbitusAccidental.glyph-name-alist = \arrowGlyphs
  }
}
  % MIDI implements microtones as a pitch bend, with one bend per channel.
  % These lines below assign one channel to each Voice, in case there are
  % multiple voices on a staff, so that each voice can have its correct
  % pitch bend.
\midi {
  \context {
    \Staff
    \remove "Staff_performer"
  }
  \context {
    \Voice
    \consists "Staff_performer"
  }
}

  %% A short example tune
notes = \relative c''' {
  \key d\major
  b8 fis eiseh fis b g e cis |
  \set Staff.extraNatural = ##f % avoid bug 1701
  g b d feh g2
}
\score { <<
  \new Staff \with {
    instrumentName = "Violin"
    midiInstrument = "violin"
  } \notes
  \new Staff \with {
    instrumentName =
    \markup\center-column {"Clarinet" \concat{"in B"\flat}}
    midiInstrument = "clarinet"
  } {
    \transposition bes
    \transpose bes c \notes
  }
>>
\layout{}
\midi{}}

Griffschrift für Steirische Harmonika

Ich habe die nicht benötigten Definition aus dem Snippet entfernt.
Weiters habe ich sowohl »h« als auch »b« definiert, da ohnehin keine Versetzungszeichen benötigt werden.
Für die Verwendung in der Bassnotation habe ich Variablen für Pausen definiert, um die Schreibarbeit zu reduzieren.

Code

Variablendefinitionen
\version "2.19.65"

#(allow-volta-hook "||")
SPause = \markup { \musicglyph #"rests.4" } %% Sechzehntelpause
APause = \markup { \musicglyph #"rests.3" } %% Achtelpause
VPause = \markup { \musicglyph #"rests.2" } %% Viertelpause
HPause = \markup { \musicglyph #"rests.1" } %% Halbe Pause
GPause = \markup { \musicglyph #"rests.0" } %% Ganze Pause


%% http://lsr.di.unimi.it/LSR/Item?id=784
%% war die Vorlage
%% ich habe überflüssige Definitionen entfernt, um die Sachlage übersichtlicher
%% zu gestalten

#(define-public NATURAL-RAISE  2/10)
#(define-public NATURAL-LOWER -2/10)

% Note names can now be defined to represent these pitches in our
% Lilypond input.
% Das Ziel ist, die Eingabe so einfach wie möglich zu gestalten

GriffPitchNames =  #`(
                       (ce    . ,(ly:make-pitch -1 0 NATURAL-LOWER))
                       (c     . ,(ly:make-pitch -1 0 NATURAL))
                       (ci    . ,(ly:make-pitch -1 0 NATURAL-RAISE))

                       (de    . ,(ly:make-pitch -1 1 NATURAL-LOWER))
                       (d     . ,(ly:make-pitch -1 1 NATURAL))
                       (di    . ,(ly:make-pitch -1 1 NATURAL-RAISE))

                       (ee    . ,(ly:make-pitch -1 2 NATURAL-LOWER))
                       (e     . ,(ly:make-pitch -1 2 NATURAL))
                       (ei    . ,(ly:make-pitch -1 2 NATURAL-RAISE))

                       (fe    . ,(ly:make-pitch -1 3 NATURAL-LOWER))
                       (f     . ,(ly:make-pitch -1 3 NATURAL))
                       (fi    . ,(ly:make-pitch -1 3 NATURAL-RAISE))

                       (ge    . ,(ly:make-pitch -1 4 NATURAL-LOWER))
                       (g     . ,(ly:make-pitch -1 4 NATURAL))
                       (gi    . ,(ly:make-pitch -1 4 NATURAL-RAISE))

                       (ae    . ,(ly:make-pitch -1 5 NATURAL-LOWER))
                       (a     . ,(ly:make-pitch -1 5 NATURAL))
                       (ai    . ,(ly:make-pitch -1 5 NATURAL-RAISE))

                       (be    . ,(ly:make-pitch -1 6 NATURAL-LOWER))
                       (b     . ,(ly:make-pitch -1 6 NATURAL))
                       (bi    . ,(ly:make-pitch -1 6 NATURAL-RAISE))

                       (he    . ,(ly:make-pitch -1 6 NATURAL-LOWER))
                       (h     . ,(ly:make-pitch -1 6 NATURAL))
                       (hi    . ,(ly:make-pitch -1 6 NATURAL-RAISE))
                       )

pitchnames = \GriffPitchNames
#(ly:parser-set-note-names pitchnames)

% The symbols for each alteration
GriffGlyphs = #`(
                  (,NATURAL-RAISE . "noteheads.s2cross")
                  (  0            . "accidentals.natural")
                  (,NATURAL-LOWER . "noteheads.s0harmonic")
                  )
Layout
\paper {
  line-width = 175\mm
  top-margin = 15\mm
  bottom-margin = 20\mm
  indent = #0
  tagline=##f
}

\header {
  title = "Beispiel für Griffschrift"
  subtitle = ##f %"sempre staccato"
  subsubtitle = ##f
  poet = "Vierreihige Steirische"
  composer = \markup \override #'(baseline-skip . 2)
  \right-column {
    \line \vcenter { 3. Reihe: \musicglyph #"noteheads.s2cross" }
    \line \vcenter { 4. Reihe: \musicglyph #"noteheads.s0harmonic" }
    \line \vcenter {
      "kann beliebig geändert werden"
      \with-color #white \musicglyph #"noteheads.s0harmonic"
    }
  }
  piece = ##f
  opus = ##f
}

\layout {
  \context {
    \Score
    \override KeySignature.glyph-name-alist = \GriffGlyphs
    \override Accidental.glyph-name-alist = \GriffGlyphs
    \override AccidentalCautionary.glyph-name-alist = \GriffGlyphs
    \override TrillPitchAccidental.glyph-name-alist = \GriffGlyphs
    \override AmbitusAccidental.glyph-name-alist = \GriffGlyphs
    %% Abstand zwischen Nicht-Noten Kontexten untereinander, Lyrics, Dynamics etwa
    \override VerticalAxisGroup.nonstaff-nonstaff-spacing.basic-distance = #4
    \override VerticalAxisGroup.nonstaff-nonstaff-spacing.minimum-distance = #3
    \override VerticalAxisGroup.nonstaff-nonstaff-spacing.padding = #1
  }
  \context {
    \Staff
  }
  \context {
    \Voice
    \override Accidental.X-offset = -1.5
  }
  \context {
    \Dynamics
    \override Hairpin.height = #0
    \override Hairpin.thickness = #3
    % Abstand der Zug/Druck-Linie zur darüber liegenden Notenzeile
    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.minimum-distance = #5
  }
}
Noten
notes = \relative c'' {
  < ei ci >8. be16
  q8 < ci bi, >16 q
}

ZugDruck = \new Dynamics {
  \repeat unfold 3 { s2\< s\!  }
}

Bass = \new Lyrics \lyricmode {
  C8 c8 B c c4 c
  C8 \APause % eine Achtelpause
  F B
  c4 B C8 c B c
  C8 c B c
}

%% untere Bassreihe
Bassu =  \new Lyrics \lyricmode {
  \skip 2
  C4 C
  \skip 2
  C2
}
Score
\score {
  <<
    \new Staff
    <<
      \new Voice=melodie   {
        \key c \major
        \time 2/4
        \accidentalStyle forget
        \omit Staff.Clef
        \repeat unfold 6 \notes
      }
    >>
    \new Dynamics \ZugDruck
    \new Lyrics \Bass
    \new Lyrics \Bassu
  >>
}

Output

LilyWiki GriffschriftSteirischeHarmonika.gif

Aus dem Internet

Codebeispiel I

wegen der Übersichtlichkeit in eine eigene Seite ausgelagert

Griffschrift Codebeispiel I

Codebeispiel II (Bayerland)

wegen der Übersichtlichkeit in eine eigene Seite ausgelagert

Griffschrift Codebeispiel II

Score for diatonic accordion (LSR)

Griffschrift Score for diatonic accordion (LSR)

Links

Kategorien

Wer verlinkt auf diese Seite?