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