2 dynamic-performer.cc -- implement Dynamic_performer
4 source file of the GNU LilyPond music typesetter
6 (c) 2000--2004 Jan Nieuwenhuizen <janneke@gnu.org>
9 #include "performer.hh"
12 #include "audio-item.hh"
17 handle multiple events
19 perform absolute (text) dynamics
21 class Dynamic_performer
: public Performer
24 TRANSLATOR_DECLARATIONS (Dynamic_performer
);
26 virtual bool try_music (Music
* req
);
27 virtual void stop_translation_timestep ();
28 virtual void create_audio_elements ();
32 Audio_dynamic
* audio_
;
35 Dynamic_performer::Dynamic_performer ()
42 Dynamic_performer::create_audio_elements ()
46 SCM proc
= get_property ("dynamicAbsoluteVolumeFunction");
48 SCM svolume
= SCM_EOL
;
49 if (gh_procedure_p (proc
))
52 svolume
= gh_call1 (proc
, script_req_
->get_property ("text"));
55 Real volume
= robust_scm2double (svolume
, 0.5);
58 properties override default equaliser setting
60 SCM min
= get_property ("midiMinimumVolume");
61 SCM max
= get_property ("midiMaximumVolume");
62 if (gh_number_p (min
) || gh_number_p (max
))
65 if (gh_number_p (min
))
66 iv
[MIN
] = gh_scm2double (min
);
67 if (gh_number_p (max
))
68 iv
[MAX
] = gh_scm2double (max
);
69 volume
= iv
[MIN
] + iv
.length () * volume
;
74 urg, code duplication:: staff_performer
76 SCM s
= get_property ("midiInstrument");
79 s
= get_property ("instrument");
82 s
= scm_makfrom0str ("piano");
85 SCM eq
= get_property ("instrumentEqualizer");
86 if (gh_procedure_p (eq
))
91 if (is_number_pair (s
))
93 Interval iv
= ly_scm2interval (s
);
94 volume
= iv
[MIN
] + iv
.length () * volume
;
98 audio_
= new Audio_dynamic (volume
);
99 Audio_element_info
info (audio_
, script_req_
);
100 announce_element (info
);
106 Dynamic_performer::stop_translation_timestep ()
110 play_element (audio_
);
116 Dynamic_performer::try_music (Music
* r
)
120 if (r
->is_mus_type ("absolute-dynamic-event")) // fixme.
129 ENTER_DESCRIPTION (Dynamic_performer
,
132 /* accepts */ "absolute-dynamic-event",
134 /*reads */"dynamicAbsoluteVolumeFunction midiMaximumVolume midiMinimumVolume midiInstrument instrumentEqualizer",