Autor Thema: Grunddatei Lied mit Noten, Text und Akkorden  (Gelesen 3969 mal)

Bastiane

  • Newbie
  • *
  • Beiträge: 32
Grunddatei Lied mit Noten, Text und Akkorden
« am: Mittwoch, 13. Februar 2019, 23:18 »
Hallo zusammen!
Ich bin neu bei Lilypond und versuche, ein Liederbuch zu erstellen. Bevor ich aber sämtliche Lieder eingebe, möchte ich gerne eine Grunddatei mit allem, was ich brauche, haben, sodass ich dann nur noch die Noten, den Text und die Akkorde eingeben muss.
Leider konnte ich keine ähnliche Datei finden und habe mir alles irgendwie zusammen gepuzzelt. Ich bin aber nicht sicher, ob das so eine ordentliche Datei wird, deswegen wollte ich euch bitten, mal darüber zu schauen und mir evtl. Tipps zu geben, was man wie ändern sollte. Ich habe mal meine Datei etwas für euch verkürzt.

Folgende Probleme habe ich auch noch:
  • Ich möchte gerne die Taktzahlen entfernen.
  • Zu den einzelnen Strophen sollen auch noch die Akkorde geschrieben werden.
  • Falls möglich, würde ich die Datei gerne so erweitern, dass ich eine zweite Version des Liederbuches erstellen kann, in dem nur Text mit Akkorden vorkommt, also ohne die Noten. :-)

Über ein paar Tipps wäre ich dankbar. :-)[/list]

harm6

  • Hero Member
  • *****
  • Beiträge: 730
Antw:Grunddatei Lied mit Noten, Text und Akkorden
« Antwort #1 am: Donnerstag, 14. Februar 2019, 22:53 »
Hallo Bastiane,

willkommen im Forum.

Manuela hat viel an Liederbüchern gearbeitet.
Vielleicht kann sie Dir ein paar Tipps geben.

Du kannst auch selbst hier im Forum bzw im Archiv suchen. Das meiste müßte irgendwo zu finden sein.

Gruß,
  Harm

Manuela

  • Hero Member
  • *****
  • Beiträge: 549
    • Manuelas Lilypond Wiki
Antw:Grunddatei Lied mit Noten, Text und Akkorden
« Antwort #2 am: Montag, 18. Februar 2019, 11:18 »
Hi Basti,

du möchtest die Akkorde über den Text schreiben? So etwas habe ich noch nie versucht, zugegebenermaßen. Das Problem für eine Automatisierung wird sein, dass es normalerweise viel weniger Akkorde als Silben gibt, d.h. man singt pro Takt mehrere Silben, hat aber meist nur 1 oder 2 Akkorde.

Ich habe eine Master-Datei erstellt, die alle benötigten Informatione enthält. Die Master-Datei holt sich automatisch alle Stücke aus dem Unterverzeichnis, zusätzlich erstellt diese Datei noch ein Titelblatt, Inhaltsverzeichnis etc. Das ist eine ganze Menge für jemanden, der gerade erst anfängt. Ich werde mal versuchen, eine abgespeckte Version hier einzustellen, das wird aber ein paar Tage dauern.
Danke für eure Hilfe
viele Grüße
-- Manuela

Bastiane

  • Newbie
  • *
  • Beiträge: 32
Antw:Grunddatei Lied mit Noten, Text und Akkorden
« Antwort #3 am: Mittwoch, 6. März 2019, 20:14 »
Hallo Manuela!
Hast du deine abgespeckte Version für mich?
Ich hatte eigentlich gehofft, man könnte meine Version so ummodeln, dass es passt. Letztendlich will ich nämlich nur die einzelnen Lieder mit Lilypond schreiben und das Liederbuch selber dann mit Latex erstellen lassen. Aber bevor ich die Lieder alle eingebe, wollte ich die vorher genannten Probleme lösen.
Für die Akkorde über dem Text hatte ich irgendwo einen Hinweis gefunden, der funktionierter bei mir aber nicht, weil ich die vorher definierten Umgebungen nicht verstanden habe. Wenn ich das wieder finde, poste ich es mal hier, vllt kann es mir jemand erklären.

Viele Grüße
Bastiane

Manuela

  • Hero Member
  • *****
  • Beiträge: 549
    • Manuelas Lilypond Wiki
Antw:Grunddatei Lied mit Noten, Text und Akkorden
« Antwort #4 am: Sonntag, 10. März 2019, 16:51 »
Hallo Bastiane,

so lange ich die Arbeitsweise von Lilypond nicht verstanden habe, habe ich mich extrem geplagt, weil ständig irgendwelche Dinge passiert sind und ich wusste nicht warum. Notenzeilen sind z.B. entstanden, die ich nicht wollte etc.

Eigentlich wollte ich hier einen Link zur Dokumentation einbauen, der Server scheint momentan ein Problem zu haben.

Daher ohne nähere Erklärung:

"Masterfile": hier stehen alle Formatierungsinformationen. Für jedes Lied sind 2 Stimmen vorgesehen, FirstVoice und SecondVoice. Weiters muss es eine Datei "_scheme.ly" geben, diese enthält die erforderlichen Scheme-Programme. Grundsätzlich könnte man diese in die gleiche Datei schreiben, ich trenne das aus Gründen der Übersichtlichkeit.

Die Lieder kommen ein Unterverzeichnis, im konkreten Fall muss dieses "lieder" heißen, wie in der letzten Zeile des Masterfiles.

\version "2.19.80"
\language "deutsch"

\include "_scheme.ly"

\layout {
  \context {
    \Voice
    beamExceptions = #'()
    %autoBeaming = ##f
    \override BreathingSign.text =
    \markup { \musicglyph #"scripts.lvarcomma" }
    \override Script.outside-staff-priority = #'()
    \override Script.padding = #1
    \override Slur.minimum-length = #5
    \override Tie.minimum-length = #5
    \override Rest.voiced-position = #0
  }
  \context {
    \Voice
    \name FirstVoice
    \alias Voice
    \voiceOne
  }
  \context {
    \Voice
    \name SecondVoice
    \alias Voice
    \remove "Tuplet_engraver"
    \remove "Rest_engraver"
    \remove "Multi_measure_rest_engraver"
    %\override NoteHead.font-size = #smallerNoteHead
    \voiceTwo
  }
  \context {
    \Lyrics
    \override LyricText.font-size = #grosseSchrift
    \override StanzaNumber.font-size = #grosseSchrift
    alignBelowContext = melodie
  }
  \context {
    \Staff
     \accepts FirstVoice
    \accepts SecondVoice
    beamExceptions = #'()
    \override BreathingSign.text =
    \markup { \musicglyph #"scripts.lvarcomma" }
  }
  \context {
    \Staff
    \name BarNumberStaff
    \alias Staff
    \consists "Bar_number_engraver"
    \override BarNumber.color = #grey
    \override BarNumber.layer = #-200
    \override BarNumber.outside-staff-priority =#'()
    \override BarNumber.padding = #1
    \override BarNumber.font-size = #1
    \override BarNumber.self-alignment-X = #0
    \override BarNumber.break-visibility = #end-of-line-invisible
  }

  \context {
    \ChordNames
    \override ChordName.self-alignment-X = #LEFT
    chordNameLowercaseMinor = ##f
    \alias ChordNames
    \override Rest.stencil = ##f
    chordChanges = ##f
    chordNameLowercaseMinor = ##f
    chordNameExceptions = #chExceptions
    chordRootNamer = #germanChords
    %majorSevenSymbol = \markup { maj7 }
    \override ChordName.font-name = #"Orator10 BT"
    \override ChordName.font-size = #-0.2
    chordNoteNamer = #(chord-name->german-markup #f)
    noChordSymbol = ##f % \markup { \musicglyph #"rests.2" } % ##f
    alignAboveContext = #"melodie"
  }

  \context {
    \PianoStaff
    \accepts BarNumberStaff
  }

  \context {
    \Score
    \override VerticalAxisGroup.remove-first = ##t
    \remove "Bar_number_engraver"
    %\remove "Mark_engraver"
    \override MetronomeMark.font-size = #1
    \override MetronomeMark.font-shape = #'caps
    \override BarLine.thick-thickness = 5
    barNumberVisibility = #all-bar-numbers-visible
  }

  \context {
    \Dynamics
    %alignBelowContext = "Discant"
    \override Hairpin.to-barline = ##f
    alignBelowContext = melodie
    \override TextSpanner.outside-staff-priority = ##f
    \override TextSpanner.padding = #'()
    \override DynamicText.outside-staff-priority = ##f
    \override DynamicText.padding = #4
  }
}

\paper {
  annotate-spacing = ##f
  top-margin = 15\mm
  ragged-right = ##f
  ragged-last = ##f
  ragged-bottom = ##t
  ragged-last-bottom = ##t
  bottom-margin = 10\mm
  indent = #0
  line-width = 170\mm
  print-all-headers = ##f
  #(include-special-characters)
  print-first-page-number = ##t
  first-page-number = #-1
  evenFooterMarkup = \markup \fill-line {
    \abs-fontsize #8 { \FootLeft }
  }
  evenHeaderMarkup = \markup {
    \fill-line {
      \small \number { \fromproperty #'page:page-number-string }
      \null
    }
  }
  oddHeaderMarkup = \markup {
    \fill-line {
      \null
      \small \number
      {
        \fromproperty #'page:page-number-string
      }
    }
  }

  oddFooterMarkup = \markup {
    \fill-line {
      \null \fromproperty #'header:section
      \null
    }
  }
  %evenHeaderMarkup = ##f
  %oddHeaderMarkup = ##f
  evenFooterMarkup = ##f
  oddFooterMarkup = ##f

  % {
  %% Abstand von Liedtext zu nachfolgender Überschrift
  markup-system-spacing  = #'((basic-distance . 10)
                              (minimum-distance . 0)
                              (padding . 5)
                              (stretchability . 10))
  markup-markup-spacing  = #'((basic-distance . 0)
                              (minimum-distance . 0)
                              (padding . 5)
                              (stretchability . 10))
  score-markup-spacing  = #'((basic-distance . 0)
                             (minimum-distance . 0)
                             (padding . 5)
                             (stretchability . 10))
  system-system-spacing = #'((basic-distance . 0)
                             (minimum-distance . 0)
                             (padding . 2)
                             (stretchability . 20))
  top-system-spacing = #'((basic-distance . 10)
                          (minimum-distance . 5)
                          (padding . 5)
                          (stretchability . 30))
  top-markup-spacing = #'((basic-distance . 10)
                          (minimum-distance . 5)
                          (padding . 5)
                          (stretchability . 30))
  last-bottom-spacing = #'((basic-distance . 0)
                           (minimum-distance . 0)
                           (padding . 0)
                           (stretchability . 10))
  %}
}

\bookpart {
  \header {
    title = ##f
    subtitle = ##f
    subsubtitle = ##f
    poet = ##f
    composer = ##f
    piece = ##f
    opus = ##f
  }
  \paper {
    annotate-spacing = ##f
    top-margin = 15\mm
    %top-markup-spacing.padding = 20
    ragged-right = ##f
    ragged-bottom = ##t
    ragged-last-bottom = ##t
    bottom-margin = 10\mm
    indent = #0
    line-width = 120\mm
    #(include-special-characters)
    print-all-headers = ##f
    print-page-number = ##f
    evenFooterMarkup = ##f
    evenHeaderMarkup = ##f
    oddHeaderMarkup = ##f
    first-page-number = #-3
    markup-markup-spacing  = #'((basic-distance . 0)
                                (minimum-distance . 0)
                                (padding . 5)
                                (stretchability . 50))
    top-markup-spacing.minimum-distance = #20
    oddFooterMarkup = ##f
    tocItemMarkup = \markup \fill-with-pattern #1 #RIGHT .
    \fromproperty #'toc:text %\small \number
    \fromproperty #'toc:page
    %\tocItemWithDotsMarkup
    tocActMarkup = \markup \fontsize #1 \column {
      \hspace #1
      \line { \italic \fromproperty #'toc:text \null }
      \hspace #1
    }

    tocTitleMarkup = \markup \huge \column {
      \bold \sans
      \fill-line { \null "Inhaltsverzeichnis" \null }
      %\null
      \vspace #2
    }
    % {%%%%%%%%% wird nicht verwendet, trotzdem eingefügt um Fehlermeldungen zu vermeiden
    indexTitleMarkup = \markup \huge \column {
      \bold \sans
      \fill-line { \null "Inhaltsverzeichnis alphabetisch" \null }
      %\null
      \vspace #2
    }
    indexItemMarkup = \markup \fill-line {
      \fill-with-pattern #1 #RIGHT .
      \fromproperty #'index:text
      %\small \number
      \fromproperty #'index:page
    }
  }
  \pageBreak
  \label #'toc
  \markuplist \table-of-contents
  \pageBreak
  \label #'indx
  \markuplist \index
}

\paper {
  top-markup-spacing.stretchability = #0
  ragged-bottom = ##f
  ragged-last-bottom = ##f
  ragged-bottom = ##f
  ragged-last-bottom = ##f
  top-markup-spacing.basic-distance = #6
  top-markup-spacing.minimum-distance = #0
  top-markup-spacing.padding = #2
  top-markup-spacing.stretchability = #0
}

loadFilesr =
#(define-void-function (dir-name) (string?)
   (let ((dir (opendir dir-name))
         (files (list)))
     (do ((entry (readdir dir) (readdir dir)))
       ((eof-object? entry))
       (if (and (string-suffix? "ly" entry) (or 1 (string-match "11" entry) (string-match "12" entry)))
           (set! files (append (list entry) files))))
     (closedir dir)
     (for-each (lambda (entry)
                 (ly:parser-include-string
                  (string-append
                   "\\include \"" dir-name "/" entry "\"")))
       files)))


\loadFilesr "lieder"

Danke für eure Hilfe
viele Grüße
-- Manuela

Manuela

  • Hero Member
  • *****
  • Beiträge: 549
    • Manuelas Lilypond Wiki
Antw:Grunddatei Lied mit Noten, Text und Akkorden
« Antwort #5 am: Sonntag, 10. März 2019, 16:53 »
Hier der Code für die Datei "_scheme.ly"

#(define grosseSchrift 1)  %% Schrifttext vergrößern wegen besserer Lesbarkeit
#(define largerFont `(font-size . ,grosseSchrift))
#(define myBaseLine '(baseline-skip . 3))
#(ly:load "x11-color.scm")

#(define-markup-list-command (index layout props) ()
   (cons (interpret-markup layout props
           (ly:output-def-lookup layout 'indexTitleMarkup))
     (space-lines (chain-assoc-get 'baseline-skip props)
       (map (lambda (index-item)
              (let ((label (car index-item))
                    (index-markup (cadr index-item))
                    (text (caddr index-item)))
                (interpret-markup
                 layout
                 (cons (list (cons 'index:page
                               (markup #:page-ref label "XXX" "?"))
                         (cons 'index:text text))
                   props)
                 (ly:output-def-lookup layout index-markup))))
         (index-items)))))

%%%%%%%%%% wird nicht verwendet, trotzdem eingefügt um Fehlermeldungen zu vermeiden
#(define-public (add-index-item! markup-symbol text sorttext) #f)
#(define-public (index-items) #f)

#(let ((index-item-list (list)))
   (set! add-index-item!
         (lambda (markup-symbol text sorttext)
           (let ((label (gensym "index")))
             (set! index-item-list
                   ;; We insert index items sorted from the beginning on and do
                   ;; not sort them later - this saves pretty much computing time
                   (insert-alphabetical-sorted!
                    (list label markup-symbol text sorttext)
                    index-item-list))
             (make-music 'EventChord
               'page-marker #t
               'page-label label
               'elements (list (make-music 'LabelEvent
                                 'page-label label))))))
   (set! index-items (lambda ()
                       index-item-list)))

#(define (insert-alphabetical-sorted! iitem ilist)
   (if
    (null? ilist) (list iitem)
    (if
     (string-ci<? (cadddr iitem) (cadddr (car ilist))) (cons iitem ilist)
     (cons (car ilist) (insert-alphabetical-sorted! iitem (cdr ilist)))
     )
    )
   )

indexItem =
#(define-music-function (parser location sorttext text) (string? markup?)
   (add-index-item! 'indexItemMarkup text sorttext))

#(define-markup-command (markupWithHeader layout props markup) (markup?)
   "Interpret the given markup with the header fields added to the props.
This way, one can re-use the same functions (using fromproperty
#'header:field) in the header block and as top-level markup."
   (let* (
           ;; TODO: If we are inside a score, add the score's local header block, too!
           ;; Currently, I only use the global header block, stored in $defaultheader
           (scopes (list $defaultheader))
           (alists (map ly:module->alist scopes))
           (prefixed-alist
            (map (lambda (alist)
                   (map (lambda (entry)
                          (cons
                           (string->symbol (string-append "header:"
                                             (symbol->string
                                              (car entry))))
                           (cdr entry)))
                     alist))
              alists))
           (props (append prefixed-alist
                    props
                    (layout-extract-page-properties layout))))
     (interpret-markup layout props markup)))

#(define-markup-list-command (paragraph layout props args) (markup-list?)
   #:properties ((x-shift 2))
   (interpret-markup-list layout props
     (make-justified-lines-markup-list (cons (make-hspace-markup x-shift) args))))

#(define (reorder-lists lists)
   ;; TODO better name and DOC
   "Example:
   (reorder-lists '((a) (b c) (d e f)))
   ->'(a b d "" c e "" "" f)"
   (let* ((max-length (apply max 0 (map length lists)))
          (equal-length-lists
           (map
            (lambda (l)
              (let ((length-diff (- max-length (length l))))
                (if (zero? length-diff)
                    l
                    (append l (make-list length-diff "")))))
            lists)))

     (define (new-lists lists rl)
       ;; TODO better name and DOC
       "Example
       (new-lists '((a b c) (d e f) (g h i)) '())
       ->
       '((a d g) (b e h) (c f i))"
       (if (every null? lists)
           (reverse rl)
           (new-lists
            (map cdr lists)
            (cons (map car lists) rl))))

     (apply append '() (new-lists equal-length-lists '()))))

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Liedverse Formatierung
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

#(define-markup-list-command (paragraph layout props args) (markup-list?)
   #:properties ((x-shift 2))
   (interpret-markup-list layout props
     (make-justified-lines-markup-list (cons (make-hspace-markup x-shift) args))))

#(define (numbering-start lst strt)
   "Returns a list of custom formated markups for numbers, relying on the length
of @var{lst}, starting with number 2"
   (if (eq? strt 0)
       (map
        (lambda (i)
          #{ \markup \concat \paragraph { " " } #})
        (iota (length lst)))
       (map
        (lambda (i)
          #{ \markup \concat \paragraph { \bold #(format #f "~2d. " i) } #})
        (iota (length lst) strt 1))))

#(define (equal-sized-splited-list lst n rl)
   "Split @var{lst} in equal sized parts of length @var{n}.
If @var{lst} is finally not empty add the remaining rest."
   (cond ((null? lst) (reverse rl))
     ((< (length lst) n) (reverse (cons lst rl)))
     (else
      (equal-sized-splited-list (drop lst n) n (cons (take lst n) rl)))))

columns-markup-list =
#(define-scheme-function (lines-per-verse ls)(index? markup-list?)
   "Returns a markup-list.  Each markup is done from a subset of @var{ls} under
control of @var{lines-per-verse}.  The markups are custom-formated using
@code{\\column-lines}, @code{\\column} and a hard-coded @code{baseline-skip} of
value 3"
   (let ((splitted-ls (equal-sized-splited-list ls lines-per-verse '())))
     (map
      (lambda (l)
        #{ \markup \override #'(baseline-skip . 3)
           %\override #`(font-name . ,myMin)
           \override \largerFont
           \column \column-lines $l #})
      splitted-ls) ))

formatAdditionalVerses =
#(define-scheme-function (center-overshoot number-start columns lst)
   ((boolean? #t) index? index? markup-list?)
   (let* ((numberings (numbering-start lst number-start))
          (new-list
           (map
            (lambda (x y)
              #{
                \markup
                \override #'(baseline-skip . 3)
                \line {
                  \paragraph {
                    \overlay {
                      \right-align \transparent "222"
                      \right-align \number $x
                    }
                  }
                  $y
                }
              #})
            numberings
            lst))
          (lst-lngth (length lst))
          (table-lst
           (if (and (odd? lst-lngth)
                    (= (remainder lst-lngth columns) 1)
                    center-overshoot)
               (drop-right new-list 1)
               new-list))
          (odd-tail
           (if (and (odd? lst-lngth)
                    (= (remainder lst-lngth columns) 1)
                    center-overshoot)
               (take-right new-list 1)
               #f))
          (columns-format-list (make-list columns LEFT))
          (args-list
           #{ \markuplist {
             \override #'(font-size . -1)
             \table #columns-format-list #table-lst
           } #})
          (args-list-rev
           (append
            args-list
            (if odd-tail
                #{
                  \markuplist \override #'(font-size . -1)
                  %% hier nix ändern, das sind die Nummerierungen!!
                  \column-lines { \fill-line { \line { #odd-tail } } }
                #}
                '()))))
     args-list-rev))

#(define-markup-list-command (paragraph layout props args) (markup-list?)
   #:properties ((x-shift 2))
   (interpret-markup-list layout props
     (make-justified-lines-markup-list (cons (make-hspace-markup x-shift) args))))

#(define (reorder-lists lists)
   ;; TODO better name and DOC
   "Example:
   (reorder-lists '((a) (b c) (d e f)))
   ->'(a b d "" c e "" "" f)"
   (let* ((max-length (apply max 0 (map length lists)))
          (equal-length-lists
           (map
            (lambda (l)
              (let ((length-diff (- max-length (length l))))
                (if (zero? length-diff)
                    l
                    (append l (make-list length-diff "")))))
            lists)))

     (define (new-lists lists rl)
       ;; TODO better name and DOC
       "Example
       (new-lists '((a b c) (d e f) (g h i)) '())
       ->
       '((a d g) (b e h) (c f i))"
       (if (every null? lists)
           (reverse rl)
           (new-lists
            (map cdr lists)
            (cons (map car lists) rl))))

     (apply append '() (new-lists equal-length-lists '()))))

#(define (numbering-start lst strt)
   "Returns a list of custom formated markups for numbers, relying on the length
of @var{lst}, starting with number 2"
   (if (eq? strt 0)
       (map
        (lambda (i)
          #{ \markup \concat \paragraph { " " } #})
        (iota (length lst)))
       (map
        (lambda (i)
          #{ \markup \concat \paragraph { \bold #(format #f "~2d. " i) } #})
        (iota (length lst) strt 1))))

formatTwoColumns =
#(define-scheme-function (trenner r-col r-start l-col l-start)
   ((string? " ") markup-list? index? markup-list? index?)
   #{
     \markuplist {
       %\override #`(font-name . ,myMin)
       \override \largerFont
       %\override #'(baseline-skip . 3)
       %\override #'(padding . 0)
       \table
       #'(1 -1 1 1 -1)
       #(reorder-lists
         (list
          ;; numbering is done for each list, because we can't warrant equal
          ;; length of each list
          (numbering-start r-col r-start)
          r-col
          (make-list (length r-col) trenner)
          (numbering-start l-col l-start)
          l-col))
     }
   #}
   )

chExceptionMusic = {
  <c es g heses>1-\markup \whiteout { "m" }  %% halbverminderter Septakkord
  <c es g b d'>1-\markup \whiteout { "m" } %% c:m9
  <c es ges b d'>1-\markup \whiteout { "m)" \hspace #-3.4 "(" } %% c:m9.5- eingeklammerter Akkord für einbuchstabige AKkordnamen
  %<c es g b>1-\markup { "7" }    %% c:m7
  < c es g b d' f' a' >1-\markup { "v" }  %% c:m13
  <c es g b d' f'>1-\markup { \fontsize #-0.5 "(7)" }  %% c:m11, die 7 in Klammer
}


chExceptions = #(append
                 (sequential-music-to-chord-exceptions chExceptionMusic #t)
                 ignatzekExceptions)

#(define ((chord-name->german-markup-text-alteration B-instead-of-Bb) pitch lowercase?)

   (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))

   (let* ((name (ly:pitch-notename pitch))
          (alt-semitones  (pitch-alteration-semitones pitch))
          (n-a (if (member (cons name alt-semitones) `((6 . -1) (6 . -1)))
                   (cons 7 (+ (if B-instead-of-Bb 1 1) alt-semitones))
                   (cons name alt-semitones))))
     (make-line-markup
      (list
       (make-simple-markup
        (conditional-string-downcase
         (vector-ref #("C" "D" "E" "F" "G" "A" "H" "B") (car n-a))
         lowercase?))
       (let ((alteration (/ (cdr n-a) 2)))
         (cond
          ((and (equal? lowercase? #f) (= alteration FLAT) (= (car n-a) 7)) (make-simple-markup ""))
          ((and (= alteration FLAT) (or (= (car n-a) 5) (= (car n-a) 2) )) (make-simple-markup "s"))
          ((= alteration FLAT) (make-simple-markup "es"))
          ((and (= alteration DOUBLE-FLAT) (or (= (car n-a) 5)(= (car n-a) 2) )) (make-simple-markup "ses"))
          ((= alteration DOUBLE-FLAT) (make-simple-markup "eses"))
          ((= alteration SHARP) (make-simple-markup "is"))
          ((= alteration DOUBLE-SHARP) (make-simple-markup "isis"))
          (else empty-markup)))))))

#(define germanChords (chord-name->german-markup-text-alteration #t))

FootLeft = #(string-append "www.lilypond.org" )
FootCenter = #(string-append "")
FootLeft = #(string-append "gesetzt mit LILYPOND http://www.lilypond.org " (lilypond-version) " am " (strftime "%d.%m.%Y %H:%M:%S" (localtime (current-time))))
Danke für eure Hilfe
viele Grüße
-- Manuela

Manuela

  • Hero Member
  • *****
  • Beiträge: 549
    • Manuelas Lilypond Wiki
Antw:Grunddatei Lied mit Noten, Text und Akkorden
« Antwort #6 am: Sonntag, 10. März 2019, 17:00 »
Hier noch zwei Liedbeispiele:

Ihr Kinderlein kommet
\version "2.19.80"
\language "deutsch"

#(define myTitel "Ihr Kinderlein, kommet")

firstvoice=
\relative c'' {
  \key c \major \time 2/4 \partial 8
  g8 g4 e8 g g4 e8 g f4 d8 f e4 r8 \bar ""
  g8 g4 e8 g g4 e8 g f4 d8 f e4 r8 \bar ""
  e d4 d8 d f4 f8 f e4 e8 e a4 r8 \bar ""
  a g4 g8 g8 c4 g8 e f4 d8 h c4.
  \bar "|."
}

%% Voice 2
secondvoice =
\relative c' {
  e8 e4 c8 e e4 c8 e h4 h8 h c4 r8
  e8 e4 c8 e e4 c8 e h4 h8 h c4 r8
  c h4 h8 h h4 h8 h c4 c8 c f4 r8
  f e4 e8 e8 e4 e8 c h4 h8 g c4.
}

%% Chords
songchords =
\chordmode {
  s8 c2 c g:7 c c c g:7 c g g:7
  c4 c:7 f2 c c g c4.
}

%% Song Lyrics
firstverse =
\lyricmode {
  \set stanza =  #"1."
  %&glqq; &grqq; bei -- nån -- der
  Ihr Kin -- der -- lein, kom -- met, o kom -- met doch all!
  Zur Krip -- pe her kom -- met in Beth -- le -- hems Stall
  und seht, was in die -- ser hoch -- hei -- li -- gen Nacht
  der Va -- ter im Him -- mel für Freu -- de uns macht!
}

verses =
\markuplist {
  "O seht in der Krippe, im nächtlichen Stall,"
  "seht hier bei des Lichtleins hellglänzendem Strahl,"
  "den lieblichen Knaben, das himmlische Kind,"
  "viel schöner und holder, als Engelein sind."

  "Da liegt es, das Kindlein, auf Heu und auf Stroh;"
  "Maria und Josef betrachten es froh;"
  "die redlichen Hirten knie’n betend davor,"
  "hoch oben schwebt jubelnd der Engelein Chor."

  "Manch Hirtenkind trägt wohl mit freudigem Sinn"
  "Milch, Butter und Honig nach Betlehem hin;"
  "ein Körblein voll Früchte, das purpurrot glänzt,"
  "ein schneeweißes Lämmchen mit Blumen bekränzt."

  "O betet: Du liebes, Du göttliches Kind"
  "was leidest Du alles für unsere Sünd’!"
  "Ach hier in der Krippe schon Armut und Not,"
  "am Kreuze dort gar noch den bitteren Tod."

  "O beugt wie die Hirten anbetend die Knie,"
  "erhebet die Hände und danket wie sie!"
  "Stimmt freudig, ihr Kinder, wer wollt sich nicht freu’n,"
  "stimmt freudig zum Jubel der Engel mit ein!"

  "Was geben wir Kinder, was schenken wir Dir,"
  "du Bestes und Liebstes der Kinder, dafür?"
  "Nichts willst Du von Schätzen und Freuden der Welt –"
  "ein Herz nur voll Unschuld allein Dir gefällt."

  "So nimm unsre Herzen zum Opfer denn hin;"
  "wir geben sie gerne mit fröhlichem Sinn –"
  "und mache sie heilig und selig wie Dein's,"
  "und mach sie auf ewig mit Deinem nur Eins."
}

Bass = \relative c {
  \key c \major
  \clef bass
  \autoBeamOn
  \set Voice.beatStructure = #'(2)
  r8
  \override Script.color = #grey
  c e g e c e g e
  d f g f
  e[ g e] r
  c e g e c e g e
  d f g f
  e[ d c] r
  h d f g f d g d
  e g e c f4 r
  g8 e c e g e c a
  f' d h g
  < c e g >4.
}
xBass = \relative c {
  \voiceTwo

}

verses =
\markuplist {
  "O seht in der Krippe, im nächtlichen Stall,"
  "seht hier bei des Lichtleins hellglänzendem Strahl,"
  "den lieblichen Knaben, das himmlische Kind,"
  "viel schöner und holder, als Engelein sind."

  "Da liegt es, das Kindlein, auf Heu und auf Stroh;"
  "Maria und Josef betrachten es froh;"
  "die redlichen Hirten knie’n betend davor,"
  "hoch oben schwebt jubelnd der Engelein Chor."

  "Manch Hirtenkind trägt wohl mit freudigem Sinn"
  "Milch, Butter und Honig nach Betlehem hin;"
  "ein Körblein voll Früchte, das purpurrot glänzt,"
  "ein schneeweißes Lämmchen mit Blumen bekränzt."

  "O betet: Du liebes, Du göttliches Kind"
  "was leidest Du alles für unsere Sünd’!"
  "Ach hier in der Krippe schon Armut und Not,"
  "am Kreuze dort gar noch den bitteren Tod."

  "O beugt wie die Hirten anbetend die Knie,"
  "erhebet die Hände und danket wie sie!"
  "Stimmt freudig, ihr Kinder, wer wollt sich nicht freu’n,"
  "stimmt freudig zum Jubel der Engel mit ein!"

  "Was geben wir Kinder, was schenken wir Dir,"
  "du Bestes und Liebstes der Kinder, dafür?"
  "Nichts willst Du von Schätzen und Freuden der Welt –"
  "ein Herz nur voll Unschuld allein Dir gefällt."

  "So nimm unsre Herzen zum Opfer denn hin;"
  "wir geben sie gerne mit fröhlichem Sinn –"
  "und mache sie heilig und selig wie Dein's,"
  "und mach sie auf ewig mit Deinem nur Eins."
}


\bookpart {
  \include "_index.ly"
  \paper {
    system-system-spacing.minimum-distance = #15
  }
  \header {
    title = \markup \concat
    {
      #myTitel
    }
    subtitle = ##f
    subsubtitle = ##f
    poet =  \markup {
      \override #'(baseline-skip . 1)
      \left-column {
        "Text: Johann Christoph Friedrich"
        "von Schmid (1768-1854)"
      }
    }
    composer = \markup {
      \override #'(baseline-skip . 1)
      \right-column {
        "Melodie: Johann Abraham Peter Schulz (März 1747-1800)"
        "Schlusstakt: Friedrich Hermann Eickhoff (1807–1886)"
      }
    }
    piece = ##f
    opus = ##f
  }
  \markuplist {
    \override #'(padding . 10)
    \override #'(x-shift . 7)
    \override #'(baseline-skip . 6)
    \formatAdditionalVerses
    %% additional verses starts with this numbering
    #2
    %% amount of columns
    #1
    \columns-markup-list #4 \verses
  }
}

\bookpart {
  \paper {
    system-system-spacing.minimum-distance = #15
  }
  \header {
    title = \markup \concat
    {
      #myTitel
    }
    subtitle = ##f
    subsubtitle = ##f
    poet =  \markup {
      \override #'(baseline-skip . 1)
      \left-column {
        " "
        " "
      }
    }
    composer = \markup {
      \override #'(baseline-skip . 1)
      \right-column {
        " "
        " "
      }
    }
    piece = ##f
    opus = ##f
  }

  \score
  {
    \new PianoStaff
    <<
      \new BarNumberStaff="melodie"
      <<
        \new FirstVoice="melody"
        {
          \override PianoStaff.VerticalAxisGroup.staff-staff-spacing.minimum-distance = #12
          \firstvoice
        }
        \new SecondVoice \secondvoice
      >>
      \new Lyrics \lyricsto "melody" \firstverse
      \new ChordNames \songchords
      \new Staff
      <<
        \new Voice \Bass
        \new Voice \xBass
      >>
    >>
    \layout {
      \context {
        \Score
        %\override NonMusicalPaperColumn.page-break-permission = ##f
        \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/40)
      }
    }
  }
}

Leise rieselt der Schnee:

\language "deutsch"

#(define myTitel "Leise rieselt der Schnee")

%% Voice 1
firstvoice=
\relative c'' {
  \key g \major  \time 6/8
  h4 h8 a h a g4.~ g4 r8
  g4 e8 g fis e d4.~ d4 r8
  a'8 gis a c h a g4.~ g4 r8
  a8. e16 e8 fis e fis g4.~ g4 r8
  \bar "|."
}

%% Voice 2
secondvoice =
\relative c'' {
  g4 g8 fis4 8
  h,4.~ 4 r8
  e4 c8 e d c h4.~ h4 r8
  fis'8 eis fis a g fis e4.~ e4 r8
  c8. 16 8 d c d h4.~ 4
}

%% Chords
songchords =
\chordmode {
  g4. d g2. c g a4.:m d e:m s
  c4. d4.
  g
}
Bass = \relative c {
  \key g \major
  \clef bass
  \autoBeamOn
  d8 g h a g a
  g fis e d c h
  c e g c, d e
  g fis e g gis a
  d, gis fis
  a h c h g e g fis e
  c e g d e fis
  g d h g,
}
Bass = \relative c {
  \key g \major
  \clef bass
  \autoBeamOn
  g8 d' g
  fis d fis
  \oneVoice
  g8 d h g a h
  c e g c, d e
  g d h g a h
  d gis fis
  a h c
  h g e g e h
  c e g d e d
  g d h g4 r8
}

%% Song Lyrics
firstverse =
\lyricmode {
  \set stanza = #"1."
  Lei -- se rie -- selt der Schnee,
  still und starr liegt der See,
  weih -- nacht -- lich glän -- zet der Wald:
}

secondverse =
\lyricmode {
  \set stanza = #"2."
  In den Her -- zen wird’s warm,
  still schweigt Kum -- mer und Harm,
  Sor -- ge des Le -- bens ver -- hallt:
  \override LyricText.font-shape = #'upright
  %\once \override LyricText.X-offset = #-3
  \markup {
    \translate #'(-1 . 0.8) \right-brace #40
  }
  \set stanza ="1-3:"
  Freu -- e Dich, Christ -- kind kommt bald.
}

thirdverse=
\lyricmode {
  \set stanza = #"3."
  Bald ist hei -- li -- ge Nacht,
  Chor der En -- gel er -- wacht.
  Hört’ nur, wie lieb -- lich es schallt:
}

\bookpart {
  \include "_index.ly"
  \paper {
    system-system-spacing.minimum-distance = #12
  }
  \header {
    title = \markup \concat
    {
      #myTitel
    }
    subtitle = ##f
    subsubtitle = ##f
    poet = "Text: Eduard Ebel (1839–1905), 1895"
    composer = \markup {
      \override #'(baseline-skip . 1)
      \right-column {
        "Melodie: Komponist unbekannt"
      }
    }
    piece = ##f
    opus = ##f
  }

  \score
  {
    \new PianoStaff
    <<
      <<
        \new BarNumberStaff="melodie"
        <<
          \new FirstVoice="melody"
          {
            \override PianoStaff.VerticalAxisGroup.staff-staff-spacing.minimum-distance = #12
            \firstvoice
          }
          \new SecondVoice \secondvoice
        >>
        \new Lyrics \lyricsto "melody" \thirdverse
        \new Lyrics \lyricsto "melody" \secondverse
        \new Lyrics \lyricsto "melody" \firstverse
        \new ChordNames \songchords
        \new Staff
        <<
          \new Voice \Bass
        >>
      >>
    >>
    \layout {
      \context {
        \Score
        \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/60)
      }
    }
  }
}

In der Datei "_index.ly" steht nicht viel, nur Information zur Erzeugung eines Inhaltsverzeichnisses:

\indexItem #myTitel #(string-append myTitel)
\tocItem \markup \concat { #myTitel }

Ggf. streichen oder den Inhalt auskommentieren

Hier noch die oben erwähnten Links. Wenn du das Prinzip der Kontexte erst mal verstanden und verinnerlicht hast, ist der Rest eigentlich nur noch Handwerk  ;)

Was sind Kontexte?
Systeme anzeigen lassen
Ein musikwissenschaftlicher Text als Beispiel
« Letzte Änderung: Montag, 11. März 2019, 05:32 von Manuela »
Danke für eure Hilfe
viele Grüße
-- Manuela

coach@iKhwaya

  • Newbie
  • *
  • Beiträge: 22
Antw:Grunddatei Lied mit Noten, Text und Akkorden
« Antwort #7 am: Freitag, 15. Mai 2020, 12:18 »
Das ist zwar "gefuddelt", geht aber auch...
und ist m. E. viel einfacher..

\markup { \column{
  \line{"                      "C"                                                   "F"           "C}
  \line{ 2. Dass man mich kaum vermisst, schon nach Tagen vergisst, }
  \line{ wenn ich längst wieder anderswo bin, stört und kümmert mich nicht,}
  \line{ vielleicht bleibt mein Gesicht doch dem ein' oder and'ren im Sinn. }
  \null
  \line{ 3. Fragt mich einer warum ich so bin, bleib ich stumm, }
  \line{ denn die Antwort darauf fällt mir schwer. Denn was neu ist wird alt }
  \line{ und was gestern noch galt, stimmt schon heut oder morgen nicht mehr. }
  }
}

du müsstest nur halt mit den Abständen "rumfummeln" weil die Schrift keine Monospace ist, denn dann brauchtest du nur Zeichen zählen. Aber ich denke, dass man dem markup bestimmt eine Monospace Schrift zuordnen kann. Eine schöne Monospace wäre zum Beispiel "Lucida Console (Mono)" .

Liebe Grüße Robert

coach@iKhwaya

  • Newbie
  • *
  • Beiträge: 22
Antw:Grunddatei Lied mit Noten, Text und Akkorden
« Antwort #8 am: Freitag, 15. Mai 2020, 14:03 »
\version "2.21.1"
 \paper {
top-margin = 10

}
\header {
title = \markup \column {"Heute hier, morgen dort"}
composer = \markup \column {\vspace #1 "Hannes Waader" \vspace #2 }
}

\markup { \column{
  \line \huge \bold {"                  "C"                                      "F"        "C}
  \line{ "2. Dass man mich kaum vermisst, schon nach Tagen vergisst," }
  \line \huge \bold {"            Am             D7       G              C" \vspace #1.5 }
  \line{ wenn ich längst wieder anderswo bin, stört und kümmert mich nicht,}
  \line \huge \bold {"               F              C                 Am      D7 G      C" \vspace # 1.5 }
  \line{ vielleicht bleibt mein Gesicht doch dem ein' oder and'ren im Sinn. }
  \null
  \null
  \line \huge \bold {"                  "C"                     "F"             "C}
  \line{ 3. Fragt mich einer warum ich so bin, bleib ich stumm, }
    \line \huge \bold {"            Am         D7                G                 C" \vspace #1.5 }
  \line{ denn die Antwort darauf fällt mir schwer. Denn was neu ist wird alt }
  \line \huge \bold {"             F              C                     Am       D7 G          C" \vspace # 1.5 }
  \line{ und was gestern noch galt, stimmt schon heut oder morgen nicht mehr. }
  }
}

Ausgefuchstes "Gefuddel"  8) , sollte auch in 2.18 laufen, vielleicht musst du nur oben die Versionszeile auskommentieren...
Sieht dann so aus...


Viel Spaß
Robert