Autor Thema: Piano-Songbook - aber wie? Unterschiedliche Header pro File?  (Gelesen 5668 mal)

alegria

  • Member
Piano-Songbook - aber wie? Unterschiedliche Header pro File?
« am: Mittwoch, 15. Februar 2012, 20:28 »
Hallo!
Also ich hab jetzt so paar einzelne Stückchen fertig mit lilypond gesetzt und würde die nun gern zusammenfassen - quasi ne Art "Songbook".
Im Netz werden verschiedene Ansätze diskutiert. Mit (La)TeX finde ich das zu umständlich bzw. nicht unbedingt dafür geeignet. Text als solchen wird es ausser im Inhaltsverzeichnis und maximal Disclaimer und so ja nicht geben. Die Variante mit externen PDF-Merge-Tool die zuvor erstellten Seiten zusammmen zu fassen finde ich nicht so schick. Sollte schon irgendwie aus einem Guss kommen. Schließlich bin ich durch Einzelbefehler wie \table-of-contents oder auch dem praktischen include schon mal so weit:
songbook.ly
\version "2.15.22"

\paper {
  first-page-number = 3
  print-first-page-number = ##t
}
\header {
    dedication = "Señora XYZ"
    title = \markup \center-column { "Mein großes" "Songbook aus" "Song 1 und 2" }
    subtitle = "Untertitel"
    subsubtitle = #(string-append "Unteruntertitel LilyPond-Version "
  (lilypond-version))
}
  \pageBreak
 
  \markuplist \table-of-contents
  \pageBreak
 
  \tocItem \markup { Song Number 1 }
  \include "song_01.ly"
  \pageBreak

  \tocItem \markup { Song Number 2}
  \include "song_02.ly"
  \pageBreak
   
  \markup { "Bye Bye..."}

song_01ly (analog song_2)
\version "2.15.22"

% \header {
%     title = "Song 1"
%     subtitle = "song 1 sub"
% }

global = {
  \key c \major
  \time 4/4
}

upper = \relative c'' {
  \clef treble
  a4 b c d
\pageBreak 
  a4 b c d

}

lower = \relative c {
  \clef bass
  a2 c
 
  c2 a
}

dynamics = {
  s2\fff\> s4 s\!\pp

  s2\pp\> s4 s\!\fff
}

pedal = {
  s2\sustainOn s\sustainOff
}

\score {
  \new PianoStaff = "PianoStaff_pf" <<
    \new Staff = "Staff_pfUpper" << \global \upper >>
    \new Dynamics = "Dynamics_pf" \dynamics
    \new Staff = "Staff_pfLower" << \global \lower >>
    \new Dynamics = "pedal" \pedal
  >>
  \layout { }
}

\score {
  \new PianoStaff = "PianoStaff_pf" <<
    \new Staff = "Staff_pfUpper" << \global \upper \dynamics \pedal >>
    \new Staff = "Staff_pfLower" << \global \lower \dynamics \pedal >>
  >>
  \midi { }
}

Das klappt auch alles so halbwegs ganz gut (z.B. die fortlaufende Seitennummerierung), aber ich kann nur einen header vergeben. Wenn z.B. innerhalb von song_02.ly ein header definiert ist, wird dieser auf die seite 1 platziert. Kann man sowas nicht irgendwie umgehen? Also ich möchte schon pro song meinen header mit title, subtitle, metrumangabe etc.pp.

Jemand ne Idee? Bin ich von der Herangehensweise soweit überhaupt auf den richtigen Weg? Hat jemand vielleicht sogar ne Vorlage?

ding-dong

  • Member
Re: Piano-Songbook - aber wie? Unterschiedliche Header pro File?
« Antwort #1 am: Mittwoch, 15. Februar 2012, 21:00 »
hast du \book oder  \bookpart ausprobiert?

alegria

  • Member
Re: Piano-Songbook - aber wie? Unterschiedliche Header pro File?
« Antwort #2 am: Mittwoch, 15. Februar 2012, 21:20 »
Ja... Aber da ist das Problem, das ich (warum?) keine Piano-Partitur einbinden kann. Der Code von song_01.ly steht oben, das book beispiel hab ich von hier: http://lilypond.org/doc/v2.12/input/lsr/lilypond-snippets/Paper-and-layout

Ein include an letzter Stelle gibt Kompilierungsfehler:
\version "2.15.22"


% #(set-default-paper-size "a6")

