Liedtext mit Akkorden aus normaler Lilypond-Datei extrahieren

Begonnen von pschuett, Sonntag, 27. Dezember 2020, 17:18

« vorheriges - nächstes »

pschuett

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
         >>
       }
      >>     
    >>   
}

harm6

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

Manuela

#2
Hmmm, willst du so was ähnliches wie in diesem Thread erreichen?
Text und Akkorde (ohne Noten)

Harm, interessehalber: wieso verwendest du .before-line-breaking = #ly:grob-suicide! anstatt \omit? Hat das andere Auswirkungen?
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

#3
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



Manuela

#4
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.
Danke für eure Hilfe
viele Grüße
-- Manuela