3 Mudela - GNU LilyPond input format 0.1
7 This document describes the the GNU LilyPond input format, which is an
8 effective language for defining music. We call this language
9 (rather arrogantly) The Musical Definition Language (S<Mudela 0.1>).
11 The first aim of Mudela is to define a piece of music,
12 being complete from both from a musical typesetting,
13 as from a musical performing point of view.
18 The Musical Definition Language (Mudela) S<version 2>, has a logical
19 structure, making use of typing and naming (using identifiers), that
20 allows for flexible input, and definition reuse. See MANIFESTO for
21 reasons and design considerations.
23 The below included for explanatory purposes only (i.e., for a complete
24 and up-to-date definition, see F<lily/parser.y> and F<lily/lexer.l>):
26 As a related note, you should take a look at the examples and the init
27 file, as this document does not cover every aspect of mudela yet, and
32 The de-facto extension of Mudela is F<.ly>. Files may be included by
33 entering C<include> at the start of a line:
39 Line comments are introduced by a C<%>. Block comments are delimited
40 by C<%{> and C<%}>. They do not nest.
44 Occasionally, small changes in syntax across different versions of
45 Mudela might give syntax errors. To warn you about possible
46 incompatibilities, you can specify the Mudela version for which the
47 inputfile was written,
51 A perl-script which tries to convert to newer versions
52 (F<convert-mudela>) is included in the LilyPond distribution.
56 Keywords are preceded by a backslash "\". They contain alphabetic
59 Identifiers in their normal form consist start with a alpha character,
60 followed by alpha-numerics. Identifiers can contain any characters
61 (except whitespace, C<$> and C<%>), if you use this construct:
63 $i'm_a_weird###identifier
65 (which is the identifier with the name
66 C<i'm_a_weird###identifier> ). C<$> Takes any sequence of
67 characters which are not whitespace, C<$> and C<%>.
69 \$i'm_a_weird###escaped_word
71 =head2 Nesting characters
73 Mudela uses the brace (C<{> and C<}>) for hierarchical structures. To
74 aid the eye in reading, for chords the < and the > are used as
79 =head2 Hierarchical structures
81 The general structure consists of declarations:
89 \TYPE{ <type specific data> }
91 (Currently, C<\score> is the only type that can be instantiated
92 at top level. Currently declarations can only be done at top level)
94 Most instantiations that use an IDENTIFIER are specified as follows:
96 \TYPE{ IDENTIFIER [...] }
98 Some exceptions on this rule have been made to prevent inputting
99 Mudela becoming tedious
104 The actual musical part of Mudela that defines a melody, is known as
107 Simple mudela is the most common type of music. It consists of a list
108 of notes or lyrics, chords, and commands.
112 To simplify different aspects of music definition (entering the notes
113 and manipulating them) Mudela has a number of different input "modes":
119 At the start of parsing, Mudela assumes normal mode.
120 In Normal mode, a word is looked up in the following order:
122 word identifier, string
123 \word keyword, identifier, string
125 In normalmode, a word is assumed to start with an alphabetic
126 character, followed by alpha-numeric characters.
130 Note mode (and thus Simple mudela) is introduced by the keyword C<\melodic>.
131 In Note mode, a word is looked up in the following order:
133 word notename, string
134 \word keyword, identifier, string
136 In Note mode a word is considered to have alphabetic characters only.
140 Lyrics mode (and thus Simple mudela) is introduced by the keyword C<\lyrics>.
142 In Lyrics mode, a word is looked up in the following order:
145 \word keyword, identifier, string
147 In Lyric mode every sequence of non-digit and non-white characters
148 starting with an alphabetic character or the '_'is considered a word.
150 a&@&@&TSI|{[ % a word
151 1THtrhortho % not a "word"
152 Leise Fl\"u\ss{}teren meine Sapfe % 4 words
153 _ _ _ _ % 4 words: 4 spaces
157 These modes are of a lexical nature. Normal and Note mode largely
158 resemble each other, save the possibility of entering Reals,
159 meaning of C<_> and the resolution of words
163 Simple mudela basically is a sequence of the notes you want to
168 is a A-1 pitched quaver. The ' signifies an octave change. A-1 is 440
169 Hz concert-pitch. C<c'> is also known as the central c. More examples:
180 This is an A flat, (just below 110 Hz concert-pitch). The C<*2/3>
181 signifies that this note is part of a triplet (3 in stead of 2). The
182 duration is one and a half quaver (C<4.>) times 2/3.
185 Notenames are just a special kind of identifiers, and can be declared
186 for any language appropriate (see F<dutch.ini>). The default language
187 for notenames is defined to be dutch. In dutch, the notenames are
188 a,b,c,d,e,f and g. Sharps are formed by adding the extension "is",
192 cisis disis eisis fisis gisis aisis bisis
194 cis dis eis fis gis ais bis
198 ces des es fes ges as bes
200 ceses deses eses feses geses ases beses
202 The standard notenames also have uppercase versions, which octavate
205 a % 220 concert-pitch
211 Rests are named r or s
214 s % a "space" rest, nothing is printed.
216 These notenames along with duration are enough material to construct
222 Music is able to express more. generally speaking, the other
223 'features' are either connected between notes (slurs, beams: spanning
224 requests) or attached to notes (eg. accents). The former are
225 implemented as START and STOP stop features and then attached to the note.
235 Please note that these two characters do I<not> necessarrily nest,
236 they should attached to the note C<[ {c4 c4} ]> will generate a parse
237 error for this reason.
239 [c8 e8(] [)g8 <c'8] e'8>
241 [c8 c8 c8]2/3 % a triplet
243 Symbols which can be put at either side (above or below) of a staff
244 are entered as follows:
246 a-^ % marcato, direction: default
247 a^- % portato, direction: above note
248 a_. % staccato, direction: below note
249 a^\script { "symbolindex" . . . } % see script.ini for details.
250 a^\fermata % predefined identifier
252 Dynamics can be put after the notename:
254 a4 \dynamic { 0 } % 0 = fff, 7 = ppp
256 Mudela defines the following dynamic identifiers:
258 ppp pp p mp mf df ff fff % df iso f, f is a notename.
260 and the following abbreviations:
263 \> % start decrescendo
264 \! % end crescendo/decrescendo
268 To accompany a note with a text (eg, "marcato"), you should say:
274 the c- construct chooses the default up/down direction.
281 If omit the duration of a, a default value is substituted. For this
282 default value, there are two modes:
288 Use the last duration explicitly entered
292 Use the explicitly set "default duration"
296 Thus the following inputs are equivalent
298 c4 c4 c16 c16 c16 s16 c4 c16
301 c4 c c16 c c c c4 c16
304 c c c16 c16 c16 c16 c c16
309 If you are typing music which does not lie in the "small" and "large"
310 octave, you can prevent having to type C<'> all the time by using the
311 C<\octave> command: These two lines have the same pitch.
316 By default the setting of C<\octave> is 0.
320 Lyrics in Mudela resemble Simple mudela a lot, with notes substituted
323 All syllables are entered separately, separated by whitespace
325 Twin-4 kle4 twin-4 kle4 ...
327 Two syllables or words that compose a single
328 duration entry are bound together using an underscore
332 =head2 Music direction
334 Mudela reads left to right, but you can still stack voices and
335 Voice_elements which are produced in two directions: horizontal
336 (voice like) and vertical (chord like)
338 A sequence of notes (horizontal) is called simple horizontal, eg
343 You can also glue two pieces of simple horizontal music together with the
344 concatenation operator:
346 horOne = \melodic { c c g g }
347 horTwo = \melodic { a a g2 }
348 twinkle = \melodic { \horOne ++ \horTwo }
350 If you enclose simple horizontal music in braces ( { } ), then you get
353 { c c g g a a g2 } % twinkle twinkle
355 You can start vertical music (a "chord") by enclosing a sequence of
356 notes with < and >. Example:
358 <a cis e'> % a-major chord
360 You can also put vertical music inside horizontal music:
362 { c <c e> <c e g> <c e g c'> } % 4 increasing chords
368 {r2 r2 c c g g a a g2} > % a canon
370 The duration of a chord equals the union of the durations of each of
371 its elements. The C<\multivoice> is a construct which is explained
377 You can transpose horizontal music in the following way:
384 d % from c to the d that's one octave down
385 { e4 f4 } % the horizontal music
389 The result is, as you can see, again simple horizontal music.
394 If more than one "voice" is in a staff, then you have the option of
395 putting the different voices into so called voicegroups: members of
396 the same voicegroup share certain characteristics, among others:
403 For the actual list, see the init file F<register.ini>
405 Putting different musical lines in to the same voicegroup effectively
406 makes LilyPond try to form chords of all those lines. Putting
407 different musical lines in to different voicegroups effectively makes
408 LilyPond try to set those lines as independently as possible.
410 You can set the voicegroup of a voice with the command C<\group>, e.g.,
420 oboeII = \melodic { \group "oboes";
428 melodicregs \melodic{ oboeI }
432 In this example, the two oboe voices share one staff and are initially
433 in the voicegroup called "oboes". They will share beams, dynamics etc.
434 After two quavers, oboeI "pushes" its group: a new voicegroup is
435 created, called "oboes+solo". The C<\group "-"> command makes the
436 voice enter "oboes" again.
438 Please do note that [] are voicegroup wide; the previous input is
439 valid: the beam, started in oboeI, voicegroup "oboes" is also ended in
440 voicegroup "oboes", albeit not in oboeI but oboeII
442 This concept may seem contorted, but it allows you to set the separate
443 oboe parts without changing the C<oboeI> and C<oboeII> (assuming that
444 you edit the [] in the example.)
448 < { .... } {......} >
450 makes a chord (all horizontal parts are in the same voicegroup). The construct
452 < \multivoice { ....} { .... } >
454 creates horizontal parts which behave independently. You will have to
455 set voicegroup features by hand (\stem and \hshift. See examples)
462 Rhythms in Mudela are entered identical to Simple mudela.
463 The melodic part of the information is ignored.
467 A duration always starts with the duration type (1,2,4 etc), and then
468 any optional multipliers/dots
470 =head2 Meters/groupings
472 A meter has this form:
476 Rhythmic grouping is a concept closely associated with this. For
477 example, in a 5/8 meter, the counts are grouped 2+3. In mudela this is
482 You can start the piece with a partial measure, the command takes the
483 same syntax as grouping:
487 Make the piece start with a partial measure [transl?] lasting 1 3/4
490 These commands are also "voice elements", and constitute simple mudela
491 (consisting of stuff with duration 0).
495 In concrete, a piece of Mudela has the following structure:
497 % declare pieces of music:
498 melody = \music{ <simple mudela> }
499 accompany = \music{ <simple mudela> }
501 % instantiate (=create tex, midi output) the score:
503 \staff{ melodicregs melody }
504 \staff{ melodicregs accompany }
505 \midi{ <midi definitions> }
506 \paper{ <paper and layout definitions> }
511 Examples are included with the GNU LilyPond distribution. For the sake of
512 maintenance no long examples are included in this document.
517 This chapter deals with the internals of Mudela. In the end Mudela
518 converted to Voice, which contain Voice_elements which (in turn)
519 contain Requests. The former 2 types are basically containers (lists).
520 Consider the following simple mudela
522 \music { c4 <e4 g4> }
524 After the parsing, this is converted to: (from the debug output)
527 voice_element { dur :1/4
528 Stem_req {duration { 4}}
529 Note_req {notename: 0 acc: 0 oct: -1
533 voice_element { dur :0
534 Terminate_voice_req {}
539 voice_element { dur :1/4
540 Stem_req {duration { 4}}
541 Note_req {notename: 2 acc: 0 oct: -1
545 voice_element { dur :0
546 Terminate_voice_req {}
551 voice_element { dur :1/4
552 Stem_req {duration { 4}}
553 Note_req {notename: 4 acc: 0 oct: -1
557 voice_element { dur :0
558 Terminate_voice_req {}
565 As you can see, most information is stored in the form of a request.
566 In music typesetting, the user might want to cram a lot more symbols
567 on the paper than actually fits. To reflect this idea (the user asks
568 more than we can do), the container for this data is called Request.
570 A request is done to the C<Staff> which contains the
571 C<Voice_element>. The staff decides whether to to honor the request,
572 ignore it, or merge it with other requests. Merging of requests is
573 preferably done with other requests done by members of the same
574 voicegroups (beams, brackets, stems)
578 The staff is a simple container (containing Voices). The so-called
579 "registers" determine the characteristics of the Staff. At this time,
580 LilyPond supports the following personalities:
586 This makes the staff into a single five line melodic staff.
590 This makes the staff into a staff which will only set Lyric_requests.
598 This language has a number of roots. First and foremost, GNU LilyPond's
599 predecessor mpp was the inspiration of simple Mudela. Secondly, the
600 hierarchical structure looks a lot like Rayce's (Rayce is a raytracer
601 that I've written as a hobby project. ), which in turn owes a lot to
604 Now, we know, musictypesetting and raytracing do not necessarily
605 require the same input format, and we know that a lot more ways exist
606 to convert music to ASCII, but we did give this language some
607 thoughts. As always suggestions are appreciated.