\book {

  %% book paper, which is inherited by all children bookparts
  \paper {
    ragged-last-bottom = ##t
    %% Page footer: add a different part-tagline at part last page
    oddFooterMarkup = \markup {
      \column {
        \fill-line {
          %% Copyright header field only on book first page.
          \on-the-fly #first-page \fromproperty #'header:copyright
        }
        \fill-line {
          %% Part tagline header field only on each part last page.
          \on-the-fly #part-last-page \fromproperty #'header:parttagline
        }
        \fill-line {
          %% Tagline header field only on book last page.
          \on-the-fly #last-page \fromproperty #'header:tagline
        }
      }
    }
  }

  %% book header, which is inherited by the first bookpart
  \header {
    title = "Book title"
    copyright = "Copyright line on book first page"
    parttagline = "Part tagline"
    tagline = "Book tagline"
  }
 
  \bookpart {
    %% a different page breaking function may be used on each part
    \paper {
%       #(define page-breaking optimal-page-breaks)
    }
    \header { subtitle = "First part" }
    \markup { The first book part }
    \markup { a page break }
    \pageBreak
       \markup { first part last page }
    \markup \wordwrap { with ragged-last-bottom (see the space below this text) }
  }

  \bookpart {
    \header { subtitle = "Second part" }
    { c' }
  }
 
  \bookpart {
   
    % HIER INCLUDE
     \include "song_01.ly"
 

  }

}

???

ding-dong

  • Member
Re: Piano-Songbook - aber wie? Unterschiedliche Header pro File?
« Antwort #3 am: Mittwoch, 15. Februar 2012, 21:50 »
ja, natürlich - du musst alle zuweisungen, die im song01.ly stehen, schon vorher machen!

also:

lower=…
upper=…
global=…

darf nicht im \book oder \bookpart stehen!!! dort steht dann nur noch \score { \new PianoStaff << \upper \lower>> }
wenn du mehrere songs hast wirst du wahrscheinlich die namen weiter differenzieren müssen, zb.

lowerSongA=…
upperSongA=…
globalSongA=…

versuchs mal + feedbacke obs geht!

alegria

  • Member
Re: Piano-Songbook - aber wie? Unterschiedliche Header pro File?
« Antwort #4 am: Mittwoch, 15. Februar 2012, 22:12 »
:(

Leider nein! So klappt es nicht!

Ausserdem wäre das m.E. auch nicht der perfekte Weg, da ich ja final eine RIESEN songbook.ly Datei mit allen Informtaionen hätte. Ziel sollte es aber ja sein, durch Verteilung und "Kapselung" die Songs auch einzeln zu kompilieren und eben mittels include einfach einzubinden...

Den \header darf es auf alle Fäller immer nur einmal geben? No way das irgendwie zu umgehen???

ding-dong

  • Member
Re: Piano-Songbook - aber wie? Unterschiedliche Header pro File?
« Antwort #5 am: Mittwoch, 15. Februar 2012, 23:01 »
wetten doch!?

in deinem songbook.ly schreibst du 100 x

\include "songA.ly" darin stehen die definitionen wie in meiner letzten antwort beschrieben oder schon alles so aufbereitet dass sie auf dem staff-, pianostaff- oder grandstaff-level fertig sind.

z.b. songAPianoStaff= ...


danach kommt dein \book mit bis zu 100 einträgen (du willst das ja in diesem ausmass).

diese sehen alle praktisch gleich aus:


\book {
  \score {
    \songAPianoStaff
    \include "headerSongA.ly"
  }
  \score {
    \songBPianoStaff
    \include "headerSongB.ly"
  }
}

leider passen header daten nicht so einfach in variable, so dass man sie am besten includiert.

bin gespannnt!

alegria

  • Member
Re: Piano-Songbook - aber wie? Unterschiedliche Header pro File?
« Antwort #6 am: Mittwoch, 15. Februar 2012, 23:31 »
Ja, ich geb Dir Recht - so könnte es klappen!  :)

Ich versuche morgen mal mit entsprechender Ordnerstruktur das ganze in ein gutes "Template" zu verwandeln und poste dann mal das Ergebnis. Aber sollte wohl funktionieren...

DANKE schonmal vorab...

alegria

  • Member
Re: Piano-Songbook - aber wie? Unterschiedliche Header pro File?
« Antwort #7 am: Donnerstag, 16. Februar 2012, 23:08 »
So! Hier nun wie angekündigt das "Template" bzw. ein "Tutorial" zur Erstellung eines Songbooks mittels lilypond...

1. Ordner erstellen wo der ganze Spass drin liegen wird...
2. In diesem Ordner Bash-Skript erstellen [hier: skeleton] mit folgendem Inhalt:
#!/bin/sh
if [ "$1" = "" ]; then
echo "Buchstabe: "
read p
else
p=$1
fi

p="$(echo ${p} | tr 'A-Z' 'a-z')"
mkdir $p
echo "=> "$p"\ created..."

# header.ly
echo "\header {
  title = \"Song Numero "$p"\"
  subtitle = \"- nice song -\"
  dedication = ##f
}" > $p/header.ly
echo "=> "$p"\header.ly created..."

# score.ly
echo "
rh"$p" = \\\relative c'' {
  \key c \major
  \\\time 4/4

  \\\clef treble
  d4 c b c
  c4 b a g
}

lh"$p" = \\\relative c {
  \\\clef bass
  c2 a
  b2 g
}

dyn"$p" = {
  s2\pp\> s2
  s2. s4\!\\\fff
}

ped"$p" = {
  s2.\sustainOn s4\sustainOff
  s2.\sustainOn s4\sustainOff
}

song"$p"= \\\new PianoStaff <<
    \\\new Staff \\\rh"$p"
    \\\new Dynamics \dyn"$p"
    \\\new Staff \lh"$p"
    \\\new Dynamics \ped"$p"
  >>

