]> git.donarmstrong.com Git - lilypond.git/blob - scm/music-types.scm
release commit
[lilypond.git] / scm / music-types.scm
1
2 (define-public music-descriptions
3   `(
4     (AbortEvent
5      . (
6    (description .  "End the currently running spanners.")
7         (internal-class-name . "Event")
8         (span-type . "abort")
9         (types . (general-music event abort-event))
10         ))
11     (AbsoluteDynamicEvent
12      . (
13    (description . "Creates a dynamic mark.  Syntax: @var{note}@code{\\x},
14 where x is one of \@\{\\ppp, \\pp, \\p, \\mp, \\mf, \\f, \\ff, \\fff.\@\}")
15         (internal-class-name . "Event")
16         (types . (general-music event dynamic-event absolute-dynamic-event))
17         ))
18     (ArpeggioEvent 
19      . (
20         (description .  "Make an arpeggio on this note. Syntax:
21 @var{note}-@code{\\arpeggio}")
22         (internal-class-name .  "Event")
23         (types . (general-music arpeggio-event event))
24         ))
25
26     ;; todo: use articulation-event for slur as well.
27     ;; separate non articulation scripts  
28     (ArticulationEvent
29      . (
30    (description .  "Adds an articulation marking to a note.  Syntax:
31 @var{note}@code{X}@code{Y}, where X is a direction (up @code{^}, down
32 @code{_}, or Lilypond's choice (no direction specified)), and where Y
33 is an articulation (such as @code{-.}, @code{->}, @code{\\tenuto},
34 @code{\\downbow}).  See the user manual for details.")
35
36         (internal-class-name . "Event")
37         (types . (general-music event articulation-event script-event))
38         )) 
39     (AutoChangeMusic
40      . (
41         (description .  "")
42
43         (internal-class-name . "Music_wrapper")
44         (iterator-ctor . ,Auto_change_iterator::constructor)
45         (types . (general-music music-wrapper-music auto-change-instruction))
46         ))
47     (BarCheck
48      . (
49         (description .  "")
50         (internal-class-name . "Music")
51         (types . (general-music bar-check))
52         (iterator-ctor . ,Bar_check_iterator::constructor)
53         ))
54     (BassFigureEvent
55      . (
56         (description .  "")
57
58         (internal-class-name . "Event")
59         (types . (general-music event rhythmic-event bass-figure-event))
60         ))
61     (BeamEvent
62      . (
63    (description .  "Starts or stops a beam.  Syntax for manual control:
64 \[c8 c c\] c8")
65
66         (internal-class-name . "Event")
67         (types . (general-music event beam-event span-event))
68         ))
69     (BreakEvent
70      . (
71    (description .  "Creates a line break.  Syntax: \\break.")
72
73         (internal-class-name . "Event")
74         (types . (general-music break-event event))
75         ))
76     (BreathingSignEvent
77      . (
78    (description .  "Creates a `breath mark' or `comma'.  Syntax:
79 @var{note}\\breathe.")
80
81         (internal-class-name . "Event")
82         (types . (general-music event breathing-event))
83         )) 
84     (BusyPlayingEvent
85      . (
86         (description .  "")
87
88         (internal-class-name . "Event")
89         (types . (general-music event busy-playing-event))
90         )) 
91     (ContextSpeccedMusic
92      . (
93         (description .  "")
94         (iterator-ctor . ,Context_specced_music_iterator::constructor)
95         (internal-class-name . "Music_wrapper")
96         (types . (context-specification general-music music-wrapper-music))
97         ))
98     (CrescendoEvent
99      . (
100    (description .  "Begins or ends a crescendo.  Syntax: @var{note}\\cr
101 ... @var{note}\\rc (you can also use \\<, \\!, \\cresc, and
102 \\endcresc.  See the user manual for details.).")
103
104         (internal-class-name . "Event")
105         (types . (general-music dynamic-event crescendo-event event))
106         )) 
107     (DecrescendoEvent
108      . (
109         (description .  "")
110
111         (internal-class-name . "Event")
112         (types . (general-music dynamic-event decrescendo-event event))
113         ))
114  
115     (ExtenderEvent
116      . (
117         (description .  "")
118
119         (internal-class-name . "Event")
120         (types . (general-music extender-event event))
121         ))   
122     (GlissandoEvent
123      . (
124         (description .  "")
125
126         (internal-class-name . "Event")
127         (types . (general-music glissando-event event))
128         )) 
129     (GraceMusic
130      . (
131         (description .  "")
132
133         (internal-class-name . "Grace_music")
134         (iterator-ctor . ,Grace_iterator::constructor)
135         (types . (grace-music music-wrapper-music general-music))
136         ))
137     (NoteGroupingEvent
138      . (
139         (description . "Start or stop grouping brackets.")
140         (internal-class-name . "Event")
141         (types . (general-music event note-grouping-event))
142         ))
143     (HyphenEvent
144      . (
145         (description .  "")
146
147         (internal-class-name . "Event")
148         (types . (general-music hyphen-event event))
149         ))   
150     (KeyChangeEvent
151      . (
152         (description .  "")
153
154         (internal-class-name . "Key_change_req")
155         (types . (general-music key-change-event event))
156         )) 
157     (LyricCombineMusic
158      . (
159         (description .  "")
160
161         (internal-class-name . "Lyric_combine_music")
162         (types . (general-music lyric-combine-music))
163         (iterator-ctor . ,Lyric_combine_music_iterator::constructor)
164         ))
165
166     (LyricEvent
167      . (
168         (description .  "A lyric syllable. Must be entered in lyrics mode, i.e.
169 @code{\\lyrics @{ twinkle4 twinkle4 @} } .")
170
171         (internal-class-name . "Event")
172         (types . (general-music rhythmic-event lyric-event event))
173         ))
174     (LigatureEvent
175      . (
176         (description .  "")
177
178         (internal-class-name . "Event")
179         (span-type . ligature)
180         (types . (general-music event span-event ligature-event))
181         ))
182     (MarkEvent
183      . (
184         (description .  "")
185
186         (internal-class-name . "Event")
187         (types . (general-music mark-event event))
188         ))  
189     (MelismaEvent
190      . (
191         (description .  "")
192
193         (internal-class-name . "Event")
194         (types . (general-music span-event melisma-playing-event event))
195         )) 
196     (MelismaPlayingEvent
197      . (
198         (description .  "")
199
200         (internal-class-name . "Event")
201         (types . (general-music event))
202         ))
203     (MultiMeasureRestEvent
204      . (
205         (description . "Rests that may be compressed into Multi rests. Syntax
206 @code{R2.*4} for 4 measures in 3/4 time. Note the capital R.")
207         (internal-class-name . "Event")
208         (types . (general-music event multi-measure-rest-event))
209         ))
210     (Music
211      . (
212         (description .  "")
213
214         (internal-class-name . "Music")
215         (types . (general-music)) 
216         ))
217     (NoteEvent
218      . (
219         (description .  "")
220
221         (internal-class-name . "Event")
222         (types . (general-music event note-event rhythmic-event melodic-event))
223         ))
224     (OverrideProperty
225      . (
226         (description .  "")
227
228         (internal-class-name . "Music")
229         (types . (general-music layout-instruction))
230         (iterator-ctor . ,      Push_property_iterator::constructor)
231         ))
232
233     (PartCombineMusic
234      . (
235         (description .  "")
236
237         (internal-class-name . "Simultaneous_music")
238         (types . (general-music part-combine-music))
239         (iterator-ctor . ,Part_combine_music_iterator::constructor)
240         ))
241     (PhrasingSlurEvent
242      . (
243         (description . "Start or end phrasing slur. Syntax NOTE \\(  and \\) NOTE")
244         (internal-class-name . "Event")
245         (types . (general-music span-event phrasing-slur-event))
246         ))
247     (PropertySet
248      . (
249         (description .  "")
250         (internal-class-name . "Music")
251         (types . (layout-instruction general-music))
252         (iterator-ctor . ,Property_iterator::constructor)
253         )
254      )
255     (PropertyUnset
256      . (
257         (description .  "")
258
259         (internal-class-name . "Music")
260         (types . (layout-instruction general-music))
261         (iterator-ctor . ,Property_unset_iterator::constructor)
262         )
263      )
264     (PorrectusEvent
265      . (
266         (description .  "")
267
268         (internal-class-name . "Event")
269         (types . (general-music porrectus-event event))
270         ))
271     (RepeatedMusic
272      . (
273         (description .  "")
274
275         (type .  repeated-music)
276         (types . (general-music repeated-music))
277         ))
278     (Event
279      . (
280         (description .  "")
281
282         (internal-class-name . "Event")
283         (types . (general-music event))
284         )) 
285     (RestEvent
286      . (
287         (description .  "")
288
289         (internal-class-name . "Event")
290         (types . (general-music event rhythmic-event rest-event))
291         )) 
292     (SequentialMusic
293      . (
294         (description .  "Music expressions concatenated. Syntax \\sequential @{..@} or simply @{..@} .")
295
296         (internal-class-name . "Sequential_music")
297         (iterator-ctor . ,Sequential_music_iterator::constructor)
298         (types . (general-music sequential-music))
299         ))
300     (SimultaneousMusic
301      . (
302         (description .  "Music playing together. Syntax: \\simultaneous @{ .. @} or < .. >.")
303
304         (internal-class-name . "Simultaneous_music")
305         (iterator-ctor . ,Simultaneous_music_iterator::constructor)
306         
307         (types . (general-music simultaneous-music))
308         ))
309     (SlurEvent
310      . (
311         (description . "Start or end slur. Syntax NOTE(  and )NOTE")
312         (internal-class-name . "Event")
313         (types . (general-music span-event slur-event))
314         ))
315
316     (RevertProperty
317      . (
318         (description .  "")
319
320         (internal-class-name . "Music")
321         (types . (general-music layout-instruction))
322         (iterator-ctor . ,      Pop_property_iterator::constructor)
323         ))
324     
325     (OutputPropertySetMusic
326      . (
327         (description .  "")
328
329         (internal-class-name . "Music")
330         (iterator-ctor . ,Output_property_music_iterator::constructor)
331         (types . (general-music layout-instruction))
332         ))
333     
334     (TextSpanEvent
335      . (
336         (description . "Start a text spanner like 8va.....|")
337         (internal-class-name . "Event")
338         (types . (general-music span-event text-span-event))
339         ))
340     (TranslatorChange
341      . (
342         (description .  "")
343         (internal-class-name . "Music")
344         (iterator-ctor . , Change_iterator::constructor)
345         (types . (general-music translator-change-instruction))
346         ))
347     
348     (TimeScaledMusic
349      . (
350         (description .  "")
351         (internal-class-name . "Time_scaled_music")
352         (iterator-ctor . ,Time_scaled_music_iterator::constructor)
353         (types . (time-scaled-music music-wrapper-music general-music))
354         ))
355     
356     (TransposedMusic
357      . (
358         (description .  "")
359         (internal-class-name . "Transposed_music")
360         (types . (music-wrapper-music general-music transposed-music))
361         ))
362
363     (UntransposableMusic
364      . (
365         (description .  "")
366
367         (internal-class-name . "Untransposable_music")
368         (types . (music-wrapper-music general-music untransposable-music)) 
369         ))
370
371     (UnrelativableMusic
372      . (
373         (description .  "")
374         (internal-class-name . "Un_relativable_music")
375         (types . (music-wrapper-music general-music unrelativable-music))
376         ))
377
378     (RelativeOctaveMusic
379      . (
380         (description .  "")
381
382         (internal-class-name . "Relative_octave_music")
383         (types . (music-wrapper-music general-music relative-octave-music))
384         ))
385
386     
387     (EventChord
388      . (
389         (description .  "")
390
391         (internal-class-name . "Simultaneous_music")
392         (iterator-ctor . ,Event_chord_iterator::constructor)
393         (types . (general-music event-chord simultaneous-music))
394         )
395      )
396     
397     (ScriptEvent
398      . (
399         (description .  "")
400
401         (internal-class-name . "Event")
402         (types . (general-music event))
403         )) 
404     (SkipEvent
405      . (
406         (description .  "")
407
408         (internal-class-name . "Event")
409         (types . (general-music event rhythmic-event skip-event))
410         )) 
411     (SpanEvent
412      . (
413         (description .  "")
414
415         (internal-class-name . "Event")
416         (types . (general-music event))
417         )) 
418     (SustainPedalEvent
419      . (
420         (description . "")
421         (internal-class-name . "Event")
422         (types . (general-music pedal-event sustain-pedal-event))
423         ))
424     (SostenutoEvent
425      . (
426         (description . "")
427         (internal-class-name . "Event")
428         (types . (general-music pedal-event sostenuto-pedal-event))
429         ))
430     (UnaCordaEvent
431      . (
432         (description . "")
433         (internal-class-name . "Event")
434         (types . (general-music pedal-event una-corda-pedal-event))
435         ))
436     (StringNumberEvent
437      . (
438         (description .  "")
439
440         (internal-class-name . "Event")
441         (types . (general-music string-number-event event))
442         )) 
443     (TempoEvent
444      . (
445         (description .  "")
446
447         (internal-class-name . "Event")
448         (types . (general-music tempo-event event))
449         )) 
450     (TextScriptEvent
451      . (
452         (description .  "")
453         (internal-class-name . "Event")
454         (types . (general-music script-event text-script-event event))
455         )) 
456     (TieEvent
457      . (
458         (description .  "A tie.  Entered as ~.")
459         (internal-class-name . "Event")
460         (types . (general-music tie-event event))
461         ))
462     (TremoloEvent
463      . (
464         (description . "Un measured tremolo.")
465         (internal-class-name . "Event")
466         (types . (general-music event tremolo-event))
467         ))
468     (VoiceSeparator
469      . (
470         (description .  "")
471
472         (internal-class-name . "Music")
473         (types . (separator general-music))
474         ))
475
476     (VoltaRepeatedMusic
477      . (
478         (iterator-ctor . ,Volta_repeat_iterator::constructor)
479         (internal-class-name . "Repeated_music")
480         (description . "")
481         (start-moment-function .  ,Repeated_music::first_start)
482         (length . ,Repeated_music::volta_music_length)
483         (types . (general-music repeated-music volta-repeated-music))
484         ))
485     
486     (UnfoldedRepeatedMusic
487      . (
488         (iterator-ctor . ,Unfolded_repeat_iterator::constructor)
489         (description .  "")
490         (start-moment-function .  ,Repeated_music::first_start)
491         (internal-class-name . "Repeated_music")
492         (types . (general-music repeated-music unfolded-repeated-music))
493         (length . ,Repeated_music::unfolded_music_length)
494         ))
495     (PercentRepeatedMusic
496      . (
497         (internal-class-name . "Repeated_music")
498         (description .  "")
499         (iterator-ctor . ,Percent_repeat_iterator::constructor)
500         (start-moment-function .  ,Repeated_music::first_start)
501         (length . ,Repeated_music::unfolded_music_length)
502         (types . (general-music repeated-music percent-repeated-music))
503         ))
504     
505     (TremoloRepeteadMusic
506      . (
507         (iterator-ctor . ,Chord_tremolo_iterator::constructor)
508         (description .  "")
509         (internal-class-name . "Repeated_music")
510         (start-moment-function .  ,Repeated_music::first_start)
511
512         ;; the length of the repeat is handled by shifting the note logs
513         (length . ,Repeated_music::folded_music_length)
514         (types . (general-music repeated-music tremolo-repeated-music))
515         
516         ))
517     (FoldedRepeatedMusic
518      . (
519         (internal-class-name . "Repeated_music")
520         (description .  "")
521         (iterator-ctor  . ,Folded_repeat_iterator::constructor)
522         (start-moment-function .  ,Repeated_music::minimum_start)
523         (length . ,Repeated_music::folded_music_length)
524         (types . (general-music repeated-music folded-repeated-music))
525         ))
526     ))
527
528 (set! music-descriptions
529       (sort music-descriptions alist<?))
530
531 (define music-name-to-property-table (make-vector 59 '()))
532
533
534 ;; init hash table,
535 ;; transport description to an object property.
536 (set!
537  music-descriptions
538  (map (lambda (x)
539         (set-object-property! (car x)
540                               'music-description
541                               (cdr (assq 'description (cdr x))))
542         (let
543             ((l (cdr x)))
544           (set! l (assoc-set! l 'name (car x)))
545           (set! l (assq-remove!  l 'description))
546           (hashq-set! music-name-to-property-table (car x) l)
547           (cons (car x) l)
548           ))
549       music-descriptions))
550
551
552
553 (define-public (make-music-by-name x)
554   (if (not (symbol? x))
555       (error (format "Not a symbol: ~a" x)))
556   (let*
557       (
558        (props (hashq-ref music-name-to-property-table x '()))
559        (name (if (pair? props)
560                  (cdr (assoc 'internal-class-name props))
561                  (error "Can not find music object" x)))
562        )
563
564     (if (eq? props '())
565         (ly:warn (format "Could not find music type `~a'" x)))  
566     (ly:make-bare-music name props)
567     ))
568
569
570
571 (define-public (make-repeated-music name)
572   (let*
573       (
574        (handle (assoc
575                 name
576                 '(("volta" . VoltaRepeatedMusic)
577                   ("unfold" . UnfoldedRepeatedMusic)
578                   ("percent" . PercentRepeatedMusic)
579                   ("tremolo" . TremoloRepeteadMusic)
580                   ("fold" . FoldedRepeatedMusic)
581                   )))
582        (music-name
583         (if (pair? handle)
584             (cdr handle)
585             (begin
586               (ly:warn
587                (string-append "Unknown repeat type `" name
588                               "'\nSee music-types.scm for supported repeats"))
589               'VoltaRepeatedMusic)
590             )
591         )
592        )
593
594     (make-music-by-name music-name)
595     ))
596