+ if (Audio_key* i = dynamic_cast<Audio_key*> (a))
+ return new Midi_key (i);
+ else if (Audio_instrument* i = dynamic_cast<Audio_instrument*> (a))
+ return i->str_.length () ? new Midi_instrument (i) : 0;
+ else if (Audio_note* i = dynamic_cast<Audio_note*> (a))
+ return new Midi_note (i);
+ else if (Audio_dynamic* i = dynamic_cast<Audio_dynamic*> (a))
+ return new Midi_dynamic (i);
+ else if (Audio_piano_pedal* i = dynamic_cast<Audio_piano_pedal*> (a))
+ return new Midi_piano_pedal (i);
+ else if (Audio_tempo* i = dynamic_cast<Audio_tempo*> (a))
+ return new Midi_tempo (i);
+ else if (Audio_time_signature* i = dynamic_cast<Audio_time_signature*> (a))
+ return new Midi_time_signature (i);
+ else if (Audio_text* i = dynamic_cast<Audio_text*> (a))
+ //return i->text_string_.length () ? new Midi_text (i) : 0;
+ return new Midi_text (i);
+ else
+ assert (0);
+
+ // isn't C++ grand?
+ return 0;