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