void stop_translation_timestep ();
void process_music ();
virtual void finalize ();
- DECLARE_TRANSLATOR_LISTENER (note);
- DECLARE_TRANSLATOR_LISTENER (rest);
+ void listen_note (Stream_event *);
+ void listen_rest (Stream_event *);
private:
vector<Stream_event *> notes_;
{
}
-Chord_name_engraver::Chord_name_engraver ()
+Chord_name_engraver::Chord_name_engraver (Context *c)
+ : Engraver (c)
{
rest_event_ = 0;
}
{
Stream_event *n = notes_[i];
SCM p = n->get_property ("pitch");
- if (!Pitch::is_smob (p))
+ if (!unsmob<Pitch> (p))
continue;
- if (n->get_property ("bass") == SCM_BOOL_T)
+ if (to_boolean (n->get_property ("bass")))
bass = p;
else
{
SCM oct = n->get_property ("octavation");
if (scm_is_number (oct))
{
- Pitch orig = Pitch::unsmob (p)->transposed (Pitch (-scm_to_int (oct), 0));
+ Pitch orig = unsmob<Pitch> (p)->transposed (Pitch (-scm_to_int (oct), 0));
pitches = scm_cons (orig.smobbed_copy (), pitches);
}
else
pitches = scm_cons (p, pitches);
- if (n->get_property ("inversion") == SCM_BOOL_T)
+ if (to_boolean (n->get_property ("inversion")))
{
inversion = p;
if (!scm_is_number (oct))
context ()->set_property ("lastChord", markup);
}
-IMPLEMENT_TRANSLATOR_LISTENER (Chord_name_engraver, note);
void
Chord_name_engraver::listen_note (Stream_event *ev)
{
notes_.push_back (ev);
}
-IMPLEMENT_TRANSLATOR_LISTENER (Chord_name_engraver, rest);
void
Chord_name_engraver::listen_rest (Stream_event *ev)
{
The READs description is not strictly accurate:
which properties are read depend on the chord naming function active.
*/
+void
+Chord_name_engraver::boot ()
+{
+ ADD_LISTENER (Chord_name_engraver, note);
+ ADD_LISTENER (Chord_name_engraver, rest);
+}
+
ADD_TRANSLATOR (Chord_name_engraver,
/* doc */
"Catch note and rest events and generate the appropriate chordname.",