2 note-performer.cc -- implement Drum_note_performer
4 source file of the GNU LilyPond music typesetter
6 (c) 1996--2009 Jan Nieuwenhuizen <janneke@gnu.org>
9 #include "performer.hh"
10 #include "audio-item.hh"
11 #include "audio-column.hh"
12 #include "global-context.hh"
13 #include "stream-event.hh"
14 #include "translator.icc"
17 class Drum_note_performer
: public Performer
20 TRANSLATOR_DECLARATIONS (Drum_note_performer
);
23 void stop_translation_timestep ();
24 void process_music ();
25 DECLARE_TRANSLATOR_LISTENER (note
);
27 vector
<Stream_event
*> note_evs_
;
28 vector
<Audio_note
*> notes_
;
31 Drum_note_performer::Drum_note_performer ()
36 Drum_note_performer::process_music ()
38 SCM tab
= get_property ("drumPitchTable");
40 while (note_evs_
.size ())
42 Stream_event
*n
= note_evs_
.back ();
43 note_evs_
.pop_back ();
44 SCM sym
= n
->get_property ("drum-type");
47 if (scm_is_symbol (sym
)
48 && (scm_hash_table_p (tab
) == SCM_BOOL_T
))
49 defn
= scm_hashq_ref (tab
, sym
, SCM_EOL
);
51 if (Pitch
*pit
= unsmob_pitch (defn
))
53 SCM articulations
= n
->get_property ("articulations");
54 Stream_event
*tie_event
= 0;
55 for (SCM s
= articulations
;
56 !tie_event
&& scm_is_pair (s
);
59 Stream_event
*ev
= unsmob_stream_event (scm_car (s
));
63 if (ev
->in_event_class ("tie-event"))
67 Moment len
= get_event_length (n
, now_mom ());
69 Audio_note
*p
= new Audio_note (*pit
, len
,
70 tie_event
, Pitch (0, 0, 0));
71 Audio_element_info
info (p
, n
);
72 announce_element (info
);
81 Drum_note_performer::stop_translation_timestep ()
87 IMPLEMENT_TRANSLATOR_LISTENER (Drum_note_performer
, note
);
89 Drum_note_performer::listen_note (Stream_event
*ev
)
91 note_evs_
.push_back (ev
);
94 ADD_TRANSLATOR (Drum_note_performer
,