4
4
source file of the GNU LilyPond music typesetter
6
(c) 2000--2004 Jan Nieuwenhuizen <janneke@gnu.org>
6
(c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
9
9
#include "performer.hh"
12
11
#include "audio-item.hh"
13
#include "translator.icc"
17
handle multiple events
19
perform absolute (text) dynamics
18
handle multiple events
20
perform absolute (text) dynamics
21
22
class Dynamic_performer : public Performer
24
25
TRANSLATOR_DECLARATIONS (Dynamic_performer);
26
virtual bool try_music (Music* req);
27
virtual void stop_translation_timestep ();
28
virtual void create_audio_elements ();
27
virtual bool try_music (Music *event);
28
void stop_translation_timestep ();
29
void process_music ();
32
Audio_dynamic* audio_;
33
Audio_dynamic *audio_;
35
36
Dynamic_performer::Dynamic_performer ()
42
Dynamic_performer::create_audio_elements ()
43
Dynamic_performer::process_music ()
46
47
SCM proc = get_property ("dynamicAbsoluteVolumeFunction");
48
SCM svolume = SCM_EOL;
49
if (gh_procedure_p (proc))
49
SCM svolume = SCM_EOL;
50
if (ly_is_procedure (proc))
52
svolume = gh_call1 (proc, script_req_->get_property ("text"));
53
svolume = scm_call_1 (proc, script_event_->get_property ("text"));
55
Real volume = robust_scm2double (svolume, 0.5);
56
Real volume = robust_scm2double (svolume, 0.5);
58
59
properties override default equaliser setting
60
61
SCM min = get_property ("midiMinimumVolume");
61
62
SCM max = get_property ("midiMaximumVolume");
62
if (gh_number_p (min) || gh_number_p (max))
63
if (scm_is_number (min) || scm_is_number (max))
64
65
Interval iv (0, 1);
65
if (gh_number_p (min))
66
iv[MIN] = gh_scm2double (min);
67
if (gh_number_p (max))
68
iv[MAX] = gh_scm2double (max);
66
if (scm_is_number (min))
67
iv[MIN] = scm_to_double (min);
68
if (scm_is_number (max))
69
iv[MAX] = scm_to_double (max);
69
70
volume = iv[MIN] + iv.length () * volume;
74
75
urg, code duplication:: staff_performer
76
77
SCM s = get_property ("midiInstrument");
79
if (!scm_is_string (s))
79
80
s = get_property ("instrument");
82
if (!scm_is_string (s))
82
83
s = scm_makfrom0str ("piano");
85
85
SCM eq = get_property ("instrumentEqualizer");
86
if (gh_procedure_p (eq))
86
if (ly_is_procedure (eq))
87
s = scm_call_1 (eq, s);
91
89
if (is_number_pair (s))
94
92
volume = iv[MIN] + iv.length () * volume;
98
96
audio_ = new Audio_dynamic (volume);
99
Audio_element_info info (audio_, script_req_);
97
Audio_element_info info (audio_, script_event_);
100
98
announce_element (info);
116
Dynamic_performer::try_music (Music* r)
114
Dynamic_performer::try_music (Music *r)
120
118
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",
127
ADD_TRANSLATOR (Dynamic_performer,
130
/* accept */ "absolute-dynamic-event",
131
/* read */ "dynamicAbsoluteVolumeFunction midiMaximumVolume midiMinimumVolume midiInstrument instrumentEqualizer",