commit 27a39f5d66eec4be39d8a8b6fc184495aa8ba456 Author: Sebastian Hugentobler Date: Wed Nov 14 10:31:44 2012 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0f61e1c --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.pdf +*.*~ +out/* +pdf/* diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..03693af --- /dev/null +++ b/COPYING @@ -0,0 +1,117 @@ + +Namensnennung – Weitergabe unter gleichen Bedingungen (by-sa) 3.0 Schweiz + + CREATIVE COMMONS CORPORATION IST KEINE ANWALTSKANZLEI UND BIETET KEINE RECHTLICHEN AUSKÜNFTE BZW. DIENSTLEISTUNGEN AN. DIE VERBREITUNG DIESER LIZENZ FÜHRT NICHT ZU EINEM MANDATSVERHÄLTNIS DES EMPFÄNGERS MIT CREATIVE COMMONS. CREATIVE COMMONS ÜBERNIMMT KEINE GEWÄHR FÜR DIE ZUR VERFÜGUNG GESTELLTEN INFORMATIONEN UND LEHNT JEGLICHE HAFTUNG FÜR SCHÄDEN AB, DIE AUS DEM GEBRAUCH DIESER INFORMATIONEN ERWACHSEN. DIESER AUSSCHLUSS VON GEWÄHRLEISTUNG UND HAFTUNG ERSTRECKT SICH AUCH AUF DIE PERSONEN, DIE AN DER ADAPTIERUNG DES VORLIEGENDEN LIZENZTEXTS ANS SCHWEIZERISCHE RECHT MITGEWIRKT HABEN. + +Lizenz + +Durch die Ausübung eines durch diese Lizenz gewährten Rechts an dem Lizenzgegenstand erklären Sie sich mit den Lizenzbedingungen rechtsverbindlich einverstanden. Soweit diese Lizenz als Vertrag anzusehen ist, gewährt Ihnen der Lizenzgeber die in der Lizenz genannten Rechte unentgeltlich und im Austausch dafür, dass Sie das Gebundensein an die Lizenzbedingungen akzeptieren. + +Der „Lizenzgeber“, d.h. die Person, welche den Lizenzgegenstand unter dieser Lizenz zur Verfügung stellt, + +und + +„Sie“, d.h. die natürliche oder juristische Person, welche die in dieser Lizenz im Abschnitt 3 genannten Nutzungen des Lizenzgegenstandes vornimmt und zuvor im Hinblick auf den Lizenzgegenstand nicht gegen die Bedingungen dieser Lizenz verstossen oder aber die ausdrückliche Erlaubnis des Lizenzgebers erhalten hat, die durch diese Lizenz gewährten Nutzungsrechte trotz eines vorherigen Verstosses auszuüben, + +vereinbaren mit dieser Creative Commons Public License („CCPL“ oder „Lizenz“) die Nutzungsbedingungen für den Lizenzgegenstand, + +im Einzelnen: + +1. Definitionen + + „Lizenzgegenstand“ kann ein urheberrechtlich geschütztes Werk sein oder eine durch verwandte Schutzrechte geschützte Leistung. + Eine „Sammlung“ im Sinne dieser Lizenz ist eine Zusammenstellung des Lizenzgegenstands mit anderen Werken oder sonstigen Elementen, unabhängig davon, ob an der Sammlung selbst aufgrund der Anordnung oder der Auswahl des Inhalts ein Urheberrecht entsteht. Als Sammlung gelten auch Datenbanken, unabhängig davon, ob an der Datenbank selbst aufgrund der Anordnung oder der Auswahl des Inhalts ein Urheberrecht entsteht. Die Aufnahme des Lizenzgegenstandes in eine Sammlung gilt nicht als Abwandlung des Lizenzgegenstandes. + Eine „Abwandlung“ im Sinne dieser Lizenz ist jede Veränderung des Lizenzgegenstandes, insbesondere eine Umgestaltung, Bearbeitung, Änderung, Anpassung oder Übersetzung, solange der Lizenzgegenstand in seinem individuellen Charakter erkennbar bleibt. Nicht als Abwandlung des Lizenzgegenstandes gilt seine Aufnahme in eine Sammlung. + „Rechteinhaber“ ist der Urheber des Lizenzgegenstandes, der Inhaber verwandter Schutzrechte oder jede andere Person, die am Lizenzgegenstand Nutzungsrechte erlangt hat, welche die Einräumung von Nutzungsrechten oder die Weiterübertragung der Nutzungsrechte an Dritte erlauben. + Ein „Werk“ ist eine geistige Schöpfung mit individuellem Charakter. + Ein „verwandtes Schutzrecht“ ist ein Recht an einer kulturellen Leistung, welche nicht als Werk geschützt ist, wie etwa jene von ausübenden Künstlern, Herstellern von Ton- und Tonbildträgern oder Sendeunternehmen. + „Öffentlich Wiedergeben“ ist das Vortragen des Lizenzgegenstandes direkt oder mit irgendwelchen Mitteln, das Aufführen, das Vorführen, das anderswo Wahrnehmbarmachen oder das Zugänglichmachen in der Weise, dass Personen von Orten und zu Zeiten ihrer Wahl dazu Zugang haben. + „Vervielfältigen“ bedeutet, mittels beliebiger Verfahren vorübergehende oder dauerhafte Vervielfältigungsstücke des Lizenzgegenstandes herzustellen und umfasst auch den Vorgang der erstmaligen körperlichen Fixierungen des Lizenzgegenstandes und der Herstellung von Vervielfältigungen dieser Fixierungen sowie die Übertragung des Lizenzgegenstandes auf einen Bild- oder Tonträger oder auf ein anderes elektronisches Medium, gleich ob in digitaler oder analoger Form. + „Verbreiten“ bedeutet, den Lizenzgegenstand oder Abwandlungen im Original oder in Form von Vervielfältigungsstücken, mithin in körperlich fixierter Form der Öffentlichkeit zugänglich zu machen oder in Verkehr zu bringen. + „Lizenzelemente“ sind die folgenden, vom Lizenzgeber ausgewählten und im Titel dieser Lizenz genannten Lizenzcharakteristika: + „Namensnennung“, „Weitergabe unter gleichen Bedingungen“. + „Mit Creative Commons kompatible Lizenz“ bezeichnet eine Lizenz, die unter http://creativecommons.org/compatiblelicenses aufgelistet ist und die durch Creative Commons als grundsätzlich zur vorliegenden Lizenz äquivalent akzeptiert wurde, da zumindest folgende Voraussetzungen erfüllt sind: + + Diese mit Creative Commons kompatible Lizenz + enthält Bestimmungen, welche die gleichen Ziele verfolgen, die gleiche Bedeutung haben und die gleichen Wirkungen erzeugen wie die Lizenzelemente der vorliegenden Lizenz, und + erlaubt ausdrücklich das Lizenzieren von ihr unterstellten Abwandlungen unter vorliegender Lizenz, unter einer anderen rechtsordnungsspezifisch angepassten Creative-Commons-Lizenz mit denselben Lizenzelementen, wie sie die vorliegende Lizenz aufweist, oder unter der entsprechenden Creative-Commons-Unported-Lizenz. + +2. Schranken des Urheberrechts + +Dieser Lizenzvertrag lässt sämtliche Befugnisse unberührt, die sich aufgrund der Beschränkungen der ausschliesslichen Rechte des Rechteinhabers durch das Urheberrechtsgesetz (Eigengebrauch, Erschöpfungsgrundsatz etc.) oder durch andere Bestimmungen der anwendbaren Gesetzgebung ergeben. + +3. Lizenzierung + +Unter den Bestimmungen dieser Lizenz räumt Ihnen der Lizenzgeber die Befugnis ein, den Lizenzgegenstand weltweit, lizenzgebührenfrei, nicht exklusiv und zeitlich unbeschränkt (d.h. für die Schutzdauer des Werks oder des verwandten Schutzrechts) wie folgt zu nutzen: + + den Lizenzgegenstand zu vervielfältigen, ihn in eine oder mehrere Sammlungen aufzunehmen und ihn im Rahmen der Sammlung zu vervielfältigen; + den Lizenzgegenstand abzuwandeln, d.h. ihn zu bearbeiten oder in anderer Weise umzugestalten, einschliesslich Übersetzungen unter Nutzung jeglicher Art von Medien anzufertigen, sofern deutlich erkennbar gemacht wird, dass es sich um eine Abwandlung handelt; + den Lizenzgegenstand oder Vervielfältigungen davon zu verbreiten, öffentlich wiederzugeben, durch Radio, Fernsehen oder ähnliche Einrichtungen, auch über Leitungen, zu senden, weiterzusenden oder sonstwie wahrnehmbar zu machen, wobei sich diese Befugnisse auch auf den in eine Sammlung aufgenommenen Lizenzgegenstand erstrecken; + den abgewandelten, d.h. bearbeiteten oder umgestalteten Lizenzgegenstand zu vervielfältigen, verbreiten, öffentlich wiederzugeben, durch Radio, Fernsehen oder ähnliche Einrichtungen, auch über Leitungen, zu senden, weiterzusenden oder sonstwie wahrnehmbar zu machen. + bezüglich Vergütung für die Nutzung des Lizenzgegenstandes gilt Folgendes: + Unverzichtbare gesetzliche Vergütungsansprüche: Soweit unverzichtbare Vergütungsansprüche als Gegenleistung für gesetzliche Lizenzen vorgesehen oder Pauschalabgabensysteme (zum Beispiel für Leermedien) vorhanden sind, behält sich der Lizenzgeber das ausschliessliche Recht vor, die entsprechende Vergütung einzuziehen für jede Ausübung eines Rechts aus dieser Lizenz durch Sie. + Vergütung bei Zwangslizenzen: Sofern Zwangslizenzen ausserhalb dieser Lizenz vorgesehen sind und zustande kommen, verzichtet der Lizenzgeber für alle Fälle einer lizenzgerechten Nutzung des Schutzgegenstandes durch Sie auf jegliche Vergütung. + Vergütung in sonstigen Fällen: Bezüglich lizenzgerechter Nutzung des Schutzgegenstandes durch Sie, die nicht unter die beiden vorherigen Abschnitte (i) und (ii) fällt, verzichtet der Lizenzgeber auf jegliche Vergütung, unabhängig davon, ob eine Einziehung der Vergütung durch ihn selbst oder nur durch eine Verwertungsgesellschaft möglich wäre. + +Die vorstehend genannten Befugnisse können für alle Nutzungsarten sowie in jedem Medium und Format ausgeübt werden, ob diese bereits bekannt sind oder erst in Zukunft entwickelt werden. Diese Befugnisse umfassen auch das Recht zu Änderungen, die technisch notwendig sind, um die Befugnisse in anderen Medien und Formaten auszuüben. + +4. Bedingungen + +Die in Ziffer 3 eingeräumten Befugnisse unterliegen den folgenden Bedingungen: + + Bei jeder Ausübung eines Rechts aus dieser Lizenz müssen Sie eine Kopie dieser Lizenz mitgeben. Sie können hiervon absehen, wenn Sie an Stelle dieser Lizenz die jedermann zugängliche Fundstelle dieser Lizenz bekannt geben (Uniform Resource Identifier, URI). Sie müssen bei der Ausübung eines Rechts aus dieser Lizenz alle Hinweise auf diese Lizenz und auf ihre Klauseln betreffend Gewährleistungs- und Haftungsausschluss beibehalten. Sie dürfen keine Vereinbarungen treffen, welche die Bedingungen dieser Lizenz verschärfen oder die mit dieser Lizenz gewährten Rechte für einen Dritten einschränken. Sie dürfen für den Lizenzgegenstand keine Unterlizenz erteilen. Sie dürfen den Lizenzgegenstand nicht mit technischen Schutzmassnahmen versehen, die den Nutzer des Lizenzgegenstandes in der Ausübung der ihm durch diese Lizenz gewährten Rechte behindern können. + + Ziffer 4 Buchstabe a gilt auch, falls der Lizenzgegenstand Bestandteil einer Sammlung ist. Dies bedeutet allerdings nicht, dass die Sammlung als solche diesen Lizenzbestimmungen unterstellt werden muss. + + Wenn Sie den Lizenzgegenstand in eine Sammlung aufnehmen, müssen Sie auf Aufforderung des Urhebers oder jedes Lizenzgebers hin jeden Hinweis auf den Auffordernden soweit machbar und gewünscht aus der Sammlung entfernen; soweit Hinweise gestützt auf eine solche Aufforderung zu entfernen sind, entfallen die Pflichten gemäss Ziffer 4 Buchstabe b. Entsprechendes gilt bei Abwandlungen. + + Sie dürfen eine Abwandlung des Lizenzgegenstandes ausschliesslich unter den Bedingungen + dieser Lizenz, + einer späteren Version dieser Lizenz mit denselben Lizenzelementen, + einer rechtsordnungsspezifischen Creative-Commons-Lizenz mit denselben Lizenzelementen ab Version 3.0 aufwärts (z.B. Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 US), + der Creative-Commons-Unported-Lizenz mit denselben Lizenzelementen ab Version 3.0 aufwärts, oder + einer mit Creative Commons kompatiblen Lizenz + öffentlich wiedergeben oder verbreiten. + + Falls Sie die Abwandlung gemäss Abschnitt (v) unter einer mit Creative Commons kompatiblen Lizenz lizenzieren, müssen Sie deren Lizenzbestimmungen Folge leisten. + + Falls Sie die Abwandlungen unter einer der unter (i)-(iv) genannten Lizenzen („Verwendbare Lizenzen“) lizenzieren, müssen Sie deren Lizenzbestimmungen sowie folgenden Bestimmungen Folge leisten: Sie müssen stets eine Kopie der verwendbaren Lizenz oder deren vollständige Internetadresse in Form des Uniform-Resource-Identifier (URI) beifügen, wenn Sie die Abwandlung verbreiten oder öffentlich zeigen. Sie dürfen keine Vertrags- oder Nutzungsbedingungen anbieten oder fordern, die die Bedingungen der verwendbaren Lizenz oder die durch sie gewährten Rechte beschränken. Bei jeder Abwandlung, die Sie verbreiten oder öffentlich zeigen, müssen Sie alle Hinweise auf die verwendbare Lizenz und den Haftungsausschluss unverändert lassen. Wenn Sie die Abwandlung verbreiten oder öffentlich zeigen, dürfen Sie (in Bezug auf die Abwandlung) keine technischen Massnahmen ergreifen, die den Nutzer der Abwandlung in der Ausübung der ihm durch die verwendbare Lizenz gewährten Rechte behindern können. Dieser Abschnitt 4.a gilt auch für den Fall, dass die Abwandlung einen Bestandteil einer Sammlung bildet, was jedoch nicht bedeutet, dass die Sammlung insgesamt der verwendbaren Lizenz unterstellt werden muss. + Bei der Nutzung des Lizenzgegenstands oder einer Abwandlung davon, sei es isoliert oder als Teil einer Sammlung, müssen Sie die bestehenden Copyright-Vermerke vollständig beibehalten bzw. in einem Rahmen wiedergeben, der dem technischen Verfahren und dem Trägermedium der von Ihnen vorgenommenen Nutzung angemessen ist, ausgenommen, es liegt eine Aufforderung zur Entfernung der Angaben gemäss Ziffer 4 Buchstabe a Absatz 3 vor. + Insbesondere müssen Sie (i) den Namen (oder das Pseudonym) des Urhebers sowie den Namen von Dritten nennen, die ein Rechteinhaber in den Copyright-Vermerk aufgenommen hat. + Ist Ihnen (ii) der Titel des Lizenzgegenstands bekannt, müssen Sie diesen angeben. + Hat der Lizenzgeber (iii) eine Internetadresse angegeben (z.B. in Form des Uniform Resource Identifier, URI), welche Lizenzinformationen oder Copyright-Vermerke enthält, müssen Sie diese ebenfalls nennen, soweit dies mit angemessenem Aufwand durchführbar ist. + Bei Abwandlungen müssen Sie (iv) einen mit Ziffer 3 Buchstabe b in Einklang stehenden Hinweis darauf anführen, in welcher Form der Lizenzgegenstand in die Abwandlung eingegangen ist (z. B. „Französische Übersetzung des … (Werk) durch … (Urheber)“ oder „Das Drehbuch beruht auf dem Werk des … (Urheber)“). + Die gemäss dieser Ziffer 4 Buchstabe b vorgeschriebenen Hinweise können in jeder angemessenen Weise erfolgen. Bei Abwandlungen oder Sammlungen müssen solche Hinweise hinsichtlich Plazierung und Ausgestaltung mindestens ebenso auffällig und in vergleichbarer Weise ausgeführt werden, wie dies für die anderen Rechteinhaber erfolgte, sofern ein solcher Hinweis für alle beitragenden Lizenzgeber erscheint. + + Zur Klarstellung: Die gemäss dieser Ziffer 4 Buchstabe b vorgeschriebenen Hinweise dürfen ausschliesslich in der in diesem Abschnitt beschriebenen Weise und zum Zweck der Zurechnung des Werks zum Urheber, Lizenzgeber bzw. zu Dritten, die ein Urheber bzw. Lizenzgeber in den Copyright-Vermerk aufgenommen hat, verwendet werden. Bei der Nutzung des Lizenzgegenstandes dürfen Sie weder implizit noch explizit den Eindruck einer Unterstützung oder Billigung durch diese Personen oder den Eindruck einer sonstigen Verbindung zwischen Ihnen und diesen Personen erwecken, ohne zuvor eine separate schriftliche Einwilligung von den betroffenen Personen eingeholt zu haben. + Ihre Befugnis, den Lizenzgegenstand zu nutzen, findet ihre gesetzliche Grenze in den (Urheber-) Persönlichkeitsrechten des Rechteinhabers, dessen berechtigte geistige und persönliche Interessen bzw. dessen Ansehen oder Ruf durch die Nutzung ohne eine zuvor eingeholte separate schriftliche Einwilligung der betroffenen Personen nicht beeinträchtigt werden dürfen. + +5. Keine Gewährleistung + +SOFERN VOM LIZENZGEBER NICHT SCHRIFTLICH ANDERS ANERKANNT, ÜBERNIMMT DER LIZENZGEBER KEINE GEWÄHRLEISTUNG FÜR DIE ERTEILTEN BEFUGNISSE. + +6. Haftungsausschluss + +ÜBER DIE IN ZIFFER 5 GENANNTE GEWÄHRLEISTUNG HINAUS HAFTET DER LIZENZGEBER NUR FÜR VORSATZ UND GROBE FAHRLÄSSIGKEIT. JEDE ANDERE HAFTUNG IST AUSGESCHLOSSEN, SOWEIT GESETZLICH ZULÄSSIG. FÜR SEINE HILFSPERSONEN HAFTET DER LIZENZGEBER IN KEINEM FALL. DIESER HAFTUNGSAUSSCHLUSS GILT AUCH DANN, WENN SIE AUF DIE MÖGLICHKEIT EINER SCHÄDIGUNG HINGEWIESEN HABEN. + +7. Beendigung + + Diese Lizenz und die darunter eingeräumten Befugnisse fallen ohne weiteres und mit sofortiger Wirkung dahin, wenn Sie die Bedingungen dieser Lizenz verletzen. Mit natürlichen oder juristischen Personen, die Abwandlungen des Lizenzgegenstandes oder diesen enthaltende Sammlungen unter den Bedingungen dieser Lizenz von Ihnen erhalten haben, bestehen nachträglich entstandene Lizenzbeziehungen jedoch solange weiter, wie die genannten Personen sich ihrerseits an sämtliche Lizenzbedingungen halten. Die Ziffern 1, 2, 5, 6, 7 und 8 bleiben ungeachtet der Beendigung dieser Lizenz verbindlich. + Die mit dieser Lizenz eingeräumten Befugnisse werden zeitlich uneingeschränkt eingeräumt (freilich höchstens für die Dauer, für welche der Lizenzgegenstand nach dem anwendbaren Recht urheber- bzw. leistungsschutzrechtlich geschützt ist). Der Lizenzgeber behält sich jedoch für einen beliebigen Zeitpunkt das Recht vor, den Lizenzgegenstand unter einer anderen Lizenz weiterzugeben oder die Verbreitung des Lizenzgegenstands ganz zu beenden. Der Lizenzwechsel wird jedoch nicht die Wirkung eines Widerrufs dieser Lizenz haben (oder jeder anderen Lizenzierung, die auf der Grundlage dieser Lizenz erfolgt oder erfolgen muss), vielmehr wird die Lizenz so lange weiter bestehen, als sie nicht nach Ziffer 7 Buchstabe a vorstehend beendigt wurde. + +8. Verschiedenes + + Jedes Mal, wenn Sie den Lizenzgegenstand oder eine Sammlung gestützt auf Ziffer 3 dieser Lizenz nutzen, räumt der Lizenzgeber auch dem Empfänger eines allfälligen Vervielfältigungsstücks eine Lizenz am Lizenzgegenstand selber ein, und zwar zu denselben Bedingungen wie die Ihnen eingeräumte Lizenz. + Jedes Mal, wenn Sie eine Abwandlung des Lizenzgegenstandes gestützt auf Ziffer 3 dieser Lizenz nutzen, räumt der Lizenzgeber auch dem Empfänger eine Lizenz am ursprünglichen Lizenzgegenstand an, und zwar zu denselben Bedingungen wie die Ihnen eingeräumte Lizenz. + Sollten sich einzelne Bestimmungen dieser Lizenz nach dem anwendbaren Recht als nicht durchsetzbar oder nichtig erweisen, so bleiben die übrigen Bestimmungen dieser Lizenz gültig und durchsetzbar und an die Stelle der unwirksamen Bestimmung tritt eine Ersatzregelung, die dem mit der unwirksamen Bestimmung angestrebten Zweck am nächsten kommt. + Keine Bestimmung dieser Lizenz gilt als wegbedungen und keine Verletzung als genehmigt, bevor nicht die durch die Wegbedingung oder Genehmigung belastete Partei die Wegbedingung oder Genehmigung in Schriftform und unterschriftlich bestätigt hat. + Diese Lizenz enthält alle mit Blick auf den Lizenzgegenstand zwischen den Parteien massgeblichen Bestimmungen. Andere Vertrauenspositionen, Abreden oder Zusicherungen im Hinblick auf den Lizenzgegenstand bestehen nicht. Der Lizenzgeber ist durch keine zusätzliche Klausel gebunden, welche sich aus irgendwelchen Unterlagen von Ihnen ergibt. Diese Vereinbarung kann ohne vorherige Vereinbarung mit unterschriftlicher Bestätigung zwischen dem Lizenzgeber und Ihnen nicht abgeändert werden. + + Creative Commons Hinweis + + Creative Commons ist nicht Partei dieses Lizenzvertrags und macht keinerlei Zusicherungen mit Blick auf den Lizenzgegenstand. Creative Commons haftet nicht für Ihnen entstandene Schäden aus der Verwendung des Lizenzgegenstands oder dieser Lizenz, aus welchem Rechtsgrund sie auch abgeleitet werden, sei es für direkten, indirekten Schaden oder für Folgeschaden. Ungeachtet des vorstehenden Satzes hat Creative Commons alle Rechte aus dieser Lizenz, sofern sie bezüglich eines Werks ausdrücklich selber als Lizenzgeberin unter dieser Lizenz auftritt. + + Ausser für den begrenzten Zweck, dem Publikum öffentlich bekannt zu machen, dass der Lizenzgegenstand unter der CCPL lizenziert ist, erlaubt Creative Commons den Parteien dieser Lizenz nicht, das Markenzeichen "Creative Commons" oder irgend ein anderes Markenzeichen oder Logo von Creative Commons ohne die vorgängige schriftliche Zustimmung von Creative Commons zu verwenden. Jegliche erlaubte Nutzung hat in Übereinstimmung mit den dannzumal gültigen Markenrichtlinien von Creative Commons zu stehen. Die Markenrichtlinien von Creative Commons sind auf ihrer Website abrufbar oder erhältlich auf Anfrage. + + Creative Commons kann unter http://creativecommons.org/ kontaktiert werden. + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b937794 --- /dev/null +++ b/Makefile @@ -0,0 +1,37 @@ +OUTDIR=out +PDFDIR=pdf +FILE = sheet-music_tinwhistle +LILY_PDF = lilypond-book --pdf -o $(OUTDIR) +PDF=cd $(OUTDIR) && pdflatex $(FILE).tex +INDEX=cd $(OUTDIR) && makeindex $(FILE).tex + +# The suffixes used in this Makefile. +.SUFFIXES: .lytex .tex .ly .pdf + +# Input and output files are searched in the directories listed in +# the VPATH variable. All of them are subdirectories of the current +# directory (given by the GNU make variable `CURDIR'). +VPATH = \ + $(CURDIR)/lyrics \ + $(CURDIR)/notes \ + $(CURDIR)/pdf \ + +all: book + +book: $(OUTDIR) $(PDFDIR) + cp headfoot.tex $(OUTDIR)/ + cp -r images/ $(OUTDIR)/ + $(LILY_PDF) $(FILE).lytex + $(PDF) + $(INDEX) + $(PDF) + cp $(CURDIR)/$(OUTDIR)/$(FILE).pdf $(CURDIR)/$(PDFDIR)/$(FILE).pdf + +$(OUTDIR): + mkdir -p $(OUTDIR) + +$(PDFDIR): + mkdir -p $(PDFDIR) + +clean: + rm -rf $(OUTDIR) diff --git a/headfoot.tex b/headfoot.tex new file mode 100644 index 0000000..7f37fee --- /dev/null +++ b/headfoot.tex @@ -0,0 +1,6 @@ +\fancyhf{} +\fancyhead[C]{\textbf{Songs for you}} +\fancyfoot[C]{\thepage } +\renewcommand{\headrulewidth}{0.4pt} +\renewcommand{\footrulewidth}{0.4pt} +\pagestyle{fancy} \ No newline at end of file diff --git a/images/by-sa.png b/images/by-sa.png new file mode 100644 index 0000000..8770732 Binary files /dev/null and b/images/by-sa.png differ diff --git a/lyrics/AllForMeGrog.tex b/lyrics/AllForMeGrog.tex new file mode 100644 index 0000000..8422c91 --- /dev/null +++ b/lyrics/AllForMeGrog.tex @@ -0,0 +1,26 @@ +\textit{[Chorus] \\ +Well it's all for me grog, me jolly jolly grog, \\ +It's all for me beer and tobacco. \\ +For I spent all me tin on the lassies drinking gin, \\ +Far across the western ocean I must wander. \\ } + +Where are me boots, me noggin', noggin' boots, \\ +They're all gone for beer and tobacco. \\ +For the heels they are worn out and the toes are kicked about \\ +And the soles are looking out for better weather. \\ + +\textit{[Chorus] \\} + +Where is me shirt, me noggin', noggin' shirt, \\ +It's all gone for beer and tobacco, \\ +For the collar is all worn, and the sleeves they are all torn, \\ +And the tail is looking out for better weather. \\ + +\textit{[Chorus] \\} + +I'm sick in the head and I haven't been to bed, \\ +Since first I came ashore from me slumber, \\ +For I spent all me dough on the lassies don't you know, \\ +Far across the western ocean I must wander. \\ + +\textit{[Chorus] \\} \ No newline at end of file diff --git a/lyrics/AuldLangSyne.tex b/lyrics/AuldLangSyne.tex new file mode 100644 index 0000000..e94af9f --- /dev/null +++ b/lyrics/AuldLangSyne.tex @@ -0,0 +1,38 @@ +Should auld acquaintance be forgot, \\ +And never brought to mind? \\ +Should auld acquaintance be forgot, \\ +And days of auld lang syne? \\ + +\textit{[Chorus] \\ +For auld lang syne, my dear, \\ +For auld lang syne. \\ +We'll take a cup o' kindness yet, \\ +For auld lang syne. \\} + +And surely ye'll be your pint-stowp! \\ +And surely I'll be mine! \\ +And we'll take a cup o' kindness yet, \\ +for auld lang syne. \\ + +\textit{[Chorus] \\} + +We twa hae run about the braes \\ +And pou'd the gowans fine. \\ +We've wandered mony a weary foot, \\ +Sin' auld lang syne. \\ + +\textit{[Chorus] \\} + +We twa hae sported i' the burn, \\ +From morning sun till dine, \\ +But seas between us braid hae roared \\ +Sin' auld lang syne. \\ + +\textit{[Chorus] \\} + +And ther's a hand, my trusty friend, \\ +And gie's a hand o' thine; \\ +We'll tak' a right good willie-waught, \\ +For auld lang syne. \\ + +\textit{[Chorus] \\} diff --git a/lyrics/BlackVelvetBand.tex b/lyrics/BlackVelvetBand.tex new file mode 100644 index 0000000..051b306 --- /dev/null +++ b/lyrics/BlackVelvetBand.tex @@ -0,0 +1,33 @@ +\textit{[Chorus] \\ +Her eyes they shone like diamonds, \\ +you think she was queen of the land. \\ +With her hair thrown over her shoulder, \\ +tied up with a black velvet band. \\} + +As I went walking down Broadway, \\ +not intending to stay very long, \\ +I met with this frolicksome damsel, \\ +as she came tripping along. \\ + +\textit{[Chorus] \\ } + +A watch she took from his pocket, \\ +and slipped it right into my hand, \\ +On the very first day that I met her, \\ +bad luck to the black velvet band. \\ + +\textit{[Chorus] \\ } + +Before the judge and jury, \\ +next morning we had to appear, \\ +A gentleman claimed his jewellery, \\ +and the case against us was clear, \\ + +\textit{[Chorus] \\ } + +Seven long years transportation, \\ +right down to "Van Diemen's Land" \\ +Far away from my friends and companions, \\ +betrayed by the black velvet band, \\ + +\textit{[Chorus] \\ } \ No newline at end of file diff --git a/lyrics/DrunkenSailor.tex b/lyrics/DrunkenSailor.tex new file mode 100644 index 0000000..ccd960e --- /dev/null +++ b/lyrics/DrunkenSailor.tex @@ -0,0 +1,51 @@ +\textit{[Chorus] \\ +Way-hey up she rises \\ +Way-hey up she rises \\ +Way-hey up she rises \\ +Earl-eye in the morning! \\} + +\textit{ +What shall we do with a drunken sailor? \\ +What shall we do with a drunken sailor? \\ +What shall we do with a drunken sailor? \\ +Earl-eye in the morning? \\} + +Put him in a long-boat till he's sober \\ + +\textit{[Chorus] \\} + +Keep him there and make 'im bale 'er. \\ + +\textit{[Chorus] \\} + +Trice him up in a runnin' bowline. \\ + +\textit{[Chorus] \\} + +Put him in the scuppers with a hose-pipe on him. \\ + +\textit{[Chorus] \\} + +Take 'im and shake 'im and try an' wake i'm. \\ + +\textit{[Chorus] \\} + +Give 'im a taste of the bosun's rope-end. \\ + +\textit{[Chorus] \\} + +Shave his belly with a rusty razor. \\ + +\textit{[Chorus] \\} + +Put him in the guard room till he gets sober. \\ + +Way-hey up she rises \\ +Way-hey up she rises \\ +Way-hey up she rises \\ +Earl-eye in the morning! \\ + +That's what we do with a drunken sailor \\ +That's what we do with a drunken sailor \\ +That's what we do with a drunken sailor \\ +Earl-eye in the morning! \\ \ No newline at end of file diff --git a/lyrics/FoggyDew.tex b/lyrics/FoggyDew.tex new file mode 100644 index 0000000..ec3f485 --- /dev/null +++ b/lyrics/FoggyDew.tex @@ -0,0 +1,44 @@ +As down the glen one Easter morn \\ +To a city fair rode I \\ +There armed lines of marching men \\ +In squadrons passed me by \\ +No fife did hum nor battle drum \\ +Did sound it's dread tatoo \\ +But the Angelus bell o'er the Liffey swell \\ +Rang out through the foggy dew \\ + +Right proudly high over Dublin Town \\ +They hung out the flag of war \\ +'Twas better to die 'neath an Irish sky \\ +Than at Sulva or Sud El Bar \\ +And from the plains of Royal Meath \\ +Strong men came hurrying through \\ +While Britannia's Huns, with their long range guns \\ +Sailed in through the foggy dew \\ + +'Twas Britannia bade our Wild Geese go \\ +That small nations might be free \\ +But their lonely graves are by Sulva's waves \\ +Or the shore of the Great North Sea \\ +Oh, had they died by Pearse's side \\ +Or fought with Cathal Brugha \\ +Their names we will keep where the fenians sleep \\ +'Neath the shroud of the foggy dew \\ + +But the bravest fell, and the requiem bell \\ +Rang mournfully and clear \\ +For those who died that Eastertide \\ +In the springing of the year \\ +And the world did gaze, in deep amaze, \\ +At those fearless men, but few \\ +Who bore the fight that freedom's light \\ +Might shine through the foggy dew \\ + +Ah, back through the glen I rode again \\ +And my heart with grief was sore \\ +For I parted then with valiant men \\ +Whom I never shall see more \\ +But to and fro in my dreams I go \\ +And I'd kneel and pray for you, \\ +For slavery fled, O glorious dead, \\ +When you fell in the foggy dew \\ \ No newline at end of file diff --git a/lyrics/ImARoverSeldomSober.tex b/lyrics/ImARoverSeldomSober.tex new file mode 100644 index 0000000..4a51c2e --- /dev/null +++ b/lyrics/ImARoverSeldomSober.tex @@ -0,0 +1,39 @@ +I'm a rover and seldom sober \\ +I'm a rover, o' high degree; \\ +And when I'm drinking, I'm always thinking \\ +How to gain my love's company. \\ + +Though the night be dark as dungeon \\ +No' a star to be seen above, \\ +I will be guided without a stumble \\ +Into the arms o' my ain true love. \\ + +He steppit up to her bedroom window, \\ +Kneelin' gently upon a stone; \\ +He rappit at her bedroom-window \\ +"Darlin' dear, do you lie alone?" \\ + +She raised her head on her snow-white pillow \\ +Wi' her arms aboot her breast, \\ +"Wha' is that at my bedroom window \\ +Disturbin' me at my long night's rest?" \\ + +"It's only me, your ain true lover, \\ +Open the door and let me in. \\ +For I have come on a long journey, \\ +And I'm near drenched to the skin." \\ + +She opened the door wi' the greatest pleasure, \\ +She opened the door and let him in, \\ +They baith shook hands and embraced each other \\ +Until the mornin' they lay as one. \\ + +The cocks were crawin', the birds were whistlin' \\ +The burns they ran free abune the brae; \\ +"Remember, lass, I'm a ploughman laddie \\ +And the farmer I must obey." \\ + +"Noo, my lass, I must gang and leave thee \\ +And though the hills they are high above, \\ +I will climb them wi' greater pleasure \\ +Since I been in the arms o' my love. \\ \ No newline at end of file diff --git a/lyrics/JohnnyIHardlyKnewYe.tex b/lyrics/JohnnyIHardlyKnewYe.tex new file mode 100644 index 0000000..2dcd82a --- /dev/null +++ b/lyrics/JohnnyIHardlyKnewYe.tex @@ -0,0 +1,53 @@ +While goin' the road to sweet Athy, hurroo, hurroo \\ +While goin' the road to sweet Athy, hurroo, hurroo +While goin' the road to sweet Athy \\ +A stick in me hand and a drop in me eye \\ +A doleful damsel I heard cry, \\ +Johnny I hardly knew ye. \\ + +\textit{[Chorus] \\ +With your guns and drums and drums and guns, hurroo, hurroo \\ +With your guns and drums and drums and guns, hurroo, hurroo \\ +With your guns and drums and drums and guns \\ +The enemy nearly slew ye \\ +Oh my darling dear, Ye look so queer \\ +Johnny I hardly knew ye. \\} + +Where are your eyes that were so mild, hurroo, hurroo \\ +Where are your eyes that were so mild, hurroo, hurroo +Where are your eyes that were so mild \\ +When my heart you so beguiled? \\ +Why did ye skedaddle from me and the child? \\ +Oh Johnny, I hardly knew ye. \\ + +Where are your legs that used to run, hurroo, hurroo \\ +Where are your legs that used to run, hurroo, hurroo \\ +Where are your legs that used to run \\ +When you went for to carry a gun \\ +Indeed your dancing days are done \\ +Oh Johnny, I hardly knew ye. \\ + +\textit{[Chorus] \\ } + +I'm happy for to see ye home, hurroo, hurroo \\ +I'm happy for to see ye home, hurroo, hurroo \\ +I'm happy for to see ye home \\ +All from the island of Ceylon \\ +So low in flesh, so high in bone \\ +Oh Johnny I hardly knew ye. \\ + +Ye haven't an arm, ye haven't a leg, hurroo, hurroo \\ +Ye haven't an arm, ye haven't a leg, hurroo, hurroo \\ +Ye haven't an arm, ye haven't a leg, \\ +Ye're an armless, boneless, chickenless egg, \\ +Ye'll have to be put with a bowl to beg, \\ +Oh Johnny I hardly knew ye. \\ + +\textit{[Chorus] \\ } + +They're rolling out the guns again, hurroo, hurroo \\ +They're rolling out the guns again, hurroo, hurroo \\ +They're rolling out the guns again, \\ +But they never will take our sons again, \\ +No they never will take our sons again, \\ +Johnny I'm swearing to ye. \ No newline at end of file diff --git a/lyrics/MacPhersonsFarewell.tex b/lyrics/MacPhersonsFarewell.tex new file mode 100644 index 0000000..2aa1529 --- /dev/null +++ b/lyrics/MacPhersonsFarewell.tex @@ -0,0 +1,53 @@ +Farewell ye dungeons, dark and strong. \\ +Farewell, farewell to thee. \\ +MacPherson's time will no be long \\ +On yonder gallows tree. \\ + +\textit{[Chorus] \\ +So ranting, so wontonly, \\ +So dauntingly gaed he; \\ +He played a tune, and he danced it roun' \\ +About the gallows tree. \\} + +It was by a woman's treacherous hand \\ +That I was condemned to dee. \\ +By a ledge at a window she stood, \\ +And a blanket she threw o'er me. \\ + +The Laird o' Grant, that Highland Saint, \\ +That first layed hands on me. \\ +He played the cause on Peter Broon \\ +To let MacPherson dee. \\ + +\textit{[Chorus] \\ } + +Untie these bands from off my hands, \\ +And give to me my sword, \\ +An' there's no' a man in all Scotland, \\ +But I'll brave him at a word. \\ + +There's some come here to see me hanged \\ +And some to buy my fiddle \\ +But before that I do part wi' her \\ +I'll brake her thro' the middle. \\ + +\textit{[Chorus] \\ } + +He took the fiddle into both his hands \\ +And he broke it o'er a stone \\ +Says there's nae other hand shall play on thee \\ +When I am dead and gone. \\ + +O, little did my mother think \\ +When she first cradled me \\ +That I would turn a rovin' boy \\ +And die on the gallows tree. \\ + +\textit{[Chorus] \\ } + +The reprieve was a comin' o'er the brig o' Banff, \\ +To let MacPherson free; \\ +But the put the clock a quarter afore, \\ +And hanged him to the tree. \\ + +\textit{[Chorus] \\ } \ No newline at end of file diff --git a/lyrics/MollyMalone.tex b/lyrics/MollyMalone.tex new file mode 100644 index 0000000..cb781dc --- /dev/null +++ b/lyrics/MollyMalone.tex @@ -0,0 +1,29 @@ +In Dublin's fair city, \\ +Where the girls are so pretty, \\ +I first set my eyes on sweet Molly Malone, \\ +As she wheeled her wheel-barrow, \\ +Through streets broad and narrow, \\ +Crying, "Cockles and mussels, alive, alive, oh!" \\ + +\textit{[Chorus] \\ +Alive, alive, oh, \\ +Alive, alive, oh, \\ +Crying "Cockles and mussels, alive, alive, oh". \\} + +She was a fishmonger, \\ +But sure 'twas no wonder, \\ +For so were her father and mother before, \\ +And they each wheeled their barrow, \\ +Through streets broad and narrow, \\ +Crying, "Cockles and mussels, alive, alive, oh!" \\ + +\textit{[Chorus] \\ } + +She died of a fever, \\ +And no one could save her, \\ +And that was the end of sweet Molly Malone. \\ +Now her ghost wheels her barrow, \\ +Through streets broad and narrow, \\ +Crying, "Cockles and mussels, alive, alive, oh!" \\ + +\textit{[Chorus] \\ } \ No newline at end of file diff --git a/lyrics/MuirsheenDurkin.tex b/lyrics/MuirsheenDurkin.tex new file mode 100644 index 0000000..e8c9ab5 --- /dev/null +++ b/lyrics/MuirsheenDurkin.tex @@ -0,0 +1,26 @@ +In the days I went a courting, I was never tired of sporting \\ +To the alehouse and the playhouse and many's the house besides, \\ +So I told me brother Seamus I'd go off and be right famous \\ +And before I'd return again I'd roam the whole world wide. \\ + +\textit{[Chorus] \\ +So goodbye, Muirsheen Durkin, I'm sick and tired of working, \\ +No more I'll dig the praties, no longer I'll be poor. \\ +For as sure as me name is Carney \\ +I'll be off to California, where instead of digging praties \\ +I'll be digging lumps of gold. \\} + +I've courted girls in Blarney, in Kanturk, and in Killarney \\ +In Passage, and in Queenstown--that is, the Cobh of Cork. \\ +But goodbye to all this pleasure, for I'm going to take me leisure \\ +And the next time that you hear from me \\ +Will be a letter from New York. \\ + +\textit{[Chorus] \\} + +Goodbye to all the boys at home, I'm sailing far across the foam \\ +To try to make me fortune in far America, \\ +For there's silver there aplenty for the poor man and the gentry \\ +And when I do come back again I never more will stray. \\ + +\textit{[Chorus] \\} \ No newline at end of file diff --git a/lyrics/NationOnceAgain.tex b/lyrics/NationOnceAgain.tex new file mode 100644 index 0000000..f7cbf87 --- /dev/null +++ b/lyrics/NationOnceAgain.tex @@ -0,0 +1,47 @@ +When boyhood's fire was in my blood \\ +I read of ancient freemen, \\ +For Greece and Rome who bravely stood, \\ +Three hundred men and three men; \\ +And then I prayed I yet might see \\ +Our fetters rent in twain, \\ +And Ireland, long a province, be. \\ +A Nation once again! \\ + +\textit{[Chorus] \\ +A Nation once again, \\ +A Nation once again, \\ +And lreland, long a province, be \\ +A Nation once again! \\} + +And from that time, through wildest woe, \\ +That hope has shone a far light, \\ +Nor could love's brightest summer glow \\ +Outshine that solemn starlight; \\ +It seemed to watch above my head \\ +In forum, field and fane, \\ +Its angel voice sang round my bed, \\ +A Nation once again! \\ + +\textit{[Chorus] \\} + +It whisper'd too, that freedom's ark \\ +And service high and holy, \\ +Would be profaned by feelings dark \\ +And passions vain or lowly; \\ +For, Freedom comes from God's right hand, \\ +And needs a Godly train; \\ +And righteous men must make our land \\ +A Nation once again! \\ + +\textit{[Chorus] \\} + +So, as I grew from boy to man, \\ +I bent me to that bidding \\ +My spirit of each selfish plan \\ +And cruel passion ridding; \\ +For, thus I hoped some day to aid, \\ +Oh, can such hope be vain? \\ +When my dear country shall be made \\ +A Nation once again! \\ + +\textit{[Chorus] \\} \ No newline at end of file diff --git a/lyrics/PartingGlass.tex b/lyrics/PartingGlass.tex new file mode 100644 index 0000000..e1a79aa --- /dev/null +++ b/lyrics/PartingGlass.tex @@ -0,0 +1,26 @@ +Of all the money that e'er I spent \\ +I've spent it in good company \\ +And all the harm that ever I did \\ +Alas it was to none but me \\ +And all I've done for want of wit \\ +To memory now I can't recall \\ +So fill to me the parting glass \\ +Good night and joy be with you all. \\ + +If I had money enough to spend \\ +And leisure to sit awhile \\ +There is a fair maid in the town \\ +That sorely has my heart beguiled \\ +Her rosy cheeks and ruby lips \\ +I own she has my heart enthralled \\ +So fill to me the parting glass \\ +Good night and joy be with you all. \\ + +Oh, all the comrades that e're I had \\ +There sorry for my going away \\ +And all the sweethearts that e'er I had \\ +They'd wish me one more day to stay \\ +But since it falls unto my lot \\ +That I should rise and you should not \\ +I'll gently rise and softly call \\ +Good night and joy be with you all. \\ diff --git a/lyrics/RisingOfTheMoon.tex b/lyrics/RisingOfTheMoon.tex new file mode 100644 index 0000000..290c72b --- /dev/null +++ b/lyrics/RisingOfTheMoon.tex @@ -0,0 +1,34 @@ +"Oh! then tell me, Shawn O'Ferrall, tell me why you hurry so?" \\ +"Hush ma bouchal, hush and listen", and his cheeks were all a-glow. \\ +"I bear orders from the captain, get you ready quick and soon, \\ +For the pikes must be together at the risin' of the moon". \\ +At the risin' of the moon, at the risin' of the moon, \\ +For the pikes must be together at the risin' of the moon. \\ + +"Oh! then tell me, Shawn O'Ferrall, where the gatherin' is to be?" \\ +"In the ould spot by the river, right well known to you and me. \\ +One word more - for signal token whistle up the marchin' tune, \\ +With your pike upon your shoulder, by the risin' of the moon". \\ +By the risin' of the moon, by the risin' of the moon, \\ +With your pike upon your shoulder, by the risin' of the moon. \\ + +Out from many a mudwall cabin eyes were watching thro' that night, \\ +Many a manly chest was throbbing for the blessed warning light. \\ +Murmurs passed along the valleys like the banshee's lonely croon, \\ +And a thousand blades were flashing at the risin' of the moon. \\ +At the risin' of the moon, at the risin' of the moon, \\ +And a thousand blades were flashing at the risin' of the moon. \\ + +There beside the singing river that dark mass of men was seen, \\ +Far above the shining weapons hung their own beloved green. \\ +"Death to ev'ry foe and traitor! Forward! strike the marchin' tune, \\ +And hurrah, my boys, for freedom! 'Tis the risin' of the moon". \\ +'Tis the risin' of the moon, 'Tis the risin' of the moon, \\ +And hurrah my boys for freedom! 'Tis the risin' of the moon. \\ + +Well they fought for poor old Ireland, and full bitter was their fate \\ +(Oh! what glorious pride and sorrow fill the name of Ninety-Eight). \\ +Yet, thank God, e'en still are beating hearts in manhood's burning noon, \\ +Who would follow in their footsteps, at the risin' of the moon! \\ +At the rising of the moon, at the risin' of the moon, \\ +Who would follow in their footsteps, at the risin' of the moon. \\ \ No newline at end of file diff --git a/lyrics/StarOfTheCountyDown.tex b/lyrics/StarOfTheCountyDown.tex new file mode 100644 index 0000000..7513552 --- /dev/null +++ b/lyrics/StarOfTheCountyDown.tex @@ -0,0 +1,47 @@ +Near to Bambridge Town, in the County Down \\ +One morning in July, \\ +Down a boreen green came a sweet coleen, \\ +And she smiled as she passed me by; \\ +Oh, she looked so neat from her two white feet \\ +To the sheen of her nut-brown hair, \\ +Sure the coaxing elf, I'd to shake myself \\ +To make sure I was standing there \\ + +\textit{[Chorus] \\ +Oh, from Bantry Bay up to Derry Quay, \\ +And from Galway to Dublin Town \\ +No maid I've seen like the brown collen \\ +That I met in the County Down. \\ } + +As she onward sped I shook my head \\ +And I gazed with a feeling quare; \\ +And I said, says I, to a passer-by, \\ +"Who's the maid with the nut-brown hair?" \\ +Oh, he smiled at me, and with pride says he, \\ +"That's the gem of Ireland's crown, \\ +She's young Rosie McCann from the banks of the Bann, \\ +She's the Star of the County Down." \\ + +\textit{[Chorus] \\ } + +I've tavelled a bit, but never was hit \\ +Since my roving career began; \\ +But fair and square I surrended there \\ +To the charms of young Rose McCann. \\ +I'd a heart ot let and no tenant yet \\ +Did I meet with in shawl or gown, \\ +But in she went and I asked no rent \\ +From the Star of the County Down. \\ + +\textit{[Chorus] \\ } + +At the crossroads fair, I'll be surely there \\ +And I'll dress in my Sunday clothes \\ +And I'll try sheep's eyes, and deludhering lies \\ +On the heart of the nut-brown Rose. \\ +No pipe I'll smoke, no horse I'll yoke \\ +Though with rust my plow turns brown, \\ +Till a smiling bride by my own fireside \\ +Sits the Star of the County Down. \\ + +\textit{[Chorus] \\ } \ No newline at end of file diff --git a/lyrics/TimFinnegansWake.tex b/lyrics/TimFinnegansWake.tex new file mode 100644 index 0000000..8310a22 --- /dev/null +++ b/lyrics/TimFinnegansWake.tex @@ -0,0 +1,58 @@ +Tim Finnegan lived in Walkin' Street \\ +A gentleman Irish, mighty odd; \\ +He had a brogue both rich and sweet \\ +And to rise in the world he carried a hod. \\ +Now Tim had a sort of the tipplin' way \\ +With a love for the liquor he was born \\ +And to help on with is work each day \\ +He'd a "drop of the cray-thur" every morn. \\ + +\textit{[Chorus] \\ +Whack fol the dah O, dance to your partner \\ +Whirl the floor, your trotters shake; \\ +Wasn't it the truth I told you \\ +Lots of fun at Finnegan's wake! \\} + +One mornin' Tim was feelin' foul \\ +His head was heavy and it made him shake; \\ +He fell from a ladder and he broke his skull \\ +And they carried him home his corpse to wake. \\ +They rolled him up in a nice clean sheet \\ +And laid him out upon the bed, \\ +A gallon of whiskey at his feet \\ +and a barrel of porter at his head. \\ + +\textit{[Chorus] \\} + +His friends assembled at the wake \\ +And Mrs. Finnegan called for lunch, \\ +First they brought in tea and cake \\ +Then pipes, tobacco and brandy punch. \\ +Biddy O'Brien began to bawl \\ +"Such a nice clean corpse did you ever see? \\ +O Tim, mavourneed, why did you die?" \\ +"Hold your gob," said Paddy McGee! \\ + +\textit{[Chorus] \\} + +Then Maggie O'Connor took up the job \\ +"O Biddy," says she, "You're wrong I'm sure" \\ +Biddy she gave her a belt in the gob \\ +And left her sprawlin on the floor. \\ +And then the war did soon engage \\ +It was woman to woman and man to man \\ +Shillelagh law was all the rage \\ +And a row and a ruccus soon began. \\ + +\textit{[Chorus] \\} + +Then Mickey Maloney ducked his head \\ +When a noggin of whiskey flew at him \\ +It missed, and falling on the bed \\ +The liquor squattered over Tim! \\ +The corpse revives! See how he rises! \\ +Tim Finnegan rising from the bed, \\ +Says, "Whirl your whiskey round like blazes \\ +D'ainm an diabhal!* Do you think I'm dead?" \\ + +*"Your soul to the devil! (spoken: Thanum an Dhul)" diff --git a/lyrics/WhiskeyInTheJar.tex b/lyrics/WhiskeyInTheJar.tex new file mode 100644 index 0000000..5c34633 --- /dev/null +++ b/lyrics/WhiskeyInTheJar.tex @@ -0,0 +1,49 @@ +As I was going over Kilgarry Mountain, \\ +I spied Captain Farrell and his money he was countin'. \\ +I first produced me pistol, and then produced me rapier, \\ +Sayin' stand and deliver for I am your bold receiver. \\ + +\textit{[Chorus] \\ +Well shirigim duraham da \\ +Wack fall the daddy oh, wack fall the daddy oh \\ +There's whiskey in the jar. \\} + +He counted out his money, and it made a pretty penny, \\ +I put it in me pocket, and I took it home to Jenny. \\ +She sighed and she swore that she never would deceive me. \\ +But the devil take the women for the always lie so easy. \\ + +\textit{[Chorus] \\} + +I went into me chamber all for to take a slumber, \\ +To dream of gold and girls and of course it was no wonder, \\ +Me Jenny took me charges and she filled them up with water. \\ +Called on Captain Farrell to get ready for the slaughter. \\ + +\textit{[Chorus] \\} + +Next morning early before I rose to travel, \\ +There came a band of footmen and likewise Captain Farrell \\ +I goes to draw me pistol for she'd stole away my rapier, \\ +But a prisoner I was taken, I couldn't shoot the water. \\ + +\textit{[Chorus] \\} + +They put me into jail with a judge all a writin' \\ +For robbin' Captain Farrel on Kilgary Moutnain. \\ +But they didn't take me fists so I knocked the jailer down, \\ +And bid a farewell to this tightfisted town. \\ + +\textit{[Chorus] \\} + +I'd like to find me brother, the one that's in the army, \\ +I don't know where he's stationed, in Cork or in Killarney. \\ +Together we'd go roving o'er the mountains of Killkenney \\ +And I swear he'd treat me better than darling sporting Jenny. \\ + +\textit{[Chorus] \\} + +There's some takes delight in the carriages and rolling, \\ +Some takes delight in the hurley or the bowlin' \\ +But I takes delight in the juice of the barley, \\ +Counting pretty maids in the morning oh so early. \\ \ No newline at end of file diff --git a/lyrics/WildRover.tex b/lyrics/WildRover.tex new file mode 100644 index 0000000..95974fe --- /dev/null +++ b/lyrics/WildRover.tex @@ -0,0 +1,31 @@ +I've been a wild rover for many a year \\ +And I've spent all my money on whiskey and beer, \\ +And now I'm returning with gold and great store \\ +And I never will play the wild rover no more \\ + +\textit{[Chorus] \\ +And it's no, nay, never \\ +No nay never no more \\ +Will I play the wild rover \\ +No never no more. \\ } + +I went to an ale-house I used to frequent \\ +And I told the landlady me money was spent. \\ +I asked her for credit, she answered me "nay \\ +Such a custom as yours I could have any day." \\ + +\textit{[Chorus] \\} + +I took from my pocket ten soverigns bright \\ +And the landlady's eyes opened wide with delight. \\ +She said "I have whiskey and wines of the best \\ +And the words that I spoke were only in jest." \\ + +\textit{[Chorus] \\} + +I'll go home to my parents, confess what I've done \\ +And I'll ask them to pardon their prodigal son. \\ +And if they forgive me as oftimes before \\ +Sure I never will play the wild rover no more. \\ + +\textit{[Chorus] \\} \ No newline at end of file diff --git a/notes/AllForMeGrog.ly b/notes/AllForMeGrog.ly new file mode 100644 index 0000000..3219e28 --- /dev/null +++ b/notes/AllForMeGrog.ly @@ -0,0 +1,25 @@ +\version "2.16.0" + +\header { + %title = "All for me Grog" + composer = "Stephen Hatfield" +} + +<< + \chords {s8 g1 c2 g1. d1 g1 c2 g1 d2 d2:7 g4. } + + \relative d' + { + \time 4/4 + \key g \major + \partial 8 d8 | + g4 b8. a16 g4. fis8 | + e fis g e d2 | + d'4 d8. d16 d4 c8 b | + b a4.( a4) b8 c | + d(e) d b g4 g8 fis | + e a g e d4 g8 a | + b d c b b a g fis | + a2 g4( g8) \bar "|." + } +>> diff --git a/notes/AuldLangSyne.ly b/notes/AuldLangSyne.ly new file mode 100644 index 0000000..958e9f3 --- /dev/null +++ b/notes/AuldLangSyne.ly @@ -0,0 +1,32 @@ +\version "2.16.0" + +\header { + %title = "Auld lang syne" + composer = "Robert Burns" +} + +<< + \chords {s4 d1 a:7 d g d a2.:7 fis4 b2:m e4:min7 a:7 d1 d1 a:7 d g d a2.:7 fis4 b2:m e4:min7 a:7 d1 } + \relative a' + { + \time 4/4 + \key d \major + \partial 4 a4 | + d4. cis8 d4 fis | + e4. d8 e4 fis | + d4. d8 fis4 a | + b2. b4 | + a4. fis8 fis4 d | + e4. d8 e4 fis8 e | + d4. b8 b4 a | + d2. b'4 | + a4. fis8 fis4 d | + e4. d8 e4 b' | + a4. fis8 fis4 a | + b2. b4 | + a4. fis8 fis4 d | + e4. d8 e4 fis8 e | + d4. b8 b4 a | + d2. s8 \bar "|." + } +>> diff --git a/notes/BlackVelvetBand.ly b/notes/BlackVelvetBand.ly new file mode 100644 index 0000000..b1a494b --- /dev/null +++ b/notes/BlackVelvetBand.ly @@ -0,0 +1,32 @@ +\version "2.16.0" + +\header { + %title = "The Black Velvet Band" + composer = "Traditional" +} + +<< + \chords {s4 d1.*3 a1.:7 d1*9/4 a d } + \relative g'' + { + \time 3/4 + \key g \major + \partial 4 d4 | + d2 d4 | + b c4. d8 | + c4 b2( | + b) a4 | + g a b | + g fis e | + d2.( | + d4) d' c | + b2 b4 | + d, e fis | + g2( a4) | + b2 g4 | + a b c | + fis, g a | + g2.( | + g2) s4 \bar "|." + } +>> diff --git a/notes/DrunkenSailor.ly b/notes/DrunkenSailor.ly new file mode 100644 index 0000000..a12d4ac --- /dev/null +++ b/notes/DrunkenSailor.ly @@ -0,0 +1,31 @@ +\version "2.16.0" + +\header { + %title = "Drunken Sailor" + composer = "Traditional" +} + +<< + \chords {a1:m g a:m g a:m g a:m g} + \relative b' + { + \time 2/4 + \key d \major + b8 b16 b b8 b16 b | + b8 e, g b | + a a16 a a8 a16 a | + a8 d, fis a | + b b16 b b8 b16 b | + b8 cis d e | + d b a fis | + e4 e \bar ":|:" + b' b | + b8 e, g b | + a4 a | + a8 d, fis a | + b4 b | + b8 cis d e | + d b a fis | + e4 e \bar ":|" + } +>> diff --git a/notes/FoggyDew.ly b/notes/FoggyDew.ly new file mode 100644 index 0000000..44b1176 --- /dev/null +++ b/notes/FoggyDew.ly @@ -0,0 +1,37 @@ +\version "2.16.0" + +\header { + %title = "The Foggy Dew" + composer = "Charles O’Neill" +} + +\relative g' +{ + \time 4/4 + \key g \major + \partial 2 b d | + e2 d4 b | + e2 d4 b | + a2 b | + d, e4 fis | + g b a g | + e2. d4 | + e1( | + e2) \bar ":|" + \partial 2 fis | + g b | + d c4 b | + a2 a | + b g4 a | + b2 g'4 fis | + e d b d | + e1( | + e2) b4 d | + e2 d4 b | + e2 d4 b | + a2 b | + d, e4 fis | + g b a g | + e2. e4 | + e2 \bar "|." +} diff --git a/notes/ImARoverSeldomSober.ly b/notes/ImARoverSeldomSober.ly new file mode 100644 index 0000000..90628d8 --- /dev/null +++ b/notes/ImARoverSeldomSober.ly @@ -0,0 +1,21 @@ +\version "2.16.0" + +\header { + %title = "I'm a Rover seldom sober" + composer = "Traditional" +} + +\relative g' +{ + \time 9/8 + \key g \major + r2 r4 g g8 | + g4. d4 d8 e4 e8 | + e4. d g4 g8 | + g4. b4 b8 b4 b8 | + a4. r4 d8 d4 c8 | + b4. d4 d8 a4 fis8 | + g4. d g4 a8 | + b4. b4 b8 a4 a8 | + g4. r4 \bar "|." +} diff --git a/notes/JohnnyIHardlyKnewYe.ly b/notes/JohnnyIHardlyKnewYe.ly new file mode 100644 index 0000000..2742439 --- /dev/null +++ b/notes/JohnnyIHardlyKnewYe.ly @@ -0,0 +1,29 @@ +\version "2.16.0" + +\header { + %title = "Johnny I hardly knew ye" + composer = "Traditional" +} + +\relative c' +{ + \time 6/8 + \key c \major + r2 r8 e8 | + e a a a4 b 8 | + c4 b8 c4 a8 | + g2 ( g8) e | + g2 ( g8) a | + e a a a4 b8 | + c4 b8 c4 d8 | + e2( e8) c8 | + e2( e8) c8 | + e4 e8 e d c | + d4 d8 d4 b8 | + c4 c8 c b a | + b4 b8 b c d | + e4( e8) d4( d8) | + c4( c8) b4( e,8) | + e a a a4 g8 | + a4.( a4) r8 \bar "|." +} \ No newline at end of file diff --git a/notes/MacPhersonsFarewell.ly b/notes/MacPhersonsFarewell.ly new file mode 100644 index 0000000..3b30812 --- /dev/null +++ b/notes/MacPhersonsFarewell.ly @@ -0,0 +1,30 @@ +\version "2.16.0" + +\header { + %title = "MacPhersons Farewell" + composer = "Robert Burns" +} + +\relative g' +{ + \time 4/4 + \key g \major + \partial 4 d | + g4. a8 b4 a8 ( g)| + a ( g) a (b) a4 b8 ( a) | + g4. a8 b4 a8( g) | + e2. d8( e) | + g4. a8 b4 a8( g) | + a ( g) a (b) a4 b8 ( a) | + g4. b8 a8( g) e4 | + d2. \bar "|." + b'8( c) | + d4. b8 c( b) a( g) | + b4 a a b8( c) | + d4. b8 c( b) a( g) | + e2. e'4 | + d4. b8 c( b) a g | + b4 a a d, | + g4. b8 a( g) e4 | + d2. \bar "|." +} diff --git a/notes/MollyMalone.ly b/notes/MollyMalone.ly new file mode 100644 index 0000000..02e4516 --- /dev/null +++ b/notes/MollyMalone.ly @@ -0,0 +1,61 @@ +\version "2.16.0" + +\header { + %title = "Molly Malone" + composer = "Traditional" +} + +\relative g' +{ + \time 3/4 + \key c \major + \partial 4 g | + c c c | + c8 e4. d8 c | + d4 d d | + d8 f4. e8 d | + g4 e c | + g' e c | + a d c | + b2 g4 | + c c c | + c8 e4. d8 c | + d4 d d | + d8 f4. e8 d | + g e4. c4 | + g'8 e4. c4 | + d4. c8 d4 | + c2 g4 | + c4. c8 c4 | + c( e) d8( c) | + d4. d8 d4 | + d( f) e8 d | + g e4. c4 | + g'8 e4. c4 | + d4. c8 d4 | + c2 g4 | + c c c | + c8 e4. d8 c | + d4 d d | + d8 f4. e8 d | + g4 e c | + g' e c | + a d c | + b2 g4 | + c c c | + c8 e4. d8 c | + d4 d d | + d8 f4. e8 d | + g e4. c4 | + g'8 e4. c4 | + d4. c8 d4 | + c2 g4 | + c4. c8 c4 | + c( e) d8( c) | + d4. d8 d4 | + d( f) e8 d | + g e4. c4 | + g'8 e4. c4 | + d4. c8 d4 | + c2 \bar "|." +} diff --git a/notes/MuirsheenDurkin.ly b/notes/MuirsheenDurkin.ly new file mode 100644 index 0000000..ad91faa --- /dev/null +++ b/notes/MuirsheenDurkin.ly @@ -0,0 +1,29 @@ +\version "2.16.0" + +\header { + %title = "Muirsheen Durkin" + composer = "Traditional" +} + +\relative d' +{ + \time 4/4 + \key d \major + \partial 4 d8. e16 | + fis4 fis e d | + e a a b | + cis a g e | + e d2 d8. e16 | + fis4 fis e d | + e a2 b4 | + cis8 cis a4 b cis | + d2. a4 | + d d e d | + cis a a b | + cis a g e | + e d2 d8. e16 | + fis2 e4 d | + e a a b | + cis a g( e) | + d2. \bar "|." +} diff --git a/notes/NationOnceAgain.ly b/notes/NationOnceAgain.ly new file mode 100644 index 0000000..f726708 --- /dev/null +++ b/notes/NationOnceAgain.ly @@ -0,0 +1,50 @@ +\version "2.16.0" + +\header { + %title = "A Nation once again" + composer = "Thomas Osborne Davis" +} + +\relative fis'' +{ + \time 4/4 + \key d \major + \partial 4 fis | + a, b8 cis d4 cis8 d | + fis4. e8 d4. cis8 | + b4 e d8 cis b cis | + e4 d d2 | + a4 b8 cis d4 cis8 d | + fis4. e8 d4. cis8 | + b4 e d8 cis b cis | + b4 a a2 | + a4 b cis d | + e4. a,8 a2 | + b4 cis d e | + fis2 fis8 e d cis | + b4 b g'4. fis8 | + e4 d cis4. b8 | + a fis'4. e d8 | + d2 d4 a | + \repeat volta 2 + { + fis'4. e8 d4. cis8 | + b2 b4 b | + g'4. fis8 e4. d8 | + cis2 cis4 b | + a b8 cis d4. cis8 | + } + \alternative + { + { + b8 e8. d16 cis4 cis8 b r | + a4 fis' e4. d8 | + d2 d4 a + } + { + b8 e8. d16 cis4 d8 e r | + fis4 g e4. d8 | + d2 d4 \bar "|." + } + } +} diff --git a/notes/PartingGlass.ly b/notes/PartingGlass.ly new file mode 100644 index 0000000..54039b4 --- /dev/null +++ b/notes/PartingGlass.ly @@ -0,0 +1,29 @@ +\version "2.16.0" + +\header { + %title = "The parting Glass" + composer = "Traditional" +} + +\relative b' +{ + \time 4/4 + \key g \major + \partial 4 b8 (a) | + g4 e e d8 e | + g4 g a g8 (a) | + b4 b b8 (a) g (a) | + b4 d, d b'8 (a) | + g4 e e d8 (e) | + g4 g a g8 (a) | + b4 e d8 (b) a (b) | + g4 e e4. b'8 | + d (b) d (e) d4. b8 | + d (b) d (e) d4. b8 | + c4 b a g8 (a) | + b4 d, d b'8 (a) | + g4 e e d8 (e) | + g4 g a g8 (a) | + b4 e d8 (b) a (b) | + g4 e e \bar "|." +} diff --git a/notes/RisingOfTheMoon.ly b/notes/RisingOfTheMoon.ly new file mode 100644 index 0000000..4dfa888 --- /dev/null +++ b/notes/RisingOfTheMoon.ly @@ -0,0 +1,29 @@ +\version "2.16.0" + +\header { + %title = "The Rising og the Moon" + composer = "John Keegan Casey" +} + +\relative d' +{ + \time 4/4 + \key d \major + \partial 4 d8. e16 | + fis4 fis e d | + e a a b | + cis a g e | + e d2 d8. e16 | + fis4 fis e d | + e a2 b4 | + cis8 cis a4 b cis | + d2. a4 | + d d e d | + cis a a b | + cis a g e | + e d2 d8. e16 | + fis2 e4 d | + e a a b | + cis a g( e) | + d2. \bar "|." +} diff --git a/notes/StarOfTheCountyDown.ly b/notes/StarOfTheCountyDown.ly new file mode 100644 index 0000000..89f0658 --- /dev/null +++ b/notes/StarOfTheCountyDown.ly @@ -0,0 +1,30 @@ +\version "2.16.0" + +\header { + %title = "The Star of the County Down" + composer = "Cathal Mac Garvey" +} + +\relative c' +{ + \time 4/4 + \key g \major + \partial 4 fis8 a | + b4 b b a8 b | + d4 d e d8 e | + fis4 e8 d b4 a8 fis | + a2. fis8 a | + b4 b b a8 b | + d4 d e d8 e | + fis4 e8 d b4 b | + b2. \bar "||" + \partial 4 e8 fis | + a4 fis fis e8 d | + e4 e e d8 e | + fis4 e8 d b4 a8 fis | + a2. fis8 a | + b4 b b a8 b | + d4 d e d8 e | + fis4 e8 d8 b4 b | + b2. \bar "|." +} diff --git a/notes/TimFinnegansWake.ly b/notes/TimFinnegansWake.ly new file mode 100644 index 0000000..6ab587a --- /dev/null +++ b/notes/TimFinnegansWake.ly @@ -0,0 +1,37 @@ +\version "2.16.0" + +\header { + %title = "Tim Finnegan's Wake" + composer = "Traditional" +} + +\relative a' +{ + \time 2/4 + \key g \major + \partial 8 a8 | + b16 b b8 b a | + b e e8. fis16 | + g g fis8 e d | + b a a a16 a | + b b b8 b a | + b e e fis16 fis | + g8 fis16 fis e8 d | + e16 e fis8 g8. d16 | + g8 g16 g g8 a16 a | + g8 fis e d16 d | + g8 g16 g g g a8 | + g fis e8. d16 | + g8 g g a16 a | + g8 fis e d16 d | + e8 e16 e e8 d | + e fis g4 | + b,8 b16 b b8 a | + b e16 e e8 fis | + g fis e d | + b16 a8. a4 | + b8 b b a | + b e e fis | + g fis e d | + e16 e fis8 g \bar "|." +} diff --git a/notes/WhiskeyInTheJar.ly b/notes/WhiskeyInTheJar.ly new file mode 100644 index 0000000..adf4372 --- /dev/null +++ b/notes/WhiskeyInTheJar.ly @@ -0,0 +1,37 @@ +\version "2.16.0" + +\header { + %title = "Whiskey in the jar" + composer = "Traditional" +} + +\relative c' +{ + \time 4/4 + \key d \major + \partial 4 fis | + a4. a8 a4 b | + a fis2 a4 | + b4. b8 b4 cis | + b fis2 a4 | + b4. b8 b4 cis | + d2 cis4 b | + a8 b4 d4. cis4 | + b fis2 fis4 | + a4. a8 a4 b | + a fis2 fis4 | + b4. b8 b4 cis | + b fis2 a4 | + b4. b8 b4 cis | + d2 cis4 b | + a8 b4 d4. cis4 | + b a fis d | + e e8 e e4 fis | + e1( | + e4) fis fis4. e8 | + fis8 a4. a2( | + a4) b b4. a8 | + b cis4. d4 b | + a fis e fis | + d2. \bar "|." +} diff --git a/notes/WildRover.ly b/notes/WildRover.ly new file mode 100644 index 0000000..60cb5f7 --- /dev/null +++ b/notes/WildRover.ly @@ -0,0 +1,42 @@ +\version "2.16.0" + +\header { + %title = "The wild Rover" + composer = "Traditional" +} + +\relative g' +{ + \time 3/4 + \key g \major + \partial 4 a | + g4. a8 g4 | + e d b' | + b4. a8 b4 | + c2 b8 c | + d4 b d | + c8 a4. fis4 | + d b' a | + g2 g4 | + g4. a8 g4 | + e d b' | + b4. a8 d4 | + c2 b8 c | + d4 b d | + c8 a4. fis4 | + d b' a | + g fis g | a2. | + a | + fis4 d2( | + d2.)(d4) b' b | + b a b | + c2.( | + c2) b8 c | + d2.( | + d4) b g | + fis e2( | + e) e8 e | + d4 b' a | + g2.( | + g) \bar "|." +} diff --git a/notes/orchestrallily.ly b/notes/orchestrallily.ly new file mode 100644 index 0000000..4936ccc --- /dev/null +++ b/notes/orchestrallily.ly @@ -0,0 +1,1936 @@ +\version "2.15.19" + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% OrchestralLily +% ============== +% Desciption: Lilypond package to make writing large orchestral scores easier. +% Documentation: http://wiki.kainhofer.com/lilypond/orchestrallily +% Version: 0.02, 2008-03-06 +% Author: Reinhold Kainhofer, reinhold@kainhofer.com +% Copyright: (C) 2008 by Reinhold Kainhofer +% License: Dual-licensed under either: +% -) GPL v3.0, http://www.gnu.org/licenses/gpl.html +% -) Creative Commons BY-NC 3.0, http://creativecommons.org/licenses/by-nc/3.0/at/ +% +% Version History: +% 0.01 (2008-03-02): Initial Version +% 0.02 (2008-03-06): Added basic MIDI support (*MidiInstrument and \setCreateMIDI) +% 0.03 (2008-07-xx): General staff/voice types, title pages, etc. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +#(use-modules (ice-9 match)) + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% GLOBAL OPTIONS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Use relative include pathes! +#(ly:set-option 'relative-includes #t) + +\include "sceaux_clef-key.ily" + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% SCORE STRUCTURE AND AUTOMATIC GENERATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Helper functions +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Helper function to filter all non-null entries +#(define (not-null? x) (not (null? x))) + +% Helper function to extract a given variable, built from [Piece][Instrument]Identifier +#(define (namedPieceInstrObject piece instr name) + (let* ( + (fullname (string->symbol (string-append piece instr name))) + (instrname (string->symbol (string-append instr name))) + (piecename (string->symbol (string-append piece name))) + (fallback (string->symbol name)) + ) + (cond + ((defined? fullname) (primitive-eval fullname)) + ((defined? instrname) (primitive-eval instrname)) + ((defined? piecename) (primitive-eval piecename)) + ((defined? fallback) (primitive-eval fallback)) + (else '()) + ) + ) +) + +%% Print text as a justified paragraph, taken from the lilypond Notation Reference +#(define-markup-list-command (paragraph layout props args) (markup-list?) + (let ((indent (chain-assoc-get 'par-indent props 2))) + (interpret-markup-list layout props + (make-justified-lines-markup-list (cons (make-hspace-markup indent) + args))))) + +conditionalBreak = #(define-music-function (parser location) () + #{ \tag #'instrumental-score \pageBreak #} +) + +#(define (oly:piece-title-markup title) (markup #:column (#:line (#:fontsize #'3 #:bold title))) ) + +#(define-markup-command (piece-title layout props title) (markup?) + (interpret-markup layout props (oly:piece-title-markup title)) +) + +#(define (oly:generate_object_name piece instr obj ) + (if (and (string? piece) (string? instr) (string? obj)) + (string-append piece instr obj) + #f + ) +) +#(define (oly:generate_staff_name piece instr) (oly:generate_object_name piece instr "St")) + +#(define (set-context-property context property value) + (set! (ly:music-property context property) value) +) + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Score structure and voice types +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +#(define oly:LiedScoreStructure '( + ("SoloScore" "SimultaneousMusic" ("Singstimme")) + ("Pfe" "PianoStaff" ("PfeI" "PfeII")) + ;("PfeI" "ParallelVoicesStaff" ("OIa" "OIb")) + ;("PfeII" "ParallelVoicesStaff" ("OIIa" "OIIb")) + ("FullScore" "SimultaneousMusic" ("Singstimme" "Pfe")) + ("VocalScore" "SimultaneousMusic" ("Singstimme" "Pfe")) +)) + +#(define oly:StringEnsembleScoreStructure '( + ("FullScore" "StaffGroup" ("VI" "VII" "Va" "Vc" "Cb" "VcB")) +)) + +#(define oly:fullOrchestraScoreStructure '( +; Part-combined staves for full score + ("Fl" "PartCombinedStaff" ("FlI" "FlII")) + ("Ob" "PartCombinedStaff" ("ObI" "ObII")) + ("Cl" "PartCombinedStaff" ("ClI" "ClII")) + ("Fag" "PartCombinedStaff" ("FagI" "FagII")) + ("Wd" "StaffGroup" ("Fl" "Ob" "Cl" "Fag" "CFag")) + + ("Cor" "PartCombinedStaff" ("CorI" "CorII")) + ("Tbe" "PartCombinedStaff" ("TbeI" "TbeII")) + ("Clni" "PartCombinedStaff" ("ClnoI" "ClnoII")) + ("Trb" "PartCombinedStaff" ("TrbI" "TrbII")) + ("Br" "StaffGroup" ("Cor" "Tbe" "Clni" "Trb" "Tba")) + +; long score; no part-combined staves, but GrandStaves instead + ("FlLong" "GrandStaff" ("FlI" "FlII")) + ("ObLong" "GrandStaff" ("ObI" "ObII")) + ("ClLong" "GrandStaff" ("ClI" "ClII")) + ("FagLong" "GrandStaff" ("FagI" "FagII")) + ("WdLong" "StaffGroup" ("FlLong" "ObLong" "ClLong" "FagLong" "CFag")) + + ("CorLong" "GrandStaff" ("CorI" "CorII")) + ("TbeLong" "GrandStaff" ("TbeI" "TbeII")) + ("ClniLong" "GrandStaff" ("ClnoI" "ClnoII" "ClnoIII")) + ("TrbLong" "GrandStaff" ("TrbI" "TrbII" "TrbIII")) + ("BrLong" "StaffGroup" ("CorLong" "TbeLong" "ClniLong" "TrbLong" "Tba")) + +; Percussion + ("Perc" "StaffGroup" ("Tim")) + +; Strings, they are the same in long and short full score + ("VV" "GrandStaff" ("VI" "VII")) + ("Str" "StaffGroup" ("VV" "Va")) + ("VceB" "StaffGroup" ("Vc" "Cb" "VcB")) + ("FullStr" "StaffGroup" ("VV" "Va" "Vc" "Cb" "VcB")) + +; Choral score + ("Solo" "SimultaneousMusic" ("SSolo" "ASolo" "TSolo" "BSolo")) + ("Ch" "ChoirStaff" ("S" "A" "T" "B")) + ("ChoralScore" "SimultaneousMusic" ("Ch")) + ("SoloScore" "SimultaneousMusic" ("Solo")) + ("SoloChoirScore" "SimultaneousMusic" ("Solo" "Ch")) + +; Organ score (inkl. Figured bass) + ("BCFb" "FiguredBass" ()) + ("FiguredBass" "FiguredBass" ()) + ;("Organ" "SimultaneousMusic" ("BCFb" "O")) + ("Continuo" "ParallelVoicesStaff" ("BCFb" "BC" "FiguredBass")) + ("RealizedContinuo" "PianoStaff" ("BCRealization" "Continuo")) + + ("P" "PianoStaff" ("PI" "PII")) + ("O" "PianoStaff" ("OI" "OII")) + ("OI" "ParallelVoicesStaff" ("OIa" "OIb")) + ("OII" "ParallelVoicesStaff" ("OIIa" "OIIb")) + + ;("Organ" "SimultaneousMusic" ("OGroup" "RealizedContinuo")) + ;("BassGroup" "ParallelVoicesStaff" ("Organ" "O" "BC" "VceB")) + ("BassGroup" "StaffGroup" ("O" "RealizedContinuo" "Vc" "Cb" "VcB")) + +; Full Scores + ("FullScore" "SimultaneousMusic" ("Wd" "Br" "Perc" "Str" "SoloChoirScore" "BassGroup")) + ("LongScore" "SimultaneousMusic" ("WdLong" "BrLong" "Perc" "Str" "SoloChoirScore" "BassGroup")) + ("OriginalScore" "SimultaneousMusic" ("BrLong" "WdLong" "Perc" "Str" "SoloChoirScore" "BassGroup")) + +; Piano reduction + ;("Piano" "SimultaneousMusic" ("Organ")) + ("OrganScore" "SimultaneousMusic" ("SoloChoirScore" "O")) + ("VocalScore" "SimultaneousMusic" ("SoloChoirScore" "P")) + ("Particell" "SimultaneousMusic" ("ChoralScore" "BassGroup")) + +; Full scores: Orchestral score and long score including organ + ("ChStrQ" "SimultaneousMusic" ("Str" "Ch" "VceB")) +)) +#(define oly:orchestral_score_structure oly:fullOrchestraScoreStructure) + +#(define (oly:set_score_structure struct) + (if (list? struct) + (set! oly:orchestral_score_structure struct) + (ly:warning (_ "oly:set_score_structure needs an association list as argument!")) + ) +) + +#(define (oly:modify_score_structure entry) + (if (list? entry) + (set! oly:orchestral_score_structure (assoc-set! oly:orchestral_score_structure (car entry) (cdr entry))) + (ly:warning (_ "oly:modify_score_structure expects a list (\"key\" \"type\" '(children)) as argument!")))) + +#(define (oly:remove_from_score_structure entry) + (if (list? entry) + (map oly:remove_from_score_structure entry) + (set! oly:orchestral_score_structure (assoc-remove! oly:orchestral_score_structure entry)))) + +orchestralScoreStructure = #(define-music-function (parser location structure) (list?) + (oly:set_score_structure structure) + (make-music 'Music 'void #t) +) + +#(define oly:voice_types '()) + +#(define (oly:set_voice_types types) + (if (list? types) + (set! oly:voice_types types) + (ly:warning (_ "oly:set_voice_types needs an association list as argument!")) + ) +) + +orchestralVoiceTypes = #(define-music-function (parser location types) (list?) + (oly:set_voice_types types) + (make-music 'Music 'void #t) +) + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Automatic staff and group generation +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Retrieve all music definitions for the given +#(define (oly:get_music_object piece instrument) + (namedPieceInstrObject piece instrument "Music") +) +#(define (oly:get_music_objects piece instruments) + (filter not-null? (map (lambda (i) (oly:get_music_object piece i)) instruments)) +) + +% Given a property name and the extensions, either generate the pair to set +% the property or an empty list, if no pre-defined variable could be found +#(define (oly:generate_property_pair prop piece instr type) + (let* ((val (namedPieceInstrObject piece instr type))) + (if (not-null? val) (list 'assign prop val) '() ) + ) +) + +#(define (oly:staff_type type) + (cond + ((string? type) (string->symbol type)) + ((symbol? type) type) + (else 'Staff) + ) +) + +% extract the pitch from the music (can also be a raw pitch object!) +#(define (oly:extractPitch music) + (let* ( + (elems (if (ly:music? music) (ly:music-property music 'elements))) + (note (if (pair? elems) (car elems))) + (mpitch (if (ly:music? note) (ly:music-property note 'pitch))) + (pitch (if (ly:pitch? music) music mpitch)) + ) + (if (and (not-null? music) (not (ly:pitch? pitch))) + (ly:warning "Unable to interpret as a pitch!") + ) + pitch + ) + +) +#(define (oly:extractTranspositionPitch piece name) + (let* ( + (trpFromPitch (oly:extractPitch (namedPieceInstrObject piece name "TransposeFrom"))) + (trpToPitch (oly:extractPitch (namedPieceInstrObject piece name "TransposeTo"))) + ) + (if (ly:pitch? trpFromPitch) + (if (ly:pitch? trpToPitch) + ; Both pitches + (ly:pitch-diff trpFromPitch trpToPitch) + (ly:pitch-diff trpFromPitch (ly:make-pitch 0 0 0)) + ) + (if (ly:pitch? trpToPitch) + (ly:pitch-diff (ly:make-pitch 0 0 0) trpToPitch) + #f + ) + ) + ) +) + + +%%===================================================================== +%% Extract context modifications for given objects +%%--------------------------------------------------------------------- + + +% TODO: join these property extractors to avoid code duplication + +% Generate the properties for the lyrics for piece and instr. +% Also check whether we have a modifications object to fech mods from. +% return a (possibly empty) list of all assignments. +#(define (oly:lyrics_handler_properties piece name lyricsid) + (let* ( + (mods (namedPieceInstrObject piece name (string-append lyricsid "Modifications"))) + (mod-list (if (not-null? mods) (ly:get-context-mods mods) '())) + (mapping '( + ;(instrumentName . "InstrumentName") + ;(shortInstrumentName . "ShortInstrumentName") + ;(midiInstrument . "MidiInstrument") + )) + (assignments (map + (lambda (pr) + (oly:generate_property_pair (car pr) piece name (cdr pr)) + ) + mapping)) + (olyprops (filter not-null? assignments)) + (props (append mod-list olyprops)) + ) + props + ) +) + +% Generate the properties for the voice for piece and instr. +% Also check whether we have a modifications object to fech mods from. +% return a (possibly empty) list of all assignments. +#(define (oly:voice_handler_properties piece name) + (let* ( + (mods (namedPieceInstrObject piece name "VoiceModifications")) + (mod-list (if (not-null? mods) (ly:get-context-mods mods) '())) + (mapping '( + ;(instrumentName . "InstrumentName") + ;(shortInstrumentName . "ShortInstrumentName") + ;(midiInstrument . "MidiInstrument") + )) + (assignments (map + (lambda (pr) + (oly:generate_property_pair (car pr) piece name (cdr pr)) + ) + mapping)) + (olyprops (filter not-null? assignments)) + (props (append mod-list olyprops)) + ) + props + ) +) + +% Generate the properties for the staff for piece and instr. Typically, these +% are the instrument name and the short instrument name (if defined). +% Also check whether we have a modifications object to fech mods from. +% return a (possibly empty) list of all assignments. +#(define (oly:staff_handler_properties piece instr) + (let* ( + (mods (namedPieceInstrObject piece instr "StaffModifications")) + (mod-list (if (not-null? mods) (ly:get-context-mods mods) '())) + (mapping '( + (instrumentName . "InstrumentName") + (shortInstrumentName . "ShortInstrumentName") + (midiInstrument . "MidiInstrument") + )) + (assignments (map + (lambda (pr) + (oly:generate_property_pair (car pr) piece instr (cdr pr)) + ) + mapping)) + (olyprops (filter not-null? assignments)) + (props (append mod-list olyprops)) + ) + props + ) +) + +%% Process the extracted object, e.g. wrap \clef around the +%% string for "type"=="Clef", etc. +% This allows a more fine-grained post-processing of the global vars +#(define (oly:processExtractedObject piece name type object) + (if (and (string=? type "Clef") (string? object)) + (make-ancient-or-modern-clef object) ;; Use Nicolas Sceaux' old/modern clef notation + object)) + + + +%%===================================================================== +%% Extract contents for voices +%%--------------------------------------------------------------------- + +#(define (oly:musiccontent_for_voice parser piece name music additional) + (let* ((musiccontent additional)) + + ; Append the settings, key and clef (if defined) + (map + (lambda (type) + (let* ((object (oly:processExtractedObject piece name type (namedPieceInstrObject piece name type)))) + (if (ly:music? object) + (set! musiccontent (append musiccontent (list (ly:music-deep-copy object)))) + (if (not-null? object) (ly:warning (_ "Wrong type (no ly:music) for ~S for instrument ~S in piece ~S") type name piece)) + ) + ) + ) + ; TODO: Does the "Tempo" work here??? + '("Settings" "Key" "Clef" "TimeSignature" "ExtraSettings";"Tempo" + ) + ) + + (if (ly:music? music) + (begin + (set! musiccontent (make-sequential-music (append musiccontent (list music)))) + ;(ly:message "Generating staff for ~a" name) + (let* ((trpPitch (oly:extractTranspositionPitch piece name))) + (if (ly:pitch? trpPitch) + (set! musiccontent (ly:music-transpose musiccontent trpPitch)) + ) + ) + musiccontent + ) + ; For empty music, return empty + '() + ) + ) +) + + + +%%===================================================================== +%% create Lyrics +%%--------------------------------------------------------------------- + + +#(define (oly:lyrics_create_single_context parser piece name voicename lyricsid) + ; If we have lyrics, create a lyrics context containing LyricCombineMusic + ; and add that as second element to the staff's elements list... + ; Also add possibly configured LyricsModifications + (let* ((id (string-append "Lyrics" lyricsid)) + (lyricsmods (oly:lyrics_handler_properties piece name id)) + (lyrics (namedPieceInstrObject piece name id)) + (ctx (if (ly:music? lyrics) + (context-spec-music (make-music 'LyricCombineMusic + 'element lyrics + 'associated-context voicename) + 'Lyrics + (oly:generate_object_name piece name id)) + '()))) + (if (and (not-null? lyricsmods) (not-null? ctx)) + (set! (ly:music-property ctx 'property-operations) lyricsmods) + ) + ctx + ) +) + +#(define (oly:lyrics_create_contexts parser piece name voicename) + (filter not-null? + (map (lambda (str) + (oly:lyrics_create_single_context parser piece name voicename str)) + (list "" "I" "II" "III" "IV" "V" "VI")))) + + +%%===================================================================== +%% Voice handling +%%--------------------------------------------------------------------- + + +#(define (oly:voice_handler_internal parser piece name type music) + (if (ly:music? music) + (let* ( + (voicename (oly:generate_object_name piece name "Voice" )) + (lyrics (oly:lyrics_create_contexts parser piece name voicename)) + (additional (if (not-null? lyrics) (list dynamicUp) '())) + (musiccontent (oly:musiccontent_for_voice parser piece name music additional)) + (voicetype (oly:staff_type type)) + (voice (context-spec-music musiccontent voicetype voicename)) + (voiceprops (oly:voice_handler_properties piece name)) + ) + (if (not-null? voiceprops) + (set! (ly:music-property voice 'property-operations) voiceprops) + ) + (cons voice lyrics) + ) + ; For empty music, return empty + '() + ) +) + +#(define (oly:voice_handler parser piece name type) + (oly:voice_handler_internal parser piece name type (oly:get_music_object piece name))) + + +%%===================================================================== +%% Staff/Group handling +%%--------------------------------------------------------------------- + + +#(define (oly:staff_handler_internal parser piece name type voices) + (if (not-null? voices) + (let* ( + (staffname (oly:generate_staff_name piece name)) + (stafftype (oly:staff_type type)) + (staff (make-simultaneous-music voices)) + (propops (oly:staff_handler_properties piece name)) + ) + (case stafftype + ((SimultaneousMusic ParallelMusic) #f) + (else (set! staff (context-spec-music staff stafftype staffname))) + ) + (if (not-null? propops) + (set! (ly:music-property staff 'property-operations) propops) + ) + staff + ) + ; For empty music, return empty + '() + ) +) + +#(define (oly:staff_handler parser piece name type children) + (let* ((c (if (not-null? children) children (list name))) + (voices (apply append (map (lambda (v) (oly:create_voice parser piece v)) c)) ) + ) + (if (not-null? voices) + (oly:staff_handler_internal parser piece name type voices) + '() + ) + ) +) + +#(define (oly:devnull_handler parser piece name type children) + (oly:voice_handler parser piece name type) +) + +#(define (oly:parallel_voices_staff_handler parser piece name type children) + (let* ( + (voices (map (lambda (i) (oly:create_voice parser piece i)) children)) + ; get the list of non-empty voices and flatten it! + (nonemptyvoices (apply append (filter not-null? voices))) + ) + (if (not-null? nonemptyvoices) + (oly:staff_handler_internal parser piece name "Staff" nonemptyvoices) + '() + ) + ) +) + +#(define (oly:remove-with-tag tag music) + (if (ly:music? music) + (music-filter + (lambda (m) + (let* ((tags (ly:music-property m 'tags)) + (res (memq tag tags))) + (not res))) + music) + music)) + +% Remove all music tagged a not-part-combine +#(define (oly:remove-non-part-combine-events music) + (oly:remove-with-tag 'non-partcombine music)) + +#(define (oly:part_combined_staff_handler parser piece name type children) + (let* ((rawmusic (map (lambda (c) (oly:musiccontent_for_voice parser piece name (oly:get_music_object piece c) '())) children)) + (filteredmusic (map (lambda (m) (oly:remove-non-part-combine-events m)) rawmusic)) + (music (filter not-null? filteredmusic))) + (cond + ((and (pair? music) (ly:music? (car music)) (not-null? (cdr music)) (ly:music? (cadr music))) + ;(ly:message "Part-combine with two music expressions") + (oly:staff_handler_internal parser piece name "Staff" (list (make-part-combine-music parser music #f)))) + ((null? music) + ;;(ly:warning "Part-combine without any music expressions") + '()) + ; exactly one is a music expression, simply use that by joining + ((list? music) + ;;(ly:message "Part-combine with only one music expressions") + (oly:staff_handler_internal parser piece name "Staff" (list (apply append music)))) + (else + ;(ly:message "make_part_combined_staff: ~S ~S ~a" piece instr instruments) + '() ) + ) + ) +) + +% Figured bass is a special case, as it can be voice- or staff-type. When +% given as a staff type, simply call the voice handler, instead + +#(define (oly:figured_bass_staff_handler parser piece name type children) + (let* ((c (if (not-null? children) children (list name))) + (voice (oly:voice_handler parser piece (car c) type))) + (if (pair? voice) (car voice) ()) + ) +) + +#(define (flatten lst) + (define (f remaining result) + (cond + ((null? remaining) result) + ((pair? (car remaining)) (f (cdr remaining) (f (car remaining) result))) + (else (f (cdr remaining) (cons (car remaining) result))))) + (reverse! (f lst '()))) + +#(define (oly:staff_group_handler parser piece name type children) + (let* ( + (staves (flatten (map (lambda (i) (oly:create_staff_or_group parser piece i)) children))) + (nonemptystaves (filter not-null? staves)) + ) + (if (not-null? nonemptystaves) + (let* ( + (musicexpr (if (= 1 (length nonemptystaves)) + (car nonemptystaves) + (make-simultaneous-music nonemptystaves))) + (groupname (oly:generate_staff_name piece name)) + (grouptype (oly:staff_type type)) + (group musicexpr) + (propops (oly:staff_handler_properties piece name)) + ) + (case grouptype + ((SimultaneousMusic ParallelMusic) #f) + (else (set! group (context-spec-music group grouptype groupname))) + ) + (if (pair? propops) + (set! (ly:music-property group 'property-operations) propops)) + group + ) + ; Return empty list if no staves are generated + '() + ) + ) +) + +#(define (oly:create_voice parser piece name) + (let* ( (voice (namedPieceInstrObject piece name "Voice")) + (type (assoc-ref oly:voice_types name)) ) + (if (not-null? voice) + ; Explicit voice variable, use that + voice + + (if (not type) + ; No entry in structure found => simple voice + (oly:voice_handler parser piece name "Voice") + ; Entry found in structure => use the handler for the given type + (let* ( + (voicetype (car type)) + (handler (assoc-ref oly:voice_handlers voicetype)) + ) + (if handler + ((primitive-eval handler) parser piece name voicetype) + (begin + (ly:warning "No handler found for voice type ~a, using default voice handler" voicetype) + (oly:voice_handler parser piece name voicetype) + ) + ) + ) + ) + ) + ) +) + +#(define (oly:create_staff_or_group parser piece name) + (let* ( (staff (namedPieceInstrObject piece name "Staff")) + (type_from_structure (assoc-ref oly:orchestral_score_structure name)) ) + ;(if (not-null? staff) + ; (ly:message "Found staff variable for instrument ~a in piece ~a" instr piece) + ; (ly:message "Staff variable for instrument ~a in piece ~a NOT FOUND" instr piece) + ;) + (if (not-null? staff) + ; Explicit staff variable, use that + staff + + (if (not (list? type_from_structure)) + ; No entry in structure found => simple staff + (oly:staff_handler parser piece name "Staff" '()) + + ; Entry found in structure => use the handler for the given type + (let* ((type (car type_from_structure)) + (handler (assoc-ref oly:staff_handlers type)) + (children (cadr type_from_structure)) + ) + (if handler + ((primitive-eval handler) parser piece name type children) + (begin + (ly:warning "No handler found for staff type ~a, using default staff handler" type) + (oly:staff_handler parser piece name type children) + ) + ) + ) + ) + ) + ) +) + +#(define (oly:dynamics_handler parser piece name type children) + (oly:voice_handler parser piece name type) +) + + +%%===================================================================== +%% Handler definitions +%%--------------------------------------------------------------------- + +#(define oly:staff_handlers + (list + ; staff group types + '("GrandStaff" . oly:staff_group_handler ) + '("PianoStaff" . oly:staff_group_handler ) + '("ChoirStaff" . oly:staff_group_handler ) + '("StaffGroup" . oly:staff_group_handler ) + '("ParallelMusic" . oly:staff_group_handler ) + '("SimultaneousMusic" . oly:staff_group_handler ) + ; staff types + '("Staff" . oly:staff_handler ) + '("DrumStaff" . oly:staff_handler ) + '("RhythmicStaff" . oly:staff_handler ) + '("TabStaff" . oly:staff_handler ) + '("GregorianTranscriptionStaff" . oly:staff_handler ) + '("MensuralStaff" . oly:staff_handler ) + '("VaticanaStaff" . oly:staff_handler ) + '("ChordNames" . oly:staff_handler ) + ; staves with multiple voices + '("PartCombinedStaff" . oly:part_combined_staff_handler ) + '("ParallelVoicesStaff" . oly:parallel_voices_staff_handler ) + ; special cases: Figured bass can be staff or voice type! + '("FiguredBass" . oly:figured_bass_staff_handler ) + ; Devnull is like a staff, only that it doesn't craete output + '("Devnull" . oly:devnull_handler ) + '("Dynamics" . oly:dynamics_handler ) + ) +) + +#(define oly:voice_handlers + (list + ; voice types + '("Voice" . oly:voice_handler ) + '("CueVoice" . oly:voice_handler ) + '("DrumVoice" . oly:voice_handler ) + '("FiguredBass" . oly:voice_handler ) + '("ChordNames" . oly:voice_handler ) + '("GregorianTranscriptionVoice" . oly:voice_handler ) + '("NoteNames" . oly:voice_handler ) + '("TabVoice" . oly:voice_handler ) + '("VaticanaVoice" . oly:voice_handler ) + ) +) + + +#(define (oly:register_staff_type_handler type func) +; (ly:message "Registering staff handler ~a for type ~a" func type) + (set! oly:staff_handlers (assoc-set! oly:staff_handlers type func)) +) + +#(define (oly:register_voice_type_handler type func) +; (ly:message "Registering voice type handler ~a for type ~a" func type) + (set! oly:voice_handlers (assoc-set! oly:voice_handlers type func)) +) + +% handlers for deprecated API +#(oly:register_staff_type_handler 'StaffGroup 'oly:staff_group_handler) +#(oly:register_staff_type_handler 'GrandStaff 'oly:staff_group_handler) +#(oly:register_staff_type_handler 'PianoStaff 'oly:staff_group_handler) +#(oly:register_staff_type_handler 'ChoirStaff 'oly:staff_group_handler) +#(oly:register_staff_type_handler 'Staff 'oly:staff_handler ) +#(oly:register_staff_type_handler 'ParallelMusic 'oly:staff_group_handler) +#(oly:register_staff_type_handler 'SimultaneousMusic 'oly:staff_group_handler) +#(oly:register_staff_type_handler #t 'oly:part_combined_staff_handler ) +#(oly:register_staff_type_handler #f 'oly:parallel_voices_staff_handler ) + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Automatic score generation +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +#(define oly:score_handler add-score) +#(define oly:music_handler add-music) +#(define oly:text_handler add-text) + + +% TODO: deprecate +setUseBook = #(define-music-function (parser location usebook) (boolean?) + (ly:warning "\\setUseBook has been deprecated! Books are now automatically handled without any hacks") + (make-music 'Music 'void #t) +) + + +% Two functions to handle midi-blocks: Either don't set one, or set an empty +% one so that MIDI is generated +#(define (oly:set_no_midi_block score) '()) +#(define (oly:set_midi_block score) + (let* ((midiblock (if (defined? '$defaultmidi) + (ly:output-def-clone $defaultmidi) + (ly:make-output-def)))) + (ly:output-def-set-variable! midiblock 'is-midi #t) + (ly:score-add-output-def! score midiblock) + ) +) + +% \setCreateMidi ##t/##f sets a flag to determine wheter MIDI output should +% be generated +#(define oly:apply_score_midi oly:set_no_midi_block) +setCreateMIDI = #(define-music-function (parser location createmidi) (boolean?) + (if createmidi + (set! oly:apply_score_midi oly:set_midi_block) + (set! oly:apply_score_midi oly:set_no_midi_block) + ) + (make-music 'Music 'void #t) +) + + +% Two functions to handle layout-blocks: Either don't set one, or set an empty +% one so that a PDF is generated +#(define (oly:set_no_layout_block score) '()) +#(define (oly:set_layout_block score) + (let* ((layoutblock (if (defined? '$defaultlayout) + (ly:output-def-clone $defaultlayout) + (ly:make-output-def)))) + (ly:output-def-set-variable! layoutblock 'is-layout #t) + (ly:score-add-output-def! score layoutblock) + ) +) + +% \setCreatePDF ##t/##f sets a flag to determine wheter PDF output should +% be generated +#(define oly:apply_score_layout oly:set_no_layout_block) +setCreatePDF = #(define-music-function (parser location createlayout) (boolean?) + (if createlayout + (set! oly:apply_score_layout oly:set_layout_block) + (set! oly:apply_score_layout oly:set_no_layout_block) + ) + (make-music 'Music 'void #t) +) + + +% Set the piece title in a new header block. +#(define (oly:set_piece_header score piecename) + (if (not-null? piecename) + (let* ((header (make-module))) + (module-define! header 'piece piecename) + (ly:score-set-header! score header) + ) + ) +) + + +% post-filter functions. By default, no filtering is done. However, +% for the *NoCues* function, the cue notes should be killed +keepcuefilter = #(define-music-function (parser location music) (ly:music?) + ((ly:music-function-extract removeWithTag) parser location 'non-cued music)) +removecuefilter = #(define-music-function (parser location music) (ly:music?) + ((ly:music-function-extract removeWithTag) parser location 'cued ((ly:music-function-extract killCues) parser location music))) + +%% The page numbers are pages counts in the pdf file, not visible page number! +%% So we have to offset them if the first page is not page #1 +%% unfortunately this means we have to store the first-page-number of the first +%% bookpart in a global variable, because in later layouts we don't have that +%% information available any more (first-page-number will be the first page +%% number of the currently processed bookpart!) +#(define oly:first-page-offset #f) +#(define (oly:create-toc-file layout pages) + (if (not oly:first-page-offset) + (set! oly:first-page-offset (1- (ly:output-def-lookup layout 'first-page-number)))) + (let* ((label-table (ly:output-def-lookup layout 'label-page-table))) + (if (not (null? label-table)) + (let* ((format-line (lambda (toc-item) + (let* ((label (car toc-item)) + (text (caddr toc-item)) + (label-page (and (list? label-table) + (assoc label label-table))) + (page (and label-page (cdr label-page)))) + (if page + (format #f "~a, section, 1, {~a}, ~a" (- page oly:first-page-offset) text label) + ;; label came from a different bookpart, so ignore it! + #f)))) + (formatted-toc-items (map format-line (toc-items))) + (whole-string (string-join (filter (lambda (i) i) formatted-toc-items) ",\n")) + (output-name (ly:parser-output-name parser)) + (outfilename (format "~a.toc" output-name)) + (outfile (open-output-file outfilename))) + (if (output-port? outfile) + (display whole-string outfile) + (ly:warning (_ "Unable to open output file ~a for the TOC information") outfilename)) + (close-output-port outfile))))) + + +#(define-public (oly:add-toc-item parser markup-symbol text) + (oly:music_handler parser (add-toc-item! markup-symbol text))) + + +#(define (oly:add-score parser score piecename) + (if (not-null? piecename) + (oly:add-toc-item parser 'tocItemMarkup piecename)) + (oly:score_handler parser score) +) +% The helper function to build a score. +#(define (oly:createScoreHelper parser location piece children func) + (let* ( + (staves (oly:staff_group_handler parser piece "" "SimultaneousMusic" children)) + (music (if (not-null? staves) + ((ly:music-function-extract func) parser location staves) + '() + )) + (score '()) + (piecename (namedPieceInstrObject piece (car children) "PieceName")) + (piecenametacet (namedPieceInstrObject piece (car children) "PieceNameTacet")) + (header '()) + ) + (if (null? music) + ; No staves, print tacet + (begin + (if (not-null? piecenametacet) (set! piecename piecenametacet)) + (if (not-null? piecename) + (oly:add-score parser (list (oly:piece-title-markup piecename)) piecename) + (ly:warning (_ "No music and no score title found for part ~a and instrument ~a") piece children) + ) + ) + ; we have staves, apply the piecename to the score and add layout/midi blocks if needed + (begin + (set! score (scorify-music music parser)) + (oly:set_piece_header score piecename) + (oly:apply_score_midi score) + (oly:apply_score_layout score) + ; Schedule the score for typesetting + (oly:add-score parser score piecename) + ) + ) + ) + ; This is a void function, the score has been schedulled for typesetting already + (make-music 'Music 'void #t) +) + +createVoice = #(define-music-function (parser location piece name) (string? string?) + (let* ((vc (oly:create_voice parser piece name))) + (make-music 'SimultaneousMusic + 'elements vc))) + +createStaff = #(define-music-function (parser location piece name) (string? string?) + (oly:create_staff_or_group parser piece name)) +createStaffForContents = #(define-music-function (parser location piece name contents) (string? string? ly:music?) + (let* ((tstruct (assoc-ref oly:orchestral_score_structure name)) + (type (if (list? tstruct) (car tstruct) "Staff"))) + (oly:staff_handler_internal parser piece name type (list contents)))) + + +createScore = #(define-music-function (parser location piece children) (string? list?) + (oly:createScoreHelper parser location piece children keepcuefilter) +) +createNoCuesScore = #(define-music-function (parser location piece children) (string? list?) + (oly:createScoreHelper parser location piece children removecuefilter) +) + +createHeadline = #(define-music-function (parser location headline) (string?) + (oly:add-toc-item parser 'tocItemMarkup headline) + (oly:score_handler parser (list (oly:piece-title-markup headline))) + (make-music 'Music 'void #t) +) + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% CUE NOTES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +newInstrument = #(define-music-function (parser location instr) (string?) +#{ + \set Voice.instrumentCueName = #(string-join (list "+" instr)) +#} +) +cueText = #(define-music-function (parser location instr) (string?) +#{ + \set Voice.instrumentCueName = $instr +#} +) +cueMarkup = #(define-music-function (parser location instr) (markup?) +#{ + \set Voice.instrumentCueName = $instr +#} +) + +clearCueText = #(define-music-function (parser location) () +#{ + \unset Voice.instrumentCueName +#} +) + +insertCueText = #(define-music-function (parser location instr) (string?) + (if (string-null? instr) + #{ \tag #'cued \clearCueText #} + #{ \tag #'cued \cueText #instr #} +)) + +% generate a cue music section with instrument names +% Parameters: \namedCueDuring NameOfQuote CueDirection CueInstrument OriginalInstrument music +% -) NameOfQuote CueDirection music are the parameters for \cueDuring +% -) CueInstrument and OriginalInstrument are the displayed instrument names +% typical call: +% \namedCueDuring #"vIQuote" #UP #"V.I" #"Sop." { R1*3 } +% This adds the notes from vIQuote (defined via \addQuote) to three measures, prints "V.I" at +% the beginning of the cue notes and "Sop." at the end +namedCueDuring = #(define-music-function (parser location cuevoice direction instrcue instr cuemusic) (string? number? string? string? ly:music?) +#{ + \cueDuring #cuevoice #direction { + \insertCueText #instrcue + $cuemusic + \insertCueText #instr + } +#} +) +namedTransposedCueDuring = #(define-music-function (parser location cuevoice direction instrcue instr trans cuemusic) (string? number? string? string? ly:music? ly:music?) + #{ + \transposedCueDuring #cuevoice #direction #trans { + \insertCueText #instrcue + #cuemusic + \insertCueText #instr + } + #} +) + +% set the cue instrument name and clef +% setClefCue = #(define-music-function (parser location instr clef) +% (string? ly:music?) +% #{ +% \once \override Staff.Clef #'font-size = #-3 \clef $clef +% \insertCueText $instr +% #} ) + +% generate a cue music section with instrument names and clef changes +% Parameters: \cleffedCueDuring NameOfQuote CueDirection CueInstrument CueClef OriginalInstrument OriginalClef music +% -) NameOfQuote CueDirection music are the parameters for \cueDuring +% -) CueInstrument and OriginalInstrument are the displayed instrument names +% -) CueClef and OriginalClef are the clefs for the the cue notes and the clef of the containing voice +% typical call: +% \cleffedCueDuring #"vIQuote" #UP #"V.I" #"treble" #"Basso" #"bass" { R1*3 } +% This adds the notes from vIQuote (defined via \addQuote) to three measures, prints "V.I" at +% the beginning of the cue notes and "Basso" at the end. The clef is changed to treble at the +% beginning of the cue notes and reset to bass at the end +cleffedCueDuring = #(define-music-function (parser location cuevoice direction instrcue clefcue instr clefinstr cuemusic) + (string? number? string? string? string? string? ly:music?) + #{ + \namedCueDuringWithClef $cuevoice $direction $instrcue $clefcue $instr $cuemusic + #} +) +% generate a cue music section with instrument names and clef changes +% Parameters: \namedCueDuringClef NameOfQuote CueDirection CueInstrument CueClef OriginalInstrument music +% -) NameOfQuote CueDirection music are the parameters for \cueDuring +% -) CueInstrument and OriginalInstrument are the displayed instrument names +% -) CueClef is the clef for the the cue notes +% typical call: +% \namedCueDuringWithClef #"vIQuote" #UP #"V.I" #"treble" #"Basso" { R1*3 } +% This adds the notes from vIQuote (defined via \addQuote) to three measures, prints "V.I" at +% the beginning of the cue notes and "Basso" at the end. The clef is changed to treble at the +% beginning of the cue notes and reset to bass at the end +namedCueDuringWithClef = #(define-music-function (parser location cuevoice direction instrcue clefcue instr cuemusic) + (string? number? string? string? string? ly:music?) + #{ + \cueDuringWithClef #cuevoice #direction #(extract-ancient-or-modern-clef clefcue) { + \insertCueText #instrcue + #cuemusic + \insertCueText #instr + } + #} +) + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% DYNAMICS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +dynamicsX = #(define-music-function (parser location offset) (number?) +#{ + \once \override DynamicText #'X-offset = $offset + \once \override DynamicLineSpanner #'Y-offset = #0 +#}) + +% Move the dynamic sign inside the staff to a fixed staff-relative position +% posY (where 0 means vertically starts at the middle staff line) +dynamicsAllInside = #(define-music-function (parser location offsetX posY) +(number? number?) +#{ + % Invalid y-extent -> hidden from skyline calculation and collisions +% \once \override DynamicLineSpanner #'Y-extent = #(cons +0 -0.01) + \once \override DynamicLineSpanner #'Y-extent = $(lambda (grob) + (let* ((ext (ly:axis-group-interface::height grob)) + (dir (ly:grob-property grob 'direction))) + (if (eq? dir UP) + (cons (- (cdr ext) 0.1) (cdr ext)) + (cons (car ext) (+ (car ext) 0.1))))) + % move by X offset and to fixed Y-position (use Y-offset of parent!) + \once \override DynamicText #'X-offset = $offsetX + \once \override DynamicText #'Y-offset = + $(lambda (grob) + (let* ((head (ly:grob-parent grob Y)) + (offset (ly:grob-property head 'Y-offset))) + (- posY offset (- 0.6)))) + \once \override DynamicLineSpanner #'Y-offset = $posY +#}) + +dynamicsUpInside = #(define-music-function (parser location offsetX) (number?) + ((ly:music-function-extract dynamicsAllInside) parser location offsetX 1.5) +) + +dynamicsDownInside = #(define-music-function (parser location offsetX) (number?) + ((ly:music-function-extract dynamicsAllInside) parser location offsetX -3.5) +) + +hairpinOffset = #(define-music-function (parser location posY) (number?) +#{ + \once \override DynamicLineSpanner #'Y-offset = $posY + \once \override DynamicLineSpanner #'Y-extent = #(cons +0 -0.01) +#}) + +#(define ((line-break-offset before after) grob) + (let* ((orig (ly:grob-original grob)) + ; All siblings if line-broken: + (siblings (if (ly:grob? orig) (ly:spanner-broken-into orig) '() ))) + (if (>= (length siblings) 2) + ; We have been line-broken + (if (eq? (car (last-pair siblings)) grob) + ; Last sibling: + (ly:grob-set-property! grob 'Y-offset after) + ; Others get the before value: + (ly:grob-set-property! grob 'Y-offset before) + ) + ) + ) +) + +rf = #(make-dynamic-script "rf") +ffz = #(make-dynamic-script "ffz") +pf = #(make-dynamic-script "pf") +sempp = #(make-dynamic-script (markup #:line( #:with-dimensions '(0 . 0) +'(0 . 0) #:right-align #:normal-text #:italic "sempre" #:dynamic "pp"))) +parenf = #(make-dynamic-script (markup #:line(#:normal-text #:italic #:fontsize 2 "(" #:dynamic "f" #:normal-text #:italic #:fontsize 2 ")"))) +parenp = #(make-dynamic-script (markup #:line(#:normal-text #:italic #:fontsize 2 "(" #:dynamic "p" #:normal-text #:italic #:fontsize 2 ")"))) +pdolce = #(make-dynamic-script (markup #:line(#:dynamic "p" #:with-dimensions '(0 . 0) '(0 . 0) #:normal-text #:italic "dolce"))) +ppdolce = #(make-dynamic-script (markup #:line(#:dynamic "pp" #:with-dimensions '(0 . 0) '(0 . 0) #:normal-text #:italic "dolce"))) +dolce = #(make-dynamic-script (markup #:line(#:normal-text #:italic "dolce"))) +sfpdolce = #(make-dynamic-script (markup #:line(#:dynamic "sfp" #:with-dimensions '(0 . 0) '(0 . 0) #:normal-text #:italic "dolce" ))) +bracketf = #(make-dynamic-script (markup #:line(#:concat(#:normal-text #:fontsize 3 "[" #:dynamic "f" #:hspace 0.1 #:normal-text #:fontsize 3 "]")))) +bracketmf = #(make-dynamic-script (markup #:line(#:concat(#:normal-text #:fontsize 3 "[" #:dynamic "mf" #:hspace 0.1 #:normal-text #:fontsize 3 "]")))) +bracketmp = #(make-dynamic-script (markup #:line(#:concat(#:normal-text #:fontsize 2 "[" #:hspace 0.2 #:dynamic "mp" #:normal-text #:fontsize 2 "]")))) +bracketp = #(make-dynamic-script (markup #:line(#:concat(#:normal-text #:fontsize 2 "[" #:hspace 0.2 #:dynamic "p" #:normal-text #:fontsize 2 "]")))) + +whiteoutp = #(make-dynamic-script (markup #:whiteout #:pad-markup 0.5 #:dynamic "p")) +whiteoutf = #(make-dynamic-script (markup #:whiteout #:pad-markup 0.5 #:dynamic "f")) +whiteoutff = #(make-dynamic-script (markup #:whiteout #:pad-markup 0.5 #:dynamic "ff")) + +sim = ^\markup{\italic "sim."} + +%%% Thanks to "Gilles THIBAULT" , there is a way +% to remove also the fermata from R1-\fermataMarkup: By filtering the music +% and removing the corresponding events. +% Documented as an LSR snippet: http://lsr.dsi.unimi.it/LSR/Item?id=372 +#(define (filterOneEventsMarkup event) +( let ( (eventname (ly:music-property event 'name)) ) + (not + (or ;; add here event name you do NOT want + (eq? eventname 'MultiMeasureTextEvent) + (eq? eventname 'AbsoluteDynamicEvent) + (eq? eventname 'TextScriptEvent) + (eq? eventname 'ArticulationEvent) + (eq? eventname 'CrescendoEvent) + (eq? eventname 'DecrescendoEvent) + ) + ) +)) + +filterArticulations = #(define-music-function (parser location music) (ly:music?) + (music-filter filterOneEventsMarkup music) +) + + + +%%% Add the same articulation to a longer sequence of notes: +#(define (make-script x) + (make-music 'ArticulationEvent + 'articulation-type x)) + +#(define (add-articulation music art) + (map-some-music + (lambda (m) + (cond ((music-is-of-type? m 'event-chord) + (set! (ly:music-property m 'elements) + (append (ly:music-property m 'elements) + (list (make-script art)))) + m) + ((music-is-of-type? m 'note-event) + (set! (ly:music-property m 'articulations) + (append (ly:music-property m 'articulations) + (list (make-script art)))) + m) + (else #f))) + music)) + +addArticulation = #(define-music-function (parser location type music) + (string? ly:music? ) + (add-articulation music type)) + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% Tempo markings +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +rit = \markup {\italic "rit."} +atempo = \markup {\italic "a tempo"} +pocorit = \markup {\italic "poco rit."} +ppmosso = \markup {\italic "poco più mosso"} +pizz = \markup {\italic "pizz."} +arco = \markup {\italic "arco"} +colarco = \markup {\italic "Col' arco"} +perd = \markup {\italic "perdend."} + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% REST COMBINATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +%% REST COMBINING, TAKEN FROM http://lsr.dsi.unimi.it/LSR/Item?id=336 +%% +%% Usage: +%% \new Staff \with { +%% \override RestCollision #'positioning-done = #merge-rests-on-positioning +%% } << \somevoice \\ \othervoice >> +%% or (globally): +%% \layout { +%% \context { +%% \Staff +%% \override RestCollision #'positioning-done = #merge-rests-on-positioning +%% } +%% } +%% +%% Limitations: +%% - only handles two voices +%% - does not handle multi-measure/whole-measure rests + +#(define (rest-score r) + (let ((score 0) + (yoff (ly:grob-property-data r 'Y-offset)) + (sp (ly:grob-property-data r 'staff-position))) + (if (number? yoff) + (set! score (+ score 2)) + (if (eq? yoff 'calculation-in-progress) + (set! score (- score 3)))) + (and (number? sp) + (<= 0 2 sp) + (set! score (+ score 2)) + (set! score (- score (abs (- 1 sp))))) + score)) + +#(define (merge-rests-on-positioning grob) + (let* ((can-merge #f) + (elts (ly:grob-object grob 'elements)) + (num-elts (and (ly:grob-array? elts) + (ly:grob-array-length elts))) + (two-voice? (= num-elts 2))) + (if two-voice? + (let* ((v1-grob (ly:grob-array-ref elts 0)) + (v2-grob (ly:grob-array-ref elts 1)) + (v1-rest (ly:grob-object v1-grob 'rest)) + (v2-rest (ly:grob-object v2-grob 'rest))) + (and + (ly:grob? v1-rest) + (ly:grob? v2-rest) + (let* ((v1-duration-log (ly:grob-property v1-rest 'duration-log)) + (v2-duration-log (ly:grob-property v2-rest 'duration-log)) + (v1-dot (ly:grob-object v1-rest 'dot)) + (v2-dot (ly:grob-object v2-rest 'dot)) + (v1-dot-count (and (ly:grob? v1-dot) + (ly:grob-property v1-dot 'dot-count -1))) + (v2-dot-count (and (ly:grob? v2-dot) + (ly:grob-property v2-dot 'dot-count -1)))) + (set! can-merge + (and + (number? v1-duration-log) + (number? v2-duration-log) + (= v1-duration-log v2-duration-log) + (eq? v1-dot-count v2-dot-count))) + (if can-merge + ;; keep the rest that looks best: + (let* ((keep-v1? (>= (rest-score v1-rest) + (rest-score v2-rest))) + (rest-to-keep (if keep-v1? v1-rest v2-rest)) + (dot-to-kill (if keep-v1? v2-dot v1-dot))) + ;; uncomment if you're curious of which rest was chosen: + ;;(ly:grob-set-property! v1-rest 'color green) + ;;(ly:grob-set-property! v2-rest 'color blue) + (ly:grob-suicide! (if keep-v1? v2-rest v1-rest)) + (if (ly:grob? dot-to-kill) + (ly:grob-suicide! dot-to-kill)) + (ly:grob-set-property! rest-to-keep 'direction 0) + (ly:rest::y-offset-callback rest-to-keep))))))) + (if can-merge + #t + (ly:rest-collision::calc-positioning-done grob)))) + + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% TABLE OF CONTENTS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +contentsTitle = "Inhalt / Contents" + +\paper { + tocTitleMarkup = \markup \fill-line{ + \null + \column { + \override #(cons 'line-width (* 7 cm)) + \line{ \fill-line {\piece-title {\contentsTitle} \null }} + \hspace #1 + } + \null + } + tocItemMarkup = \markup \fill-line { + \null + \column { + \override #(cons 'line-width (* 7 cm )) + \line { \fill-line{\fromproperty #'toc:text \fromproperty #'toc:page }} + } + \null + } +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% TITLE PAGE / HEADER +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +#(define-markup-command (when-property layout props symbol markp) (symbol? markup?) + (if (chain-assoc-get symbol props) + (interpret-markup layout props markp) + (ly:make-stencil '() '(1 . -1) '(1 . -1)))) + +#(define-markup-command (vspace layout props amount) (number?) + "This produces a invisible object taking vertical space." + (let ((amount (* amount 3.0))) + (if (> amount 0) + (ly:make-stencil "" (cons -1 1) (cons 0 amount)) + (ly:make-stencil "" (cons -1 1) (cons amount amount))))) + + + +titlePageMarkup = \markup \abs-fontsize #10 \when-property #'header:title \column { + \vspace #4 + \fill-line { \fontsize #8 \fromproperty #'header:composer } + \vspace #1 + \fill-line { \fontsize #8 \fromproperty #'header:poet } + \vspace #4 + \fill-line { \fontsize #10 \bold \fromproperty #'header:titlepagetitle } + \vspace #1 + \fontsize #2 \when-property #'header:titlepagesubtitle { + \fill-line { \fromproperty #'header:titlepagesubtitle } + \vspace #1 + } + \fill-line { \postscript #"-20 0 moveto 40 0 rlineto stroke" } + \vspace #8 + \fill-line { \fontsize #5 \fromproperty #'header:ensemble } + \vspace #0.02 + \fill-line { \fontsize #2 \fromproperty #'header:instruments } + \vspace #9 + \fill-line { \fontsize #5 \fromproperty #'header:date } + \vspace #1 + \fill-line { \fontsize #5 \fromproperty #'header:scoretype } + \vspace #1 + \when-property #'header:instrument { + \fill-line { \bold \fontsize #6 \rounded-box \fromproperty #'header:instrument } + } + \vspace #7 + \fontsize #2 \when-property #'header:enteredby \override #'(baseline-skip . 3.75) \left-align\center-column { + \fill-line { "Herausgegeben von: / Edited by:"} + \vspace #0. + \fill-line { \fromproperty #'header:enteredby } + } + \fill-line { + \when-property #'header:arrangement \column { + \vspace #8 + \fill-line { \fontsize #3 \fromproperty #'header:arrangement } + } + } + \vspace #6 + \fill-line { \fromproperty #'header:copyright } +} + +titleHeaderMarkup = \markup { + \override #'(baseline-skip . 3.5) + \column { + \fill-line { + \fromproperty #'header:logo + \override #'(baseline-skip . 4.5) \center-column { + \bold \abs-fontsize #18 \fromproperty #'header:title + \bold \abs-fontsize #12 \fromproperty #'header:subtitle + \abs-fontsize #11 \fromproperty #'header:subsubtitle + } + \bold \abs-fontsize #11 \when-property #'header:instrument \rounded-box \fromproperty #'header:instrument + } + \fill-line { + \with-dimensions #'( 0 . 0) #'( 0 . 1 ) \null + } + + \fill-line { + \abs-fontsize #10 \fromproperty #'header:poet + \abs-fontsize #10 \fromproperty #'header:composer + } + \fill-line { + \abs-fontsize #10 \fromproperty #'header:meter + \abs-fontsize #10 \fromproperty #'header:arranger + } + } +} +date = #(strftime "%d-%m-%Y" (localtime (current-time))) +\header { + logo = \date + scorenumber = \markup \concat { \fromproperty #'header:scorenumberbase "-" \fromproperty #'header:instrumentnr } + pdftitle = \markup \line {\concat{\fromproperty #'header:shortcomposer ":"} \concat {\fromproperty #'header:title ","} \fromproperty #'header:instrument \fromproperty #'header:scoretype } +} + + +titleScoreMarkup = \markup \piece-title \fromproperty #'header:piece + +\paper { + scoreTitleMarkup = \titleScoreMarkup + bookTitleMarkup = \titleHeaderMarkup +} + + + +%%%%%%%%%%%%%% headers and footers %%%%%%%%%%%%%%%%%%%%%%%%%% + +#(define (first-score-page layout props arg) + (let* ((label 'first-score-page) + (table (ly:output-def-lookup layout 'label-page-table)) + (label-page (and (list? table) (assoc label table))) + (page-number (and label-page (cdr label-page))) + ) + (if (eq? (chain-assoc-get 'page:page-number props -1) page-number) + (interpret-markup layout props arg) + empty-stencil))) + +#(define no-header-table '(1)) +addNoHeaderPage = #(define-music-function (parser location nr) (number?) + (set! no-header-table (cons nr no-header-table)) + (make-music 'Music 'void #t)) +setNoHeaderPages = #(define-music-function (parser location pages) (list?) + (set! no-header-table pages) + (make-music 'Music 'void #t)) + +#(define (is-header-page layout props arg) + (let* ((page-number (chain-assoc-get 'page:page-number props -1))) + (if (not (member page-number no-header-table)) + (interpret-markup layout props arg) + empty-stencil))) + +#(define no-footer-table '(1)) +addNoFooterPage = #(define-music-function (parser location nr) (number?) + (set! no-footer-table (cons nr no-footer-table)) + (make-music 'Music 'void #t)) +setNoFooterPages = #(define-music-function (parser location pages) (list?) + (set! no-footer-table pages) + (make-music 'Music 'void #t)) + +#(define (is-footer-page layout props arg) + (let* ((page-number (chain-assoc-get 'page:page-number props -1))) + (if (not (member page-number no-footer-table)) + (interpret-markup layout props arg) + empty-stencil))) + +#(define copyright-pages-table '(1)) +addCopyrightPage = #(define-music-function (parser location nr) (number?) + (set! copyright-pages-table (cons nr copyright-pages-table)) + (make-music 'Music 'void #t)) +setCopyrightPages = #(define-music-function (parser location pages) (list?) + (set! copyright-pages-table pages) + (make-music 'Music 'void #t)) + +#(define (is-copyright-page layout props arg) + (let* ((page-number (chain-assoc-get 'page:page-number props -1))) + (if (member page-number copyright-pages-table) + (interpret-markup layout props arg) + empty-stencil))) + + + +\paper { + olyStdOddHeaderMarkup = \markup \fill-line { + %% force the header to take some space, otherwise the + %% page layout becomes a complete mess. + " " + \on-the-fly #is-header-page \fromproperty #'header:title + \on-the-fly #is-header-page \fromproperty #'page:page-number-string + } + olyStdEvenHeaderMarkup = \markup \fill-line { + \on-the-fly #is-header-page \fromproperty #'page:page-number-string + \on-the-fly #is-header-page \fromproperty #'header:composer + " " + } + olyInstrumentOddHeaderMarkup = \markup \fill-line { + " " + \on-the-fly #is-header-page \concat { \fromproperty #'header:instrument } + \on-the-fly #is-header-page \fromproperty #'page:page-number-string + } + olyInstrumentEvenHeaderMarkup = \markup \fill-line { + \on-the-fly #is-header-page \fromproperty #'page:page-number-string + \on-the-fly #is-header-page \concat { \fromproperty #'header:composer ": " \fromproperty #'header:title } + " " + } + oddHeaderMarkup = \olyStdOddHeaderMarkup + evenHeaderMarkup = \olyStdEvenHeaderMarkup + + olyStdOddFooterMarkup = \markup { + \column { + \fill-line { + %% publisher header field only on title page. + \on-the-fly #first-page \fromproperty #'header:publisher + } + \fill-line { + %% copyright on the first real score page + \on-the-fly #is-copyright-page \fromproperty #'header:copyright + \on-the-fly #is-copyright-page \null + } + \fill-line { + %% All other pages get the number of the edition centered + \on-the-fly #is-footer-page \fromproperty #'header:scorenumber + } + } + } + olyInstrumentOddFooterMarkup = \markup { + \column { + \fill-line { + %% copyright on the first real score page + \on-the-fly #is-copyright-page \fromproperty #'header:copyright + \on-the-fly #is-copyright-page \null + } + \fill-line { + %% All other pages get the number of the edition centered + \on-the-fly #is-footer-page \fromproperty #'header:scorenumber + } + } + } + oddFooterMarkup = \olyStdOddFooterMarkup +} + + + + + + + + + + + +% 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. +% +% This function is originally copied from mark-up-title (file scm/titling.scm), +% which is lilypond's internal function to handle the title markups. I needed +% to replace the scopes and manually add the $defaultheader (which is internally +% done in paper-book.cc before calling mark-up-title. Also, I don't extract the +% markup from the header block, but use the given markup. +% +% I'm not sure if I really need the page properties in props, too... But I +% suppose it does not hurt, either. +#(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) + ) +) + + + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% Equally spacing multiple columns (e.g. for translations) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Credits: Nicolas Sceaux on the lilypond-user mailinglist +#(define-markup-command (columns layout props args) (markup-list?) + (let ((line-width (/ (chain-assoc-get 'line-width props + (ly:output-def-lookup layout 'line-width)) + (max (length args) 1)))) + (interpret-markup layout props + (make-line-markup (map (lambda (line) + (markup #:pad-to-box `(0 . ,line-width) '(0 . 0) + #:override `(line-width . ,line-width) + line)) + args))))) + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% SCORE (HEADER / LAYOUT) SETTINGS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +startSlashedGraceMusic = { + \override Flag #'stroke-style = #"grace" +} + +stopSlashedGraceMusic = { + \revert Flag #'stroke-style +} + +slashedGrace = +#(def-grace-function startSlashedGraceMusic stopSlashedGraceMusic + (_i "Create slashed graces (slashes through stems, but no slur)from the following music expression")) + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% SCORE (HEADER / LAYOUT) SETTINGS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\paper { + footnote-separator-markup = \markup { \fill-line { \override #`(span-factor . 1/4) { \draw-hline } \null }} + + left-margin = 2\cm + right-margin = 1.5\cm + line-width = 17.5\cm +% bottom-margin = 1.5\cm + top-margin = 0.7\cm + ragged-right = ##f + ragged-last = ##f + ragged-bottom = ##f + ragged-last-bottom = ##f +} +\layout { + \context { + \ChoirStaff + % If only one non-empty staff in a system exists, still print the backet + \override SystemStartBracket #'collapse-height = #1 + \consists "Instrument_name_engraver" + \consists "Keep_alive_together_engraver" + } + \context { + \StaffGroup + % If only one non-empty staff in a system exists, still print the backet + \override SystemStartBracket #'collapse-height = #1 + \consists "Instrument_name_engraver" + } + \context { + \GrandStaff + \override SystemStartBracket #'collapse-height = #1 + \consists "Instrument_name_engraver" + } + \context { + \FiguredBass + \override VerticalAxisGroup #'padding = #0 + } + \context { + \Score + % Force multi-measure rests to be written as one span + \override MultiMeasureRest #'expand-limit = #3 + skipBars = ##t + autoBeaming = ##f + \override CombineTextScript #'avoid-slur = #'outside + \override DynamicTextSpanner #'style = #'none + \override InstrumentSwitch #'font-size = #-1 + + % Rest collision + \override RestCollision #'positioning-done = #merge-rests-on-positioning + % Auto-Accidentals: Use modern-cautionary style... + extraNatural = ##f + % Accidental rules (the rule giving the most accidentals wins!) + % -) Reset accidentals at each barline -> accs not in key sig will always be printed + % -) Same octave accidentals are remembered for two measures -> cancellation + % -) other octave accidentals are remembered for next measure -> cancellation + autoAccidentals = #`(Staff ,(make-accidental-rule 'same-octave 0) + ,(make-accidental-rule 'any-octave 0) + ,(make-accidental-rule 'any-octave 1) + ,(make-accidental-rule 'same-octave 2)) + % No auto-cautionaries, we always use autoAccidentals! +% autoCautionaries = #`(Staff ,(make-accidental-rule 'any-octave 0) +% ,(make-accidental-rule 'same-octave 1)) + printKeyCancellation = ##t + quotedEventTypes = #'(StreamEvent) + quotedCueEventTypes = #'( + rhythmic-event + tie-event + beam-event + tuplet-span-event + tremolo-event + glissando-event + harmonic-event + repeat-tie-event + articulation-event + slur-event + trill-span-event + tremolo-span-event + ) + implicitBassFigures = #'(0 100) + } + \context { + \Staff + \RemoveEmptyStaves + } +} + + +ts = #(make-music 'TextScriptEvent 'text "t.s." 'direction UP ) +tt = #(make-music 'TextScriptEvent 'text "Tutti" 'direction UP ) +solo = #(make-music 'TextScriptEvent 'text "Solo" 'direction UP ) +tutti = #(make-music 'TextScriptEvent 'text "Tutti" 'direction UP ) +bracketts = #(make-music 'TextScriptEvent 'text "[t.s.]" 'direction UP ) +brackettt = #(make-music 'TextScriptEvent 'text "[Tutti]" 'direction UP ) +bracketsolo = #(make-music 'TextScriptEvent 'text "[Solo]" 'direction UP ) + +sottovoce = #(make-music 'TextScriptEvent 'text "sotto voce" 'direction UP ) + +dashedSlur = -\tweak #'dash-definition #'((0 1 0.4 0.75))( +dashedTie = -\tweak #'dash-definition #'((0 1 0.4 0.75))~ + +divisi = #(define-music-function (parser location vc1 vc2) (ly:music? ly:music?) +#{ + << { \voiceOne $vc1 \oneVoice} \context Voice = "divisi2" { \voiceTwo $vc2 } >> +#} +) + +#(define twoVoice divisi) + +#(define-public (bracket-stencils grob) + (let ((lp (grob-interpret-markup grob (markup #:fontsize 3.5 #:translate (cons -0.3 -0.5) "["))) + (rp (grob-interpret-markup grob (markup #:fontsize 3.5 #:translate (cons -0.3 -0.5) "]")))) + (list lp rp))) + +bracketify = #(define-music-function (parser loc arg) (ly:music?) + (_i "Tag @var{arg} to be parenthesized.") +#{ + \once \override ParenthesesItem #'stencils = #bracket-stencils + \parenthesize $arg +#}) + + + +#(define-markup-command (hat layout props arg) (markup?) + "Draw a hat above the given string @var{arg}." + (interpret-markup layout props (markup #:combine #:raise 1.5 "^" arg))) + + + +smallFlageolet = +#(let ((m (make-music 'ArticulationEvent + 'articulation-type "flageolet"))) + (ly:music-set-property! m 'tweaks + (acons 'font-size -2 + (ly:music-property m 'tweaks))) + m) + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% LICENSE TEXTS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +LicenseCCBYPlain = \markup {Creative Commons BY \with-url #"http://creativecommons.org/licenses/by/3.0/at/" {\translate #'(0 . -0.7) \epsfile #Y #3 #"orchestrallily/cc-by.eps" }} +LicenseCCBY = \markup {Lizensiert unter / Licensed under: Creative Commons BY \with-url #"http://creativecommons.org/licenses/by/3.0/at/" {\translate #'(0 . -0.7) \epsfile #Y #3 #"orchestrallily/cc-by.eps" }} +LicenseCCBYNC = \markup {Lizensiert unter / Licensed under: Creative Commons BY-NC \with-url #"http://creativecommons.org/licenses/by-nc/3.0/at/" {\translate #'(0 . -0.7) \epsfile #Y #3 #"orchestrallily/cc-by-nc.eps" }} +LicenseNoRestrictions = \markup{\line {Die Ausgabe darf kopiert und ohne Einschränkungen aufgeführt werden. / May be copied and performed without restriction.}} + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% VARIOUS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +startUnremovableSection = \set Staff.keepAliveInterfaces = + #'(rhythmic-grob-interface + rest-interface + lyric-interface + percent-repeat-item-interface + percent-repeat-interface + stanza-number-interface) + +endUnremovableSection = \unset Staff.keepAliveInterfaces + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% EDITORIAL ANNOTATIONS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +#(define-public (editorial-bracket-stencil stil padding widen) +"Add brackets for editorial annoations around STIL, producing a new stencil." +(let* ((axis Y) + (other-axis (lambda (a) (remainder (+ a 1) 2))) + (ext (interval-widen (ly:stencil-extent stil axis) widen)) + (thick 0.15) + (protrusion 0.3) + (lb (ly:bracket axis ext thick protrusion)) + (rb (ly:bracket axis ext thick (- protrusion)))) + (set! stil (ly:stencil-combine-at-edge stil (other-axis axis) 1 rb padding)) + (set! stil + (ly:stencil-combine-at-edge lb (other-axis axis) 1 stil padding)) + stil)) + +editorialHairpin = \once \override Hairpin #'stencil = #(lambda (grob) (editorial-bracket-stencil (ly:hairpin::print grob) 0.2 0.55)) +editorialDynamic = \once \override DynamicText #'stencil = #(lambda (grob) (editorial-bracket-stencil (ly:text-interface::print grob) 0.2 0.55)) +editorialMarkup = \once \override TextScript #'stencil = #(lambda (grob) (editorial-bracket-stencil (ly:text-interface::print grob) 0.2 0.55)) + +% videStart = \mark \markup { \hspace #1 \musicglyph #"scripts.coda" \with-dimensions #'(0 . 0) #'(0 . 0) \left-align { vi-} } +videStart = \mark \markup \halign #-2.3 \concat { \hspace #4.5 \musicglyph #"scripts.coda" \left-align { vi- } } +% videEnd = \notemode { +% \once \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible +% \mark \markup \concat{ \with-dimensions #'(0 . 0) #'(0 . 0) \right-align { -de } \hspace #1 \musicglyph #"scripts.coda" } +%} +videEnd = \notemode { + \once \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible + \mark \markup \concat{ \right-align { -de } \hspace #1.5 \musicglyph #"scripts.coda" \hspace #4.2 } +} + + + +\layout { + \context {\Staff + soloText = #"I" + soloIIText = #"II" + aDueText = #"a2" + } +} + +\paper { +% annotate-spacing = ##t + ragged-bottom = ##f + ragged-last = ##f + ragged-last-bottom = ##f + + top-markup-spacing #'minimum-distance = #5 +% top-markup-spacing #'basic-distance = #4 +% top-markup-spacing #'padding = #2 + top-markup-spacing #'stretchability = #15 + + top-system-spacing #'minimum-distance = #0 +% top-system-spacing #'basic-distance = #3 + top-system-spacing #'padding = #2 + top-system-spacing #'stretchability = #13 + + markup-system-spacing #'minimum-distance = #5 +% markup-system-spacing #'basic-distance = #4 + markup-system-spacing #'padding = #3 + markup-system-spacing #'stretchability = #25 + + system-system-spacing #'minimum-distance = #0 +% system-system-spacing #'basic-distance = #5 + system-system-spacing #'padding = #2 + system-system-spacing #'stretchability = #15 + + last-bottom-spacing #'basic-distance = #3 +% last-bottom-spacing #'basic-distance = #7 + last-bottom-spacing #'padding = #4 + last-bottom-spacing #'stretchability = #14 + +% score-markup-spacing #'basic-distance = #5 +% score-markup-spacing #'stretchability = #15 + +% markup-markup-spacing #'basic-distance = #5 +% markup-markup-spacing #'stretchability = #30 +} + +\layout { + \context { \PianoStaff + \override StaffGrouper #'staff-staff-spacing #'stretchability = #1.5 + } + \context { \StaffGroup + \override StaffGrouper #'staff-staff-spacing #'stretchability = #2.5 + \override SystemStartBracket #'collapse-height = #1 + } + \context { \GrandStaff + \override StaffGrouper #'staff-staff-spacing #'stretchability = #3 + \override StaffGrouper #'staffgroup-staff-spacing #'stretchability = #3 + } + \context { \ChoirStaff + \override StaffGrouper #'staff-staff-spacing #'stretchability = #1 + } + \context { \Staff + \override StaffGrouper #'staff-staff-spacing #'stretchability = #4.9 + } + \context { \Score + \override StaffGrouper #'staff-staff-spacing #'stretchability = #5 + } +} + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% WORKAROUNDS! +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% _ does not work as a direction modifier in figured bass +tsdown = #(make-music 'TextScriptEvent 'text "t.s." 'direction DOWN ) diff --git a/sheet-music_tinwhistle.lytex b/sheet-music_tinwhistle.lytex new file mode 100644 index 0000000..9c16680 --- /dev/null +++ b/sheet-music_tinwhistle.lytex @@ -0,0 +1,125 @@ +\documentclass[12pt, a4paper, openany]{scrbook} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{graphicx} +\usepackage{fancyhdr} +\usepackage{geometry} +\geometry{a4paper,left=20mm,right=20mm, top=3cm, bottom=3cm} + +\input{headfoot.tex} + +\begin{document} + \widowpenalties 1 10000 + \raggedbottom + \pagenumbering{roman} + + \input{title.tex} + + \tableofcontents + + \clearpage + \pagenumbering{arabic} + + \chapter{All for me Grog} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/AllForMeGrog.ly} + ~\\ + \input{lyrics/AllForMeGrog.tex} + + \chapter{Auld lang syne} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/AuldLangSyne.ly} + ~\\ + \input{lyrics/AuldLangSyne.tex} + + \chapter{Black Velvet band} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/BlackVelvetBand.ly} + ~\\ + \input{lyrics/BlackVelvetBand.tex} + + \chapter {Drunken Sailor} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/DrunkenSailor.ly} + ~\\ + \input{lyrics/DrunkenSailor.tex} + + \chapter{The Foggy Dew} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/FoggyDew.ly} + ~\\ + \input{lyrics/FoggyDew.tex} + + \chapter{I'm a Rover seldom Sober} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/ImARoverSeldomSober.ly} + ~\\ + \input{lyrics/ImARoverSeldomSober.tex} + + \chapter{Johnny I hardly knew ye} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/JohnnyIHardlyKnewYe.ly} + ~\\ + \input{lyrics/JohnnyIHardlyKnewYe.tex} + + \chapter{MacPherson's Farewell} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/MacPhersonsFarewell.ly} + ~\\ + \input{lyrics/MacPhersonsFarewell.tex} + + \chapter{Molly Malone} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/MollyMalone.ly} + ~\\ + \input{lyrics/MollyMalone.tex} + + \chapter{Muirsheen Durkin} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/MuirsheenDurkin.ly} + ~\\ + \input{lyrics/MuirsheenDurkin.tex} + + \chapter {A Nation once again} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/NationOnceAgain.ly} + ~\\ + \input{lyrics/NationOnceAgain.tex} + + \chapter{The parting Glass} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/PartingGlass.ly} + ~\\ + \input{lyrics/PartingGlass.tex} + + \chapter {The Rising of the Moon} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/RisingOfTheMoon.ly} + ~\\ + \input{lyrics/RisingOfTheMoon.tex} + + \chapter{The Star of the County Down} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/StarOfTheCountyDown.ly} + ~\\ + \input{lyrics/StarOfTheCountyDown.tex} + + \chapter{Tim Finnegan's Wake} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/TimFinnegansWake.ly} + ~\\ + \input{lyrics/TimFinnegansWake.tex} + + \chapter{Whiskey in the Jar} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/WhiskeyInTheJar.ly} + ~\\ + \input{lyrics/WhiskeyInTheJar.tex} + + \chapter{The Wild Rover} + \thispagestyle{fancy} + \lilypondfile[staffsize=14]{notes/WildRover.ly} + ~\\ + \input{lyrics/WildRover.tex} + +\end{document} diff --git a/title.tex b/title.tex new file mode 100644 index 0000000..7b421c4 --- /dev/null +++ b/title.tex @@ -0,0 +1,31 @@ +\begin{titlepage} + + \begin{center} + + \rule{\linewidth}{0.5mm} \\[0.4cm] + { \huge \bfseries Songs for you} + + \rule{\linewidth}{0.5mm} \\[1.5cm] + + \begin{minipage}{0.4\textwidth} + \begin{flushleft} \large + \emph{Compiled by}\\ + \textsc{Sebastian Hugentobler} + \end{flushleft} + \end{minipage} + \begin{minipage}{0.4\textwidth} + \begin{flushright} \large + \emph{Last edited:} \\ + \textsc{\today} + \end{flushright} + \end{minipage} + \vfill + + \textbf{Creative Commons BY-SA 3.0 Switzerland License} + http://creativecommons.org/licenses/by-sa/3.0/ch/ \\ + ~\\ + \includegraphics[width=0.20\textwidth]{images/by-sa.png}\\[1cm] + + \end{center} + +\end{titlepage}