X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fperformance.cc;h=f25b63eea11c5d25175cb7bb27007667938f3202;hb=da7dbf5f2f54bc66984ab2524c490335d567b5e7;hp=7ae2ea35bebd2862fdeba7a570924eb24b86596b;hpb=106e5978fe2fa568bbc6649bc8fcf1134307373a;p=lilypond.git diff --git a/lily/performance.cc b/lily/performance.cc index 7ae2ea35be..f25b63eea1 100644 --- a/lily/performance.cc +++ b/lily/performance.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--1998 Jan Nieuwenhuizen + (c) 1997--1999 Jan Nieuwenhuizen */ #include @@ -19,43 +19,60 @@ #include "performance.hh" #include "score.hh" #include "file-results.hh" +#include "lily-version.hh" + +#include "killing-cons.tcc" Performance::Performance () { midi_l_ =0; + audio_elem_p_list_ = 0; } -void -Performance::add_column (Audio_column* p) + +Performance::~Performance() { - p->performance_l_ = this; - audio_column_p_list_.bottom().add (p); + delete audio_elem_p_list_; } void -Performance::output (Midi_stream& midi_stream_r) +Performance::output (Midi_stream& midi_stream) { - int tracks_i = audio_staff_l_list_.size() + 1; + int tracks_i = audio_staff_l_arr_.size() + 1; + // ugh int clocks_per_4_i = 384; - midi_stream_r << Midi_header (1, tracks_i, clocks_per_4_i); - output_header_track (midi_stream_r); - int n = 1; - for (PCursor i (audio_staff_l_list_); i.ok(); i++) - i->output (midi_stream_r, n++); + + midi_stream << Midi_header (1, tracks_i, clocks_per_4_i); + output_header_track (midi_stream); + int channel = 1; + for (int i =0; i < audio_staff_l_arr_.size (); i++) + { + Audio_staff *s = audio_staff_l_arr_[i]; + + /* + Aargh, let's hear it for the MIDI standard. + MIDI players tend to ignore instrument settings on + channel 10, the percussion channel by default. + */ + if (channel == 9) + channel++; + s->output (midi_stream, channel++); + } } void -Performance::output_header_track (Midi_stream& midi_stream_r) +Performance::output_header_track (Midi_stream& midi_stream) { Midi_track midi_track; // perhaps multiple text events? String str = String (_("Creator: ")); if (no_timestamps_global_b) - str += "GNU LilyPond\n"; + str += gnu_lilypond_str (); else - str += get_version_str() + "\n"; + str += gnu_lilypond_version_str(); + str += "\n"; Midi_text creator (Midi_text::TEXT, str); midi_track.add (Moment (0), &creator); @@ -85,19 +102,21 @@ Performance::output_header_track (Midi_stream& midi_stream_r) Midi_tempo tempo (midi_l_->get_tempo_i (Moment (1, 4))); midi_track.add (Moment (0), &tempo); - midi_stream_r << midi_track; -} - -void -Performance::add_staff (Audio_staff* l) -{ - audio_staff_l_list_.bottom().add (l); + midi_stream << midi_track; } void Performance::add_element (Audio_element *p) { - audio_elem_p_list_.bottom().add (p); + if (Audio_staff*s=dynamic_cast (p)) + { + audio_staff_l_arr_.push (s); + } + else if (Audio_column *c = dynamic_cast(p)) + { + c->performance_l_ = this; + } + audio_elem_p_list_ = new Killing_cons (p, audio_elem_p_list_); } void @@ -106,13 +125,9 @@ Performance::print() const #ifndef NPRINT DOUT << "Performance { "; DOUT << "Items: "; - for (PCursor i (audio_elem_p_list_.top ()); i.ok (); i++) - i->print (); - - DOUT << "\ncolumns: "; - for (PCursor i (audio_column_p_list_); i.ok(); i++) - i->print(); - DOUT << "}\n"; + for (Cons* i =audio_elem_p_list_; i; i = i->next_) + i->car_->print (); + DOUT << "}"; #endif }