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