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