Difference between revisions of "LilyPond"

From Wiki
Jump to navigation Jump to search
(Updated page to reflect the existence of t-lilypond.tex)
(hint about lyrics/UTF-8; workarounds)
Line 11: Line 11:
 
</texcode>
 
</texcode>
 
* If you want, you can change the default settings using <cmd>setuplilypond</cmd>
 
* If you want, you can change the default settings using <cmd>setuplilypond</cmd>
 +
* If you need lyrics with accented characters (e.g. umlauts), you '''must''' typeset in UTF-8 encoding (see [[Encodings_and_Regimes]]), because LilyPond doesn't understand anything else. And you need to use UTF-8 without BOM, because ConTeXt doesn't understand that.
  
 
== Snippets ==
 
== Snippets ==
Line 68: Line 69:
 
* tell lilypond how much space is left on the first page
 
* tell lilypond how much space is left on the first page
 
* check and probably work on proper multi-page music
 
* check and probably work on proper multi-page music
 +
* LilyPond variables
  
 
LilyPond uses fontconfig for font search. At least on MacOS X it's very restricted what kind of fonts it can use - only single-style TrueType (including dfont). I didn't manage yet to use fonts from the TeX tree. (That doesn't seem to be fontconfig's fault - it writes appropriate font cache files everywhere.)
 
LilyPond uses fontconfig for font search. At least on MacOS X it's very restricted what kind of fonts it can use - only single-style TrueType (including dfont). I didn't manage yet to use fonts from the TeX tree. (That doesn't seem to be fontconfig's fault - it writes appropriate font cache files everywhere.)
Line 75: Line 77:
 
* How do we handle version/syntax changes of LilyPond?
 
* How do we handle version/syntax changes of LilyPond?
  
--[[User:Hraban|Hraban]] 2005-08-20, lots of changes by [[User:ChristopherCreutzig|Christopher Creutzig]] 2005-09-21
+
--[[User:ChristopherCreutzig|Christopher Creutzig]] after ideas by [[User:Hraban|Hraban]]
  
 
== Workarounds ==
 
== Workarounds ==
 +
 +
=== LilyPond is not found ===
  
 
Calling lilypond from command line in Windows fails. (Seems like a bug in lilypond.)
 
Calling lilypond from command line in Windows fails. (Seems like a bug in lilypond.)
Line 85: Line 89:
 
* place a <code>lilypond.bat</code> somewhere in your search path, calling
 
* place a <code>lilypond.bat</code> somewhere in your search path, calling
 
  c:/prog/lilypond/usr/bin/lilypond %1 %2 %3 %4 %5 %6 %7 %8 %9
 
  c:/prog/lilypond/usr/bin/lilypond %1 %2 %3 %4 %5 %6 %7 %8 %9
 +
 +
Calling lilypond from ConTeXt via shell exit (write18) in MacOS X also fails, even if the shell's path is right. (Seems more like write18 wouldn't use the environment.) Modify the module (try <tt>which lilypond</tt> to get its path).
 +
 +
=== LilyPond stops with an 'Unbound variable' error ===
 +
 +
The [http://modules.contextgarden.net/t-lilypond LilyPond module] as of 2005-09-12 uses deprecated syntax in its header; replace "ly:parser-print-score" with "print-score-with-defaults" and "ly:music-scorify" with "scorify-music". Maybe this is only an issue with LilyPond 2.7
  
 
[[Category:Modules]]
 
[[Category:Modules]]
 
[[Category:Music]]
 
[[Category:Music]]
 
[[Category:Requests]]
 
[[Category:Requests]]

Revision as of 16:20, 27 December 2005

< Graphics | Using Graphics >

LilyPond is a great music engraver, and you can include LilyPond in ConTeXt source using the lilypond module.

Setup

  • First you need a working LilyPond installation plus dependencies like GhostScript.
  • Include the lilypond module
\usemodule[lilypond]
  • If you want, you can change the default settings using \setuplilypond
  • If you need lyrics with accented characters (e.g. umlauts), you must typeset in UTF-8 encoding (see Encodings_and_Regimes), because LilyPond doesn't understand anything else. And you need to use UTF-8 without BOM, because ConTeXt doesn't understand that.

Snippets

There are some notes \lilypond{ \relative{bes a c b} } embedded in this line.

Sections

E.g. for a songbook you want to place big chunks of LilyPond output (i.e. note staffs) in your text. It behaves like any other graphics, especially similar to embedded MetaPost code:

\section{A Tune}

\startlilypond
\relative {
	\repeat volta 2 {
		\partial 4 e4 |
		a2 c4 d |
		e2 f4 e |
		d2. c4 |
		b4. c8 d4 e |
		a,2 c4 d |
		e2 f4 e |
		g,2 a |
		\partial 2. b2. |
	}
	\repeat volta 2 {
		\partial 4 r4 |
		f' g f d |
		e f e c |
		a b c d |
		e2. e4 |
		f g f8 e d4 |
		e f e c |
		a c b8 a g4 |
	}
	\alternative {
		{ \partial 2. g2. }
		{ \partial 2. a2. }
	}
}
\stoplilypond

There's nothing to say about this tune yet; my friend heard it from Lúnasa.

Developer's Corner

For information how the integration works, please check the module code and its pdf version (both available from [1]). Unlike lilypond-book for LaTeX, the module does not use a precompiling step and thus can react to local width changes and the like, even if the lilypond code is stored in a buffer.

Things that have not been implemented yet include:

  • set the text font (default should be ConTeXt's bodyfont instead of LilyPond's)
  • make lilypond call back on ConTeXt for included TeX (cf. [2])
  • get information from lilypond about the baseline, for run-in music fragments
  • tell lilypond how much space is left on the first page
  • check and probably work on proper multi-page music
  • LilyPond variables

LilyPond uses fontconfig for font search. At least on MacOS X it's very restricted what kind of fonts it can use - only single-style TrueType (including dfont). I didn't manage yet to use fonts from the TeX tree. (That doesn't seem to be fontconfig's fault - it writes appropriate font cache files everywhere.)

To remember:

  • see LilyPond Docs!
  • How do we handle version/syntax changes of LilyPond?

--Christopher Creutzig after ideas by Hraban

Workarounds

LilyPond is not found

Calling lilypond from command line in Windows fails. (Seems like a bug in lilypond.)

You have two options:

  • modify the module, so that lilypond is called with the whole path (C:/prog/lilypond/usr/bin/lilypond for example instead of lilypond alone).
  • place a lilypond.bat somewhere in your search path, calling
c:/prog/lilypond/usr/bin/lilypond %1 %2 %3 %4 %5 %6 %7 %8 %9

Calling lilypond from ConTeXt via shell exit (write18) in MacOS X also fails, even if the shell's path is right. (Seems more like write18 wouldn't use the environment.) Modify the module (try which lilypond to get its path).

LilyPond stops with an 'Unbound variable' error

The LilyPond module as of 2005-09-12 uses deprecated syntax in its header; replace "ly:parser-print-score" with "print-score-with-defaults" and "ly:music-scorify" with "scorify-music". Maybe this is only an issue with LilyPond 2.7