--- /dev/null
+\version "2.12.2"
+
+\header {
+ texidoc = "Adding ambitus to percussion contexts does not cause
+crashes, since the @code{Ambitus_engraver} will only
+acknowledge pitched note heads."
+}
+
+\new DrumStaff \with { \consists "Ambitus_engraver" } <<
+ \new DrumVoice \drummode { \voiceOne cymr8 cymr }
+ \new DrumVoice \drummode { \voiceTwo hhp4 }
+>>
{
public:
TRANSLATOR_DECLARATIONS (Ambitus_engraver);
+protected:
+ DECLARE_ACKNOWLEDGER (note_head);
+
void process_music ();
- void acknowledge_note_head (Grob_info);
void stop_translation_timestep ();
virtual void finalize ();
virtual void derived_mark () const;
Ambitus_engraver::acknowledge_note_head (Grob_info info)
{
Stream_event *nr = info.event_cause ();
+ SCM p = nr->get_property ("pitch");
+ /*
+ If the engraver is added to a percussion context,
+ filter out unpitched note heads.
+ */
+ if (!unsmob_pitch (p))
+ return;
if (nr && nr->in_event_class ("note-event"))
{
- Pitch pitch = *unsmob_pitch (nr->get_property ("pitch"));
+ Pitch pitch = *unsmob_pitch (p);
Drul_array<bool> expands = pitch_interval_.add_point (pitch);
if (expands[UP])
causes_[UP] = nr;