void
Audio_staff::add_audio_item (Audio_item* l)
{
- audio_item_l_list_.bottom().add (l);
+ audio_item_l_arr_.push (l);
}
+
void
Audio_staff::output (Midi_stream& midi_stream_r, int track_i)
{
#define AUDIO_STAFF_HH
#include "proto.hh"
-#include "plist.hh"
+#include "parray.hh"
#include "lily-proto.hh"
#include "audio-element.hh"
void add_audio_item (Audio_item* l);
void output (Midi_stream& midi_stream_r, int track_i);
- Link_list<Audio_item*> audio_item_l_list_;
-
+ Link_array<Audio_item> audio_item_l_arr_;
};
#endif // AUDIO_STAFF_HH
struct Midi_note_event : PQueue_ent<Moment, Midi_note_off*>
{
- bool ignore_b_;
- Midi_note_event();
+ bool ignore_b_;
+ Midi_note_event();
};
int compare (Midi_note_event const& left, Midi_note_event const& right);
/**
walk audio and output midi
*/
-class Midi_walker : public PCursor<Audio_item*>
+class Midi_walker// : public PCursor<Audio_item*>
{
public:
- Midi_walker (Audio_staff* audio_staff_l, Midi_track* midi_track_l);
- ~Midi_walker();
-
- void process();
+ Midi_walker (Audio_staff* audio_staff_l, Midi_track* midi_track_l);
+ ~Midi_walker();
+ void process();
+ void operator ++(int);
+ bool ok () const;
private:
- void do_start_note (Midi_note* note_p);
- void do_stop_notes (Moment now_mom);
- void output_event (Moment now_mom, Midi_item* l);
-
- Midi_track* track_l_;
- PQueue<Midi_note_event> stop_note_queue;
- Moment last_mom_;
+ void do_start_note (Midi_note* note_p);
+ void do_stop_notes (Moment now_mom);
+ void output_event (Moment now_mom, Midi_item* l);
+
+ Midi_track* track_l_;
+ Audio_staff* staff_l_;
+ int index_;
+ Link_array<Audio_item> * item_l_arr_l_;
+ PQueue<Midi_note_event> stop_note_queue;
+ Moment last_mom_;
};
}
Midi_walker::Midi_walker (Audio_staff* audio_staff_l, Midi_track* track_l)
- : PCursor<Audio_item*>(audio_staff_l->audio_item_l_list_)
{
track_l_ = track_l;
+ index_= 0;
+ item_l_arr_l_ = &audio_staff_l->audio_item_l_arr_;
last_mom_ = 0;
}
void
Midi_walker::do_start_note (Midi_note* note_p)
{
- Moment stop_mom = note_p->length_mom () + ptr ()->audio_column_l_->at_mom ();
+ Audio_item* ptr = (*item_l_arr_l_)[index_];
+ Moment stop_mom = note_p->length_mom () + ptr->audio_column_l_->at_mom ();
for (int i=0; i < stop_note_queue.size(); i++)
{
if (stop_note_queue[i].val->pitch_i() == note_p->pitch_i ())
e.key = stop_mom;
stop_note_queue.insert (e);
- output_event (ptr()->audio_column_l_->at_mom (), note_p);
+ output_event (ptr->audio_column_l_->at_mom (), note_p);
}
/**
void
Midi_walker::process()
{
- do_stop_notes (ptr()->audio_column_l_->at_mom ());
+ Audio_item* ptr = (*item_l_arr_l_)[index_];
+ do_stop_notes (ptr->audio_column_l_->at_mom ());
- Midi_item* p = ptr()->midi_item_p ();
+ Midi_item* p = ptr->midi_item_p ();
if (!p)
return;
p->channel_i_ = track_l_->number_i_;
if (Midi_note *mi = dynamic_cast<Midi_note*>(p))
do_start_note (mi);
else
- output_event (ptr()->audio_column_l_->at_mom (), p);
+ output_event (ptr->audio_column_l_->at_mom (), p);
+}
+bool
+Midi_walker::ok () const
+{
+ return index_ <item_l_arr_l_->size ();
+}
+void
+Midi_walker::operator ++(int)
+{
+ assert (ok());
+ index_++;
}
-