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