]> git.donarmstrong.com Git - lilypond.git/blob - scm/define-music-types.scm
* lily/stem.cc (height): robustness fix.
[lilypond.git] / scm / define-music-types.scm
1 ;;;; define-music-types.scm --
2 ;;;;
3 ;;;;  source file of the GNU LilyPond music typesetter
4 ;;;; 
5 ;;;; (c)  1998--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
6 ;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
7
8 ;; TODO: should link back into user manual.
9
10 (define-public music-descriptions
11   `(
12     (AbsoluteDynamicEvent
13      . (
14         (description . "Creates a dynamic mark.
15
16 Syntax: @var{note}@code{\\x},
17 where x is one of \\ppp, \\pp, \\p, \\mp, \\mf, \\f, \\ff, \\fff.")
18         (internal-class-name . "Event")
19         (types . (general-music event dynamic-event absolute-dynamic-event))
20         ))
21     (ApplyContext
22      . (
23         (description . "Call the argument with the current context during interpreting phase")
24         (internal-class-name . "Music")
25         (types . (general-music apply-context))
26         (iterator-ctor . ,Apply_context_iterator::constructor)
27         ))
28     (ApplyOutputEvent
29      . (
30         (description . "
31 Call the argument with all current grobs during interpreting phase.
32
33 Syntax
34
35 \\applyoutput FUNC
36
37 arguments to func are 1. the grob, 2. the originating context,
38 3. context where FUNC is called.
39
40 ")
41         (internal-class-name . "Event")
42         (iterator-ctor . ,Output_property_music_iterator::constructor)
43         (types . (general-music layout-instruction))
44         ))
45     (ArpeggioEvent 
46      . (
47         (description .  "Make an arpeggio on this note.
48
49 Syntax:
50 @var{note}-@code{\\arpeggio}")
51         (internal-class-name .  "Event")
52         (types . (general-music arpeggio-event event))
53         ))
54
55     ;; todo: use articulation-event for slur as well.
56     ;; separate non articulation scripts  
57     (ArticulationEvent
58      . (
59         (description .  "Adds an articulation marking to a note.  
60
61 Syntax:
62 @var{note}@code{X}@code{Y}, where X is a direction (up @code{^}, down
63 @code{_}, or LilyPond's choice (no direction specified)), and where Y
64 is an articulation (such as @code{-.}, @code{->}, @code{\\tenuto},
65 @code{\\downbow}).  See the user manual for details.")
66
67         (internal-class-name . "Event")
68         (types . (general-music event articulation-event script-event))
69         )) 
70     (AutoChangeMusic
71      . (
72         (description .  "Used for making voices that switch between piano staves automatically.")
73
74         (internal-class-name . "Music_wrapper")
75         (iterator-ctor . ,Auto_change_iterator::constructor)
76         (types . (general-music music-wrapper-music auto-change-instruction))
77         ))
78     (BarCheck
79      . (
80         (description .
81                      "Check whether this music coincides with the start of the measure.")
82         (internal-class-name . "Music")
83         (types . (general-music bar-check))
84         (iterator-ctor . ,Bar_check_iterator::constructor)
85         ))
86     (BassFigureEvent
87      . (
88         (description .  "Print a bass-figure text")
89
90         (internal-class-name . "Event")
91         (types . (general-music event rhythmic-event bass-figure-event))
92         ))
93     (BeamEvent
94      . (
95         (description .  "Starts or stops a beam.  
96
97 Syntax for manual control:
98 c8-[ c c-] c8")
99         (internal-class-name . "Event")
100         (types . (general-music event beam-event span-event))
101         ))
102     (BreakEvent
103      . (
104         (description .  "Create a line break, Syntax: \\break or page break, Syntax: \\pagebreak.")
105
106         (internal-class-name . "Event")
107         (types . (general-music break-event event))
108         ))
109     (BreathingSignEvent
110      . (
111         (description .  "Creates a `breath mark' or `comma'.  
112
113 Syntax:
114 @var{note}\\breathe.")
115
116         (internal-class-name . "Event")
117         (types . (general-music event breathing-event))
118         )) 
119     (BusyPlayingEvent
120      . (
121         (description .  "Used internally to signal beginning and ending of notes.")
122
123         (internal-class-name . "Event")
124         (types . (general-music event busy-playing-event))
125         ))
126     (ContextChange
127      . (
128         (description .  "Change staffs in Piano staff. 
129
130 Syntax @code{\\translator Staff = @var{new-id}}.")
131         (internal-class-name . "Music")
132         (iterator-ctor . , Change_iterator::constructor)
133         (types . (general-music translator-change-instruction))
134         ))
135
136     (ClusterNoteEvent
137      . (
138         (description .  "A note that is part of a cluster.")
139         (internal-class-name . "Event")
140
141                                         ; not a note-event, to ensure that Note_engraver doesn't eat it. 
142         (types . (general-music cluster-note-event melodic-event rhythmic-event event))
143         ))
144     
145     (ContextSpeccedMusic
146      . (
147         (description .  "Interpret the argument music within a specific context.")
148         (iterator-ctor . ,Context_specced_music_iterator::constructor)
149         (internal-class-name . "Music_wrapper")
150         (types . (context-specification general-music music-wrapper-music))
151         ))
152     
153     (CrescendoEvent
154      . (
155         (description .  "Begins or ends a crescendo.  
156
157 Syntax: @var{note}\\cr
158 ... @var{note}\\rc (you can also use \\<, \\!, \\cresc, and
159 \\endcresc.  See the user manual for details.).")
160
161         (internal-class-name . "Event")
162         (types . (general-music dynamic-event crescendo-event event))
163         )) 
164     (DecrescendoEvent
165      . (
166         (description .  "See @ref{CrescendoEvent}.")
167
168         (internal-class-name . "Event")
169         (types . (general-music dynamic-event decrescendo-event event))
170         ))
171     
172     (ExtenderEvent
173      . (
174         (description .  "Extend lyrics.")
175
176         (internal-class-name . "Event")
177         (types . (general-music extender-event event))
178         ))
179     (FingerEvent
180      . (
181         (description . "Specify what finger to use for this note.")
182         (internal-class-name . "Event")
183         (types . (general-music fingering-event event))
184         ))
185     (BeamForbidEvent
186      . (
187         (description . "Specify that a note may not auto-beamed ")
188         (internal-class-name . "Event")
189         (types . (general-music event beam-forbid-event))
190         ))
191     (GlissandoEvent
192      . (
193         (description .  "Start  a glissando on this note.")
194         (internal-class-name . "Event")
195         (types . (general-music glissando-event event))
196         ))
197     
198     (GraceMusic
199      . (
200         (description .  "Interpret the argument as grace notes. ")
201         (internal-class-name . "Grace_music")
202         (length . ,(ly:make-moment 0 1))
203         (iterator-ctor . ,Grace_iterator::constructor)
204         (types . (grace-music music-wrapper-music general-music))
205         ))
206     (NoteGroupingEvent
207      . (
208         (description . "Start or stop grouping brackets.")
209         (internal-class-name . "Event")
210         (types . (general-music event note-grouping-event))
211         ))
212     (HarmonicEvent
213      . (
214         (description . "Mark a note as harmonic")
215         (internal-class-name . "Event")
216         (types . (general-music event harmonic-event))
217         ))
218     (HyphenEvent
219      . (
220         (description .  "A hyphen between lyric syllables.")
221
222         (internal-class-name . "Event")
223         (types . (general-music hyphen-event event))
224         ))
225     
226     (KeyChangeEvent
227      . (
228         (description .  "Change the key signature. 
229
230 Syntax: @code{\\key } @var{name} @var{scale}.")
231
232         (internal-class-name . "Key_change_ev")
233         (types . (general-music key-change-event event))
234         ))
235     
236     (LigatureEvent
237      . (
238         (description .  "(docme).")
239
240         (internal-class-name . "Event")
241         (span-type . ligature)
242         (types . (general-music span-event ligature-event event))
243         ))
244     
245     (LyricCombineMusic
246      . (
247         (description .  "Align lyrics to the start of notes.
248
249
250 Syntax @var{\\addlyrics }@var{music} @var{lyrics}.")
251
252         (internal-class-name . "Lyric_combine_music")
253         (types . (general-music lyric-combine-music))
254         (iterator-ctor . ,Lyric_combine_music_iterator::constructor)
255         ))
256     
257     (NewLyricCombineMusic
258      . (
259         (description .  "Align lyrics to the start of notes.
260
261
262 Syntax @var{\\addlyrics }@var{music} @var{lyrics}.")
263         (internal-class-name . "Music")
264         (length . ,(ly:make-moment 0 1))
265         (types . (general-music lyric-combine-music))
266         (iterator-ctor . ,New_lyric_combine_music_iterator::constructor)
267         ))
268
269     (LyricEvent
270      . (
271         (description .  "A lyric syllable. Must be entered in lyrics mode, i.e.
272 @code{\\lyrics @{ twinkle4 twinkle4 @} } .")
273
274         (internal-class-name . "Event")
275         (types . (general-music rhythmic-event lyric-event event))
276         ))
277     (MarkEvent
278      . (
279         (description .  "Insert a rehearsal mark. 
280
281 Syntax: @code{\\mark} @var{marker},
282 e.g. @code{\\mark \"A\"}.")
283
284         (internal-class-name . "Event")
285         (types . (general-music mark-event event))
286         ))
287     (MelismaPlayingEvent
288      . (
289         (description .  "Used internally to signal melismas.")
290         (internal-class-name . "Event")
291         (types . (general-music melisma-playing-event event))
292         ))
293     (ManualMelismaEvent
294      . (
295         (description .  "Start or stop a melisma.
296
297 Syntax: @code{c4\\melisma d\\melismaEnd}.")
298         (internal-class-name . "Event")
299         (types . (general-music melisma-span-event event))
300         ))
301     
302     (MultiMeasureRestEvent
303      . (
304         (description . "Rests that may be compressed into Multi rests. 
305
306 Syntax
307 @code{R2.*4} for 4 measures in 3/4 time. Note the capital R.")
308         (internal-class-name . "Event")
309         (types . (general-music event rhythmic-event multi-measure-rest-event))
310         ))
311     
312     (MultiMeasureTextEvent
313      . (
314         (description . "Texts on mm rests. 
315
316 Syntax
317 @code{R-\\markup @{ \\roman \"bla\" @}}. Note the explicit font switch.")
318         (internal-class-name . "Event")
319         (types . (general-music event multi-measure-text-event))
320         ))
321
322     (Music
323      . (
324         (description .  "Generic type for music expressions.")
325
326         (internal-class-name . "Music")
327         (types . (general-music)) 
328         ))
329     (NoteEvent
330      . (
331         (description .  "A note.")
332
333         (internal-class-name . "Event")
334         (types . (general-music event note-event rhythmic-event melodic-event))
335         ))
336     
337     (OverrideProperty
338      . (
339         (description .  "Extend the definition of a graphical object.
340
341 SYNTAX
342
343 @code{\\propery Foo.Bar \\override} @var{SYMBOL} = @var{VALUE}
344
345 ")
346         (internal-class-name . "Music")
347         (types . (general-music layout-instruction))
348         (iterator-ctor . ,      Push_property_iterator::constructor)
349         ))
350     (PartCombineMusic
351      . (
352         (description .  "Combine two parts on a staff, either merged or
353 as separate voices.")
354         (internal-class-name . "Simultaneous_music")
355         (types . (general-music part-combine-music))
356         (iterator-ctor . ,Part_combine_iterator::constructor)
357         ))
358     (PhrasingSlurEvent
359      . (
360         (description . "Start or end phrasing slur. 
361
362 Syntax NOTE \\(  and \\) NOTE")
363         (internal-class-name . "Event")
364         (types . (general-music span-event phrasing-slur-event))
365         ))
366     
367     (PropertySet
368      . (
369         (description .  "Set a context property.
370
371
372
373 Syntax: @code{\\property @var{context}.@var{prop} = @var{scheme-val}}.")
374         (internal-class-name . "Music")
375         (types . (layout-instruction general-music))
376         (iterator-ctor . ,Property_iterator::constructor)
377         )
378      )
379     
380     (PropertyUnset
381      . (
382         (description .  "Remove the definition of a context @code{\\property}.")
383
384         (internal-class-name . "Music")
385         (types . (layout-instruction general-music))
386         (iterator-ctor . ,Property_unset_iterator::constructor)
387         )
388      )
389     
390     (PesOrFlexaEvent
391      . (
392         (description .  "Within a ligature, mark the previous and the
393 following note to form a pes (if melody goes up) or a flexa (if melody
394 goes down).")
395
396         (internal-class-name . "Event")
397         (types . (general-music pes-or-flexa-event event))
398         ))
399
400     (QuoteMusic
401      . (
402         (description . "Quote preprocessed snippets of music. ")
403         (internal-class-name . "Music_wrapper")
404         (iterator-ctor . ,Quote_iterator::constructor)
405         (types . (general-music))
406         ))
407     
408     (RelativeOctaveCheck
409      . ((description . "Check if a pitch is in the correct octave.")
410         (internal-class-name . "Relative_octave_check")
411         (types . (general-music relative-octave-check))
412         ))
413     
414     (RepeatedMusic
415      . (
416         (description .  "Repeat music in different ways")
417         (type .  repeated-music)
418         (types . (general-music repeated-music))
419         ))
420     
421     (Event
422      . (
423         (description .  "Atomic music event.")
424
425         (internal-class-name . "Event")
426         (types . (general-music event))
427         ))
428     
429     (RestEvent
430      . (
431         (description .  "A Rest. 
432
433 Syntax @code{r4} for a quarter rest. ")
434
435         (internal-class-name . "Event")
436         (types . (general-music event rhythmic-event rest-event))
437         )) 
438     (RevertProperty
439      . (
440         (description .  "The opposite of @ref{OverrideProperty}: remove a
441 previously added property from a graphical object definition
442  ")
443
444         (internal-class-name . "Music")
445         (types . (general-music layout-instruction))
446         (iterator-ctor . ,      Pop_property_iterator::constructor)
447         ))
448
449     (SequentialMusic
450      . (
451         (description .  "Music expressions concatenated. 
452
453 Syntax \\sequential @{..@} or simply @{..@} .")
454
455         (internal-class-name . "Sequential_music")
456         (length-callback . ,Music_sequence::cumulative_length_callback)
457         (iterator-ctor . ,Sequential_music_iterator::constructor)
458         (types . (general-music sequential-music))
459         ))
460     
461     (MultiMeasureRestMusicGroup
462      . (
463         (description .  "Like sequential-music, but specifically intended
464 to group start-mmrest, skip, stop-mmrest sequence. 
465
466 Syntax @code{R2.*5} for 5 measures in 3/4 time.")
467         (internal-class-name . "Sequential_music")
468         (length-callback . ,Music_sequence::cumulative_length_callback)
469         (iterator-ctor . ,Sequential_music_iterator::constructor)
470         (types . (general-music sequential-music))
471         ))
472
473     (SoloOneEvent
474      . (
475         (description . "Print Solo.1")
476         (internal-class-name . "Event")
477         (part-combine-status . solo1)
478         (types . (general-music event part-combine-event))
479         ))
480     (SoloTwoEvent
481      . (
482         (description . "Print Solo.2")
483         (internal-class-name . "Event")
484         (part-combine-status . solo2)
485         (types . (general-music event part-combine-event))
486         ))
487     (UnisonoEvent
488      . ((description . "Print a2")
489         (internal-class-name .  "Event")
490         (part-combine-status . unisono)
491         (types . (general-music event part-combine-event))))
492     
493     (SimultaneousMusic
494      . (
495         (description .  "Music playing together.
496
497 SYNTAX
498
499 @code{ \\simultaneous @{ .. @}} or < .. >.")
500
501         (internal-class-name . "Simultaneous_music")
502         (iterator-ctor . ,Simultaneous_music_iterator::constructor)
503         (length-callback . ,Music_sequence::maximum_length_callback)
504         
505         (types . (general-music simultaneous-music))
506         ))
507     
508     (SlurEvent
509      . (
510         (description . "Start or end slur. 
511
512 Syntax NOTE(     and )NOTE")
513         (internal-class-name . "Event")
514         (types . (general-music span-event slur-event))
515         ))
516
517     (StartPlayingEvent
518      . (
519         (description .  "Used internally to signal beginning of notes.")
520
521         (internal-class-name . "Event")
522         (types . (general-music event start-playing-event))
523         ))
524     
525     (OutputPropertySetMusic
526      . (
527         (description .  "Set grob properties in objects
528 individually. 
529
530 Syntax @code{\\outputproperty @var{predicate} @var{prop}
531 = @var{val}}.")
532
533         (internal-class-name . "Music")
534         (iterator-ctor . ,Output_property_music_iterator::constructor)
535         (types . (general-music layout-instruction))
536         ))
537     
538     (TextSpanEvent
539      . (
540         (description . "Start a text spanner like 8va.....|")
541         (internal-class-name . "Event")
542         (types . (general-music span-event text-span-event))
543         ))
544     
545     (TrillSpanEvent
546      . (
547         (description . "Start a trill spanner tr~~~")
548         (internal-class-name . "Event")
549         (types . (general-music span-event trill-span-event))
550         ))
551     
552     (TimeScaledMusic
553      . (
554         (description .  "Multiply durations, as in tuplets. 
555
556 Syntax @code{\\times @var{fraction} @var{music}}, e.g.
557 @code{\\times 2/3 @{ ... @}} for triplets.
558  ")
559         (internal-class-name . "Music_wrapper")
560         (iterator-ctor . ,Time_scaled_music_iterator::constructor)
561         (types . (time-scaled-music music-wrapper-music general-music))
562         ))
563     
564     (TransposedMusic
565      . (
566         (description .  "Music that has been transposed.")
567         (internal-class-name . "Transposed_music")
568         (types . (music-wrapper-music general-music transposed-music))
569         ))
570
571     (UntransposableMusic
572      . (
573         (description .  "Music that can not be transposed.")
574
575         (internal-class-name . "Untransposable_music")
576         (types . (music-wrapper-music general-music untransposable-music)) 
577         ))
578
579     (UnrelativableMusic
580      . (
581         (description .  "Music that can not be converted from relative to absolute notation.
582 For example, transposed music.")
583         (internal-class-name . "Un_relativable_music")
584         (types . (music-wrapper-music general-music unrelativable-music))
585         ))
586
587     (RelativeOctaveMusic
588      . (
589         (description .  "Music that was entered in relative octave notation.")
590
591         (internal-class-name . "Relative_octave_music")
592         (types . (music-wrapper-music general-music relative-octave-music))
593         ))
594     
595     (EventChord
596      . (
597         (description .  "Internally used to group a set of events.")
598         (internal-class-name . "Event_chord")
599         (iterator-ctor . ,Event_chord_iterator::constructor)
600         (length-callback . ,Music_sequence::maximum_length_callback)
601         (types . (general-music event-chord simultaneous-music))
602         )
603      )
604     
605     (ScriptEvent
606      . (
607         (description .  "Add an articulation mark to a note. ")
608
609         (internal-class-name . "Event")
610         (types . (general-music event))
611         ))
612
613     (SkipMusic
614      . (
615         (description .  "Filler that takes up duration, does not print anything, and also
616 does not create staffs or voices implicitly.
617
618
619
620 Syntax: @code{\\skip }@var{duration}.")
621         (internal-class-name . "Music")
622         (length-callback . ,ly:music-duration-length)
623         (iterator-ctor . ,Simple_music_iterator::constructor)
624         (types . (general-music event rhythmic-event skip-event))
625         ))
626     
627     (SkipEvent
628      . (
629         (description .  "Filler that takes up duration, but does not print anything.
630
631
632
633 Syntax: @code{s}@var{duration}")
634
635         (internal-class-name . "Event")
636         (types . (general-music event rhythmic-event skip-event))
637         ))
638     (SpanEvent
639      . (
640         (description .  "Event for anything that is started at a different time than stopped.")
641
642         (internal-class-name . "Event")
643         (types . (general-music event))
644         ))
645     
646     (SustainEvent
647      . (
648         (description . "Depress or release sustain pedal. ")
649         (internal-class-name . "Event")
650         (types . (general-music pedal-event sustain-pedal-event))
651         ))
652     
653     (SostenutoEvent
654      . (
655         (description . "Depress or release sostenuto pedal. ")
656         (internal-class-name . "Event")
657         (types . (general-music pedal-event sostenuto-pedal-event))
658         ))
659     
660     (UnaCordaEvent
661      . (
662         (description . "Depress or release una-corda pedal.")
663         (internal-class-name . "Event")
664         (types . (general-music pedal-event una-corda-pedal-event))
665         ))
666     
667     (StringNumberEvent
668      . (
669         (description .  "Specify on which string to play this note. 
670
671 Syntax: @code{\\@var{number}}.")
672
673         (internal-class-name . "Event")
674         (types . (general-music string-number-event event))
675         )) 
676
677     (MetronomeChangeEvent
678      . (
679         (description .  "Change tempo setting (in beats per minute).")
680         (internal-class-name . "Event")
681         (types . (general-music metronome-change-event tempo-event event))
682         ))
683     
684     (TextScriptEvent
685      . (
686         (description .  "")
687         (internal-class-name . "Event")
688         (types . (general-music script-event text-script-event event))
689         )) 
690     (TieEvent
691      . (
692         (description .  "A tie.  Entered as @var{note}-~.")
693         (internal-class-name . "Event")
694         (types . (general-music tie-event event))
695         ))
696     (TremoloEvent
697      . (
698         (description . "Un measured tremolo.")
699         (internal-class-name . "Event")
700         (types . (general-music event tremolo-event))
701         ))
702     
703     (VoiceSeparator
704      . (
705         (description .  "Separate polyphonic voices in simultaneous music. 
706
707 Syntax: @code{\\\\}")
708
709         (internal-class-name . "Music")
710         (types . (separator general-music))
711         ))
712
713     (VoltaRepeatedMusic
714      . (
715         (iterator-ctor . ,Volta_repeat_iterator::constructor)
716         (internal-class-name . "Repeated_music")
717         (description . "")
718         (start-moment-function .  ,Repeated_music::first_start)
719         (length-callback . ,Repeated_music::volta_music_length)
720         (types . (general-music repeated-music volta-repeated-music))
721         ))
722     
723     (UnfoldedRepeatedMusic
724      . (
725         (iterator-ctor . ,Unfolded_repeat_iterator::constructor)
726         (description .  "")
727         (start-moment-function .  ,Repeated_music::first_start)
728         (internal-class-name . "Repeated_music")
729         (types . (general-music repeated-music unfolded-repeated-music))
730         (length-callback . ,Repeated_music::unfolded_music_length)
731         ))
732     (PercentRepeatedMusic
733      . (
734         (internal-class-name . "Repeated_music")
735         (description .  "Repeats encoded by percents.")
736         (iterator-ctor . ,Percent_repeat_iterator::constructor)
737         (start-moment-function .  ,Repeated_music::first_start)
738         (length-callback . ,Repeated_music::unfolded_music_length)
739         (types . (general-music repeated-music percent-repeated-music))
740         ))
741     
742     (TremoloRepeatedMusic
743      . (
744         (iterator-ctor . ,Chord_tremolo_iterator::constructor)
745         (description .  "Repeated notes denoted by tremolo beams.")
746         (internal-class-name . "Repeated_music")
747         (start-moment-function .  ,Repeated_music::first_start)
748
749         ;; the length of the repeat is handled by shifting the note logs
750         (length-callback . ,Repeated_music::folded_music_length)
751         (types . (general-music repeated-music tremolo-repeated-music))
752         
753         ))
754     
755     (FoldedRepeatedMusic
756      . (
757         (internal-class-name . "Repeated_music")
758         (description .  "Repeats with alternatives placed in parallel. ")
759         (iterator-ctor  . ,Folded_repeat_iterator::constructor)
760         (start-moment-function .  ,Repeated_music::minimum_start)
761         (length-callback . ,Repeated_music::folded_music_length)
762         (types . (general-music repeated-music folded-repeated-music))
763         ))
764     ))
765
766 (set! music-descriptions
767       (sort music-descriptions alist<?))
768
769 (define music-name-to-property-table (make-vector 59 '()))
770
771 ;; init hash table,
772 ;; transport description to an object property.
773 (set!
774  music-descriptions
775  (map (lambda (x)
776         (set-object-property! (car x)
777                               'music-description
778                               (cdr (assq 'description (cdr x))))
779         (let ((lst (cdr x)))
780           (set! lst (assoc-set! lst 'name (car x)))
781           (set! lst (assq-remove! lst 'description))
782           (hashq-set! music-name-to-property-table (car x) lst)
783           (cons (car x) lst)))
784       music-descriptions))
785
786 (define-public (make-music name . music-properties)
787   "Create a music object of given name, and set its properties
788 according to `music-properties', a list of alterning property symbols
789 and values. E.g:
790   (make-music 'OverrideProperty 
791               'symbol 'Stem
792               'grob-property 'thickness
793               'grob-value (* 2 1.5))"
794   (if (not (symbol? name))
795       (error (format "Not a symbol: ~a" name)))
796   (let ((props (hashq-ref music-name-to-property-table name '())))
797     (if (not (pair? props))
798         (error "Can not find music object" name))
799     (let ((m (ly:make-bare-music (cdr (assoc 'internal-class-name props)) props)))
800       (define (set-props mus-props)
801         (if (and (not (null? mus-props))
802                  (not (null? (cdr mus-props))))
803             (begin
804               (set! (ly:music-property m (car mus-props)) (cadr mus-props))
805               (set-props (cddr mus-props)))))
806       (set-props music-properties)
807       m)))
808
809 (define-public (make-repeated-music name)
810   (let* ((handle (assoc name '(("volta" . VoltaRepeatedMusic)
811                                ("unfold" . UnfoldedRepeatedMusic)
812                                ("percent" . PercentRepeatedMusic)
813                                ("tremolo" . TremoloRepeatedMusic)
814                                ("fold" . FoldedRepeatedMusic))))
815          (music-name (if (pair? handle)
816                          (cdr handle)
817                          (begin
818                            (ly:warn "Unknown repeat type `~S'\nSee music-types.scm for supported repeats" name)
819                            'VoltaRepeatedMusic))))
820     (make-music music-name)))
821