Notationsspezifisch > Noten für Gitarre

Vorzeichen in Chordnames ändern

<< < (3/3)

harm6:
Hallo zusammen,

meine Anfrage auf der englischen Seite ergab folgende Erkenntnis:

Die Syntax  des chordRootNamer wurde in 2.14. geändert. Er erwartet jetzt zwei Argumente. Das zweite eröffnet die Möglichkeit Kleinbuchstaben für die Akkordnamen zu verwenden. Das LSR-Snippet, trulli' Vorschlag und auch mein eigener ignorieren diese Möglichkeit allerdings. Insoweit ist die Angabe eines zweiten Arguments völlig sinnfrei. Da lilypond aber an dieser Stelle etwas erwartet, muß etwas da stehen. Das kann auch computer-sind-blöd sein. Hab' ich getestet! ;D

Für 2.12.3 sollte mein Vorschlag also so funktionieren:


--- Code: ---\version "2.12.3"
#(define (myChordNames pitch)

   (define (pitch-alteration-semitones pitch)
     (inexact->exact (round (* (ly:pitch-alteration pitch) 2))))
     
   (define (conditional-kern-before markup bool amount)
     (if bool
         (make-line-markup
          (list (make-hspace-markup amount)
          markup))
         markup))
     
   (define (accidental->markup alteration)
     (if (= alteration 0)
         (make-line-markup (list empty-markup))
         (conditional-kern-before
          (alteration->text-accidental-markup alteration)
          (= alteration FLAT) 0.2)))
     
   (let* ((name (ly:pitch-notename pitch))
          (alt-semitones  (pitch-alteration-semitones pitch))
          (n-a (cons name alt-semitones)))
     (make-line-markup
      (list
       (make-simple-markup
         (vector-ref #("C" "D" "E" "F" "G" "A" "B") (car n-a)))
       (make-fontsize-markup -3
        (make-raise-markup 1.5
         (accidental->markup (/ (cdr n-a) 2))))))))   
         
myChords = {
  \set chordRootNamer = #myChordNames
}

%------------------------- Test ------------------------------------------------

\paper {
indent = 20
short-indent = 20
}

\chords {
       
\mark \markup  { \null \raise #5 \bold "myChords" }
       
        \myChords
           
        c cis d dis e f fis g gis a ais b c
     \break
        c b bes a aes g ges f e ees d des c
     \break
     
     \mark\markup {\column {\bold "normal    " " " }}

     \unset chordRootNamer
        c cis d dis e f fis g gis a ais b c
     \break
        c b bes a aes g ges f e ees d des c
     \break
}
--- Ende Code ---

@trulli:
Vielleicht kannst Du das nochmal testen. Tut mir leid, daß ich \vspace dringelassen hatte. Ich hatte schon in 2.12.3 eine Definition dafür, die ich routinemäßig benutzt habe, sodaß ich vergessen habe sie rauszunehmen.

Für 2.14.1 ergeben sich folgende Definitionen:

LSR-Snippet-upgrade:

--- Code: ---\version "2.14.1"

% http://lsr.dsi.unimi.it/LSR/Item?id=750

% correct markup for "b" and "#" (use symbols from current font...)
chordFlat = \markup { \hspace #0.2 \fontsize #-1 \raise #0.3 "b" }
chordSharp = \markup { \hspace #0.1 \fontsize #-1 \raise #0.3 "#" }

% define custom chords
myPopChordsMusic =
{
    <c es ges bes>-\markup { "m" \super { "7/" \chordFlat "5" } }
    <c e g bes dis'>-\markup { \super { "7/" \chordSharp "9" } }
    % ... define all other possible chords here...
}

% Add to existing exceptions
myPopChordsAdd = #(append (sequential-music-to-chord-exceptions myPopChordsMusic #t) ignatzekExceptions)

% fix accidentals with some Scheme (using the current font's symbols)
#(define (my-chord-name->pop-markup pitch bla-blub) ;<===================== !!!!!!!!!!!!!!!!!!!!!!
  (let* ((alt (ly:pitch-alteration pitch)))
  (make-line-markup
    (list
      (make-simple-markup (vector-ref #("C" "D" "E" "F" "G" "A" "B") (ly:pitch-notename pitch)))
      ;; If it's natural, do nothing
      (if (= alt 0)
        (make-line-markup (list empty-markup))
        (if (= alt FLAT)
          ;; Otherwise, handle adding the flat symbol
          (make-line-markup
            (list
              (make-hspace-markup 0.3)
              (make-small-markup (make-raise-markup 0.7
                (make-text-markup "b")))
            ))
          ;; or handle adding the sharp symbol
          (make-line-markup
            (list
              (make-hspace-markup 0.1)
              (make-small-markup (make-raise-markup 0.7
                (make-text-markup "#")))
            ))
        )))))
)

\new Score
{
    \new ChordNames
    {
        % for demonstration purposes, use Arial as font
        % this does not look very nice, but shows the functionality

        \override ChordNames . ChordName  #'font-name = #"Arial"

        % use our new chord definitions (including the new accidentals)

        \set chordNameExceptions = #myPopChordsAdd

        % use our new markup chord naming functions to get the new accidentals

        \set chordRootNamer = #my-chord-name->pop-markup

        \chordmode { cis1:m7.5-  des1:7.9+ }
    }
}


% % use like this:
%
% {
%     popChords =
%     {
%         \set chordNameExceptions = #myPopChordsAdd
%         \set chordRootNamer = #my-chord-name->pop-markup
%     }
% }
%
% % or like this:
%
% \layout
% {
%     \context
%     {
%         \Score
%         chordNameExceptions = #myPopChordsAdd
%         chordRootNamer = #my-chord-name->pop-markup
%     }
% }
%}

--- Ende Code ---

Fassung trulli:

--- Code: ---\version "2.14.1"

#(define (my-chord-name->pop-markup pitch ???)
  (let* ((alt (ly:pitch-alteration pitch)))
  (make-line-markup
    (list
      (make-simple-markup (vector-ref #("C" "D" "E" "F" "G" "A" "B") (ly:pitch-notename pitch)))
      ;; If it's natural, do nothing
      (if (= alt 0)
        (make-line-markup (list empty-markup))
        (if (= alt FLAT)
          ;; Otherwise, handle adding the flat symbol
          (make-line-markup
            (list
              (make-hspace-markup 0.1)
              (make-small-markup (make-raise-markup 0.7
                (make-text-markup "b")))
            ))
          ;; or handle adding the sharp symbol
          (make-line-markup
            (list
              (make-hspace-markup 0.1)
              (markup (make-raise-markup 0.7
                (make-text-markup "#")))
            ))
        )))))
)


 
    \chords {
     
      cis1^\mark normal | bes
     
      \germanChords
     
      cis1^\mark german | beses
     
      \set chordRootNamer = #my-chord-name->pop-markup
     
      cis^\mark Definition | bes
       
      }
--- Ende Code ---

Meine Fassung wie oben.


Viele Grüße,
  Harm

trulli:

--- Zitat von: harm6 am Sonntag, 17. Juli 2011, 16:06 --- Da lilypond aber an dieser Stelle etwas erwartet, muß etwas da stehen. Das kann auch computer-sind-blöd sein. Hab' ich getestet! ;D

--- Ende Zitat ---

Mein Vorschlag: I-love-Lily   8)

Alle Versionen laufen problemlos durch harm6, Klasse! Da ich jetzt Frescobaldi mit den wichtigsten Lily-Versionen habe, ging der Test schnell und problemlos.

Da die wichtigsten Probleme gelöst sind, kommen wir damit wieder zu unserem beliebten Thema Feintuning. Ich würde in die Definition in jedem Fall die Möglichkeit der horizontalen Verschiebung mit einbauen, weil mir die Versetzungzeichen zu dicht an den Buchstaben stehen: (make-hspace-markup 0.3)

Ich habe in dem folgenden Code (nach harm6 mit meiner hspace Ergänzung) mal eine Einstellung gemacht, die ich optisch gut finde. Wie so oft gibt es keine Referenz für die Darstellung von Gitarren-Akkorden. Jeder Verlag kocht ein eigenes Süppchen. Am häufigsten kommen Ausdrücke ohne Versetzungszeichen vor, z.B. Fism. Dann gibt es das: F#m und schließlich (ans Real-book angelehnt) dasselbe mir einem hochgestellten Veretzungszeichen. Im Real-book sehen die Kreuze auch anders aus, so ähnlich wie in diesem Snippet.

Die Qual der Wahl....


--- Code: ---\version "2.14.1"

#(define (myChordNames  pitch lowercase?)

   (define (pitch-alteration-semitones pitch)
     (inexact->exact (round (* (ly:pitch-alteration pitch) 2))))
     
   (define (conditional-kern-before markup bool amount)
     (if bool
         (make-line-markup
          (list (make-hspace-markup amount)
          markup))
         markup))
     
   (define (accidental->markup alteration)
     (if (= alteration 0)
         (make-line-markup (list empty-markup))
         (conditional-kern-before
          (alteration->text-accidental-markup alteration)
          (= alteration FLAT) 0.2)))
     
   (let* ((name (ly:pitch-notename pitch))
          (alt-semitones  (pitch-alteration-semitones pitch))
          (n-a (cons name alt-semitones)))
     (make-line-markup
      (list
       
       (make-simple-markup
         (vector-ref #("C" "D" "E" "F" "G" "A" "B") (car n-a)))
       (make-hspace-markup 0.3)
       (make-fontsize-markup -2
        (make-raise-markup 1.2
         (accidental->markup (/ (cdr n-a) 2))))))))   
         
myChords = {
  \set chordRootNamer = #myChordNames
}

%------------------------- Test ------------------------------------------------

\paper {
                indent = 20
                short-indent = 20
}

\chords {
       
\mark \markup  { \null \raise #5 \bold "myChords" }
       
        \myChords
           
        c cis d dis e f fis g gis a ais b c
     \break
        c b bes a aes g ges f e ees d des c
     \break
}
--- Ende Code ---

Gutes Tunen wünscht Trulli  :)

harm6:
@trulli


--- Zitat ---Jeder Verlag kocht ein eigenes Süppchen.
--- Ende Zitat ---

Und nicht nur das. Je nach Sprache in der man sich bewegt ergeben sich weitere Variationen. Deutsch, englisch, französisch, italienisch etc. Auf die Schnelle fallen mir sechs Möglichkeiten ein, den a-moll-Akkord zu schreiben. Und wenn ich drüber nachdenken würde ...
Ich persönlich habe gelernt zu lesen was ich vorgesetzt bekomme. Spannend am Thema finde vor allem zu lernen wie ich lilypond dazu bewegen kann zu tun was ich sage.  ;)

Gruß,
  Harm

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln