Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: pschuett am Sonntag, 27. Dezember 2020, 17:18

Titel: Liedtext mit Akkorden aus normaler Lilypond-Datei extrahieren
Beitrag von: pschuett am Sonntag, 27. Dezember 2020, 17:18
Hallo,
gibt es eine Möglichkeit aus einer Partitur, wie im unten angegebenen Minimalbeispiel, automatisch ein Liedblatt zu extrahieren, dass nur den Text und die Akkorde enthält (ohne Noten)?

Danke für alle Hinweise und Tips.

Ciao
  Peter Schütt




\version "2.18.2"


global = {
  \time 4/4
  \key d \major   
  \tempo 4=120 
}

harmoniesRefrain = \chordmode { 
d1 a1 d1 g1 fis1 d1
}


melodyRefrain = \relative c' {
\global 
   fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8
   fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8
   fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8
   
}

refrain = \lyricmode {
  \set stanza = "Ref:"
  ,,Kann- 'se 'mal e- ben,  % blau
  wenn du 'mal drauf- schau- en könnst % blau
  du  kennst dich doch aus mit dem Com- pu- ter- ge- döns. % blau
  Und am En- de tönt es noch ganz jäm- mer- lich:  % schwarz
  ,,Und mein Druk- ker, der druckt nich'" % blau
}


\score {
    <<
    \new ChordNames {
      \set chordChanges = ##t
      \germanChords
      \harmoniesRefrain
    }
     
       \new GrandStaff
      <<
       \new Staff {
         <<
       \new Voice = "RefrainUp" { \autoBeamOff  \melodyRefrain }               
     \new Lyrics \lyricsto "RefrainUp" \refrain
         >>
       }
      >>     
    >>   
}
Titel: Antw:Liedtext mit Akkorden aus normaler Lilypond-Datei extrahieren
Beitrag von: harm6 am Sonntag, 27. Dezember 2020, 18:39
Vielleicht:


global = {
  \time 4/4
  \key d \major   
  \tempo 4=120
}

harmoniesRefrain = \chordmode {
d1 a1 d1 g1 fis1 d1
}


melodyRefrain = \relative c' {
\global
   fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8
   fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8
   fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8 fis8
   
}

refrain = \lyricmode {
  \set stanza = "Ref:"
  ,,Kann- 'se 'mal e- ben,  % blau
  wenn du 'mal drauf- schau- en könnst \tag #'text { \bar "" \break } % blau
  du  kennst dich doch aus mit dem Com- pu- ter- ge- döns. \tag #'text { \bar "" \break } % blau
  Und am En- de tönt es noch ganz jäm- mer- lich:  \tag #'text { \bar "" \break }  % schwarz
  ,,Und mein Druk- ker, der druckt nich'" % blau
}


\score {
    <<
    \new ChordNames {
      \set chordChanges = ##t
      \germanChords
      \harmoniesRefrain
    }
     
       \new GrandStaff
       
      <<
       \new Staff {
         <<
       \new Voice = "RefrainUp" { \autoBeamOff  \melodyRefrain }               
     \new Lyrics \lyricsto "RefrainUp" { \removeWithTag #'text \refrain }
         >>
       }
      >>     
    >>   
}

\markup
\override #'(baseline-skip . 1)
\score {
    <<
      \new ChordNames
      \with {
      \override VerticalAxisGroup.staff-affinity = ##f
        \override VerticalAxisGroup.staff-staff-spacing =
        #'((basic-distance . 0)
           (minimum-distance . 0)
           (padding . 0)
           (stretchability . 0))
      }
      {
        \set chordChanges = ##t
        \germanChords
        \harmoniesRefrain
      }
     
      \new NullVoice = "RefrainUp" { \autoBeamOff  \melodyRefrain }       
     
      \new Lyrics
        \with {
        %\override VerticalAxisGroup.staff-affinity = 1
        \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
        #'((basic-distance . 0)
           (minimum-distance . 0)
           (padding . 1)
           (stretchability . 0))
          }
      \lyricsto "RefrainUp" { \keepWithTag #'text \refrain } 
    >>
    \layout {
      ragged-right = ##t
      indent = 0
      \context {
      \Score
      \override RehearsalMark.before-line-breaking = #ly:grob-suicide!
      \override MetronomeMark.before-line-breaking = #ly:grob-suicide!
      \omit BarNumber
      \remove "Forbid_line_break_engraver"
      }
      \context {
      \Staff
      \override KeySignature.before-line-breaking = #ly:grob-suicide!
      \override Clef.before-line-breaking = #ly:grob-suicide!
      \override TimeSignature.before-line-breaking = #ly:grob-suicide!
      \override BarLine.before-line-breaking = #ly:grob-suicide!
      \override StaffSymbol.before-line-breaking = #ly:grob-suicide!
      }
      \context {
      \Lyrics
      \override StanzaNumber.before-line-breaking = #ly:grob-suicide!
      }
      \context {
      \Voice
      \remove "Forbid_line_break_engraver"
      }
    }
}


Aber wirklich überzeugend ist es nicht...

Gruß,
  Harm
Titel: Antw:Liedtext mit Akkorden aus normaler Lilypond-Datei extrahieren
Beitrag von: Manuela am Montag, 28. Dezember 2020, 06:36
Hmmm, willst du so was ähnliches wie in diesem Thread erreichen?
Text und Akkorde (ohne Noten) (https://lilypondforum.de/index.php/topic,445.msg2722.html)

Harm, interessehalber: wieso verwendest du .before-line-breaking = #ly:grob-suicide! anstatt \omit? Hat das andere Auswirkungen?
Titel: Antw:Liedtext mit Akkorden aus normaler Lilypond-Datei extrahieren
Beitrag von: harm6 am Montag, 28. Dezember 2020, 10:50
Zitat von: Manuelawieso verwendest du .before-line-breaking = #ly:grob-suicide! anstatt \omit? Hat das andere Auswirkungen?

Um ein bestimmtes grob aus dem Druck zu entfernen, gibt es verschiedene Möglichkeiten. Hier eine Liste in abnehmender "Brutalität":
(1) den engraver entfernen.
Dadurch wird das grob weder geschaffen, noch irgendwelche Eigenschaften des grobs gesetzt.
Manchmal setzen engraver aber auch context-properties, die man haben möchte oder auch nicht.
(2) ly:grob-suicide!
Dadurch wird das grob gekillt. Nicht nur der stencil, sondern auch alle Eigenschaften des grobs.
Da der engraver aber noch da ist, werden potentielle context-properties nicht angetastet, afaik
(3) \omit (= Grob.stencil = ##f)
Dadurch wird nur der stencil eines grobs eliminiert. Alle anderen grob- und context-properties bleiben erhalten.
(4) point-stencil (i.e. \override Grob.stencil = #point-stencil )
Der stencil bekommt null Ausdehnung, ist also effektiv unsichtbar. Das grob wird aber den spacing-Routinen unterworfen. Alle anderen grob- und context-properties bleiben erhalten.
empty-stencil ist noch brutaler, führt aber haufig zu Warnungen
(5) \hide (= Grob.transparent = ##t )
Das grob wird unsichtbar, aber verbraucht weiterhin Platz. Alle anderen grob- und context-properties bleiben erhalten.

In der Regel ist es am sinnvollsten die am wenigsten invasive Maßnahme zu ergreifen.
Ob es hier auch mit \omit funktioniert hätte, habe ich ehrlich gesagt nicht geprüft. Vielleicht wäre auch (1) am einfachsten.

Beim hier vorliegenden Problem haben wir einen vollständigen Score der nachbearbeitet werden soll. Idealerweise ohne etwas in den bereits bestehenden Variablen zu verändern. Das ist mir aber zunächst nicht gelungen, ich habe ja tagged breaks für einen besseren Zeilenumbruch in der nur-Text-Variante in die refrain-Variable eingefügt.
Vielleicht könnte man ja dort einen neuen Lyrics-context nur mit \skip und \break einfügen und somit die refrain-Variable unangetastet lassen...


Gruß,
  Harm


Titel: Antw:Liedtext mit Akkorden aus normaler Lilypond-Datei extrahieren
Beitrag von: Manuela am Montag, 28. Dezember 2020, 14:49
Danke für die ausführliche Erklärung, Harm!

Um eine Anpassung der Abstände wird man wohl nicht herumkommen, wenn man die Noten aus dem Score entfernt.