toc"$p" = \"Band "$p" - Super Titel (1994)\"
" > $p/score.ly
echo "=> "$p"\score.ly created..."

# build.ly
echo "\\\version \"2.15.22\"

\include \"header.ly\"
\include \"score.ly\"

\score {
  \song"$p"
  \layout {}
  \midi {}
}" > $p/build.ly
echo "=> "$p"\\\build.ly created..."

exit 0
3. Ausführungsrechte vergeben, also "chmod 755 skeleton"
4. Bash-Skript ausführen für zwei Testsongs, a und b. Am besten mittels "./skeleton a" und "./skeleton b"
{innerhalb des ordners a kann man nun mittels "lilypond build.ly" sich den song a separat erstellen lassen...}
5. Die "songbook.ly" mit folgendem Inhalt anlegen:
\version "2.15.22"
\paper{
  print-all-headers=##t
  #(set-paper-size "a4")
}
%%%%%%%%%%%%%%%%%%%%%%%
% SCORES FROM SONG 1-n
%%%%%%%%%%%%%%%%%%%%%%%
\include "a/score.ly"
\include "b/score.ly"

%%%%%%%%%%%
% SONGBOOK
%%%%%%%%%%%
\bookpart{   
  \header {
    dedication="Den tollen Programmierern von lilypond!"
    title="SuperSongBook"
    subtitle="Alles von A wie ... bis Z wie..."   
  }
  \pageBreak
 
  \markuplist \table-of-contents
  \pageBreak
 
  \tocItem \markup { \toca }
  \score {
    \songa
    \include "a/header.ly"
  }\pageBreak
 
  \tocItem \markup { \tocb }
  \score {
    \songb
    \include "b/header.ly"
  }\pageBreak
}
6. Songbook erstellen, etwas mittels "lilypond songbook.ly"
7. Fertig! :)

Vielen Dank für die Tipps! Erweiterungswünsche und Verbesserungsvorschläge jederzeit gern willkommen!

P.S. Einzige Frage für mich die bleibt: Warum ist bei Song A die Notation mittig und bei Song B oben ausgerichtet am Titel???
« Letzte Änderung: Donnerstag, 16. Februar 2012, 23:11 von alegria »

ding-dong

  • Member
Re: Piano-Songbook - aber wie? Unterschiedliche Header pro File?
« Antwort #8 am: Donnerstag, 16. Februar 2012, 23:49 »
gratuliere!

schade dass es mir unter windows nichts bringt - was wäre eine vernünftige, portable sprache für so was?

Zitat
P.S. Einzige Frage für mich die bleibt: Warum ist bei Song A die Notation mittig und bei Song B oben ausgerichtet am Titel???
hat vielleicht mit ragged-bottom und ragged-last-bottom zu tun!?

 :) ding-dong

alegria

  • Member
Re: Piano-Songbook - aber wie? Unterschiedliche Header pro File?
« Antwort #9 am: Samstag, 18. Februar 2012, 14:18 »
Nun gut. Sprachen kämen da viele in Frage... Ich poste hier mal den Anfang von einem batch Skript (einfach Textdatei erstellen, Code rein und abspeichern als cmd bzw. die Dateiendung von txt auf cmd ändern...).
Das läuft auf jedem Windows und man muss nichts spezielles installiert haben.
@echo off
cls

set /p p=(Klein-)Buchstabe:
mkdir %p%
echo =^> %p% created...

REM header.ly
cd %p%
echo.\header { > header.ly
echo.   title = "Song Numero %p%" >> header.ly
echo.   subtitle = "- nice song -" >>  header.ly
echo.   dedication = ##f >>  header.ly
echo.} >>  header.ly
echo.=^> %p%\header.ly created...

cd..
« Letzte Änderung: Samstag, 18. Februar 2012, 14:19 von alegria »

fairsein

  • Member
Re: Piano-Songbook - aber wie? Unterschiedliche Header pro File?
« Antwort #10 am: Mittwoch, 14. März 2012, 17:58 »
Hallo an alle,

Ich habe mal eine Fragen. Was macht das Skript mit den Songs. Ich habe es ohne dieses Skript ausprobiert und dann fehlt das Inhaltsverzeichnis. Ich habe in meinen Songs auch keine Variablen. Des halb weiß ich auch nicht, ob ich das Skript brauche.

\tocItem \markup { \toca }
  \score {
    \songa
    \include "songa.ly"
  }\pageBreak

Noch eine Frage: Was machen die Befehle vor dem  \include "songa.ly" denn?

Außerdem werden, wenn ich die Songs auch oben via \include die Dateien einbinde, 5 Seiten erzeugt, ohne dass die Einen Sinn machen. Hier der entsprechende Code:

%%%%%%%%%%%%%%%%%%%%%%%
% SCORES FROM SONG 1-n
%%%%%%%%%%%%%%%%%%%%%%%
\include "a/score.ly"
\include "b/score.ly"

Gruß fairsein
« Letzte Änderung: Mittwoch, 14. März 2012, 18:04 von fairsein »