Notennamen in Text umwandeln

Zur Navigation springen Zur Suche springen

Diese Funktion wandelt einen Ton (Pitch) in einen Text („Markup“) um. Normalerweise lassen sich Texte nicht transponieren. Wendet man diese Funktion an, erhält man Text, der transponiert werden kann. Es werden deutsche Notenbezeichnungen verwendet.

Dieses Programm stellt die Umkehrung zu Markup/String in Pitch umwandeln dar.

Anwendung

#(define-markup-command (pitch-string layout props p) (ly:pitch?)
   (interpret-markup layout props
     #{ \markup \concat { "Pitch to string: " #(note-name->my-markup p #t) }
     #}))

headerwithpitch =
#(define-void-function (p text fsize) (ly:pitch? string? number?)
   (add-score
    (list #{  \markup \fill-line \override #'(font-features . ("smcp"))
              \override #`(font-size . ,fsize)
              { \null \rounded-box \concat { $text #(note-name->my-markup p #f) } \null }
      #})))
\headerwithpitch des "Klassiche Kadenzen auf " 7
\markup \pitch-string ##{ c #} %
Aus irgendeinem Grund erkennt der Parser nicht, dass der Code nach ##{ c #}} zu Ende ist, daher das % am Schluss.

Pitch2string.png

Scheme-Code

#(define (pitch-alteration-semitones pitch)
   (inexact->exact (round (* (ly:pitch-alteration pitch) 2))))

#(define (conditional-string-downcase str condition)
  (if condition
      (string-downcase str)
      str))
      
%% Notenname als Markup mit deutschen Notennamen
#(define (note-name->my-markup pitch lowercase?)
   (let* ((name (ly:pitch-notename pitch))
          (alt-semitones (pitch-alteration-semitones pitch))
          (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -2)))
                   (cons 7 (+ 1 alt-semitones))
                   (cons name alt-semitones))))
     (make-line-markup
      ;(make-simple-markup
      (list
       (string-append
        (conditional-string-downcase
         (list-ref '("C" "D" "E" "F" "G" "A" "H" "B") (car n-a))
         lowercase?)
        (if (or (equal? (car n-a) 2) (equal? (car n-a) 5))
            (list-ref '( "ses" "s" "" "is" "isis") (+ 2 (cdr n-a)))
            (list-ref '("eses" "es" "" "is" "isis") (+ 2 (cdr n-a)))))))))