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 (ly_c_procedure_p (proc))
52 svolume = scm_call_1 (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 (ly_c_number_p (min) || ly_c_number_p (max))
65 if (ly_c_number_p (min))
66 iv[MIN] = ly_scm2double (min);
67 if (ly_c_number_p (max))
68 iv[MAX] = ly_scm2double (max);
69 volume = iv[MIN] + iv.length () * volume;
74 urg, code duplication:: staff_performer
76 SCM s = get_property ("midiInstrument");
78 if (!ly_c_string_p (s))
79 s = get_property ("instrument");
81 if (!ly_c_string_p (s))
82 s = scm_makfrom0str ("piano");
85 SCM eq = get_property ("instrumentEqualizer");
86 if (ly_c_procedure_p (eq))
88 s = scm_call_1 (eq, s);
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",