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