X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fscore-performer.cc;h=97afb37573231b12e3581a33fbdc25b213b578dc;hb=388121aed1734e9e536ede58bd3de98b68367842;hp=5d3c98b84263ed13a54cdd8924ad108c59f1de91;hpb=6dc4e4d14a67f65f337ec1a06466e748c68dcad5;p=lilypond.git diff --git a/lily/score-performer.cc b/lily/score-performer.cc index 5d3c98b842..97afb37573 100644 --- a/lily/score-performer.cc +++ b/lily/score-performer.cc @@ -1,143 +1,99 @@ /* score-performer.cc -- implement Score_performer - (c) 1996, 1997 Jan Nieuwenhuizen + source file of the GNU LilyPond music typesetter + + (c) 1996--2004 Jan Nieuwenhuizen */ -#include #include "score-performer.hh" -#include "input-translator.hh" -#include "midi-def.hh" -#include "midi-item.hh" + +#include "audio-column.hh" +#include "audio-item.hh" +#include "performance.hh" #include "midi-stream.hh" #include "string-convert.hh" -#include "debug.hh" -#include "main.hh" -#include "score.hh" -#include "source-file.hh" -#include "source.hh" +#include "warn.hh" +#include "context-def.hh" +#include "output-def.hh" -IMPLEMENT_IS_TYPE_B1(Score_performer,Performer_group_performer); -ADD_THIS_PERFORMER(Score_performer); +ADD_TRANSLATOR (Score_performer, +/* descr */ "", +/* creats*/ "", +/* accepts */ "", +/* acks */ "", +/* reads */ "", +/* write */ ""); -Score_performer::Score_performer() -{ - midi_l_ = 0; -} -Score_performer::~Score_performer() +Score_performer::Score_performer () { + performance_ = 0; } -Translator* -Score_performer::ancestor_l( int l ) -{ - return Global_translator::ancestor_l( l ); -} -int -Score_performer::depth_i() const -{ - return Global_translator::depth_i(); +Score_performer::~Score_performer () +{ } void -Score_performer::finish() +Score_performer::play_element (Audio_element * p) { - Performer_group_performer::do_removal_processing(); - - - Midi_stream output_stream( midi_l_->outfile_str_, midi_item_p_arr_.size() + 1, 384 ); - *mlog << "MIDI output to " << midi_l_->outfile_str_ << " ..." << endl; - - header( output_stream); - int track_i = 1; - for (int i=0; i< midi_item_p_arr_.size(); i++) { - Midi_item * it_p = midi_item_p_arr_[i]; - - if ( it_p->is_type_b( Midi_track::static_name())) - ((Midi_track*)it_p )->number_i_ = track_i ++; - output_stream<< *it_p; + if (Audio_item * i = dynamic_cast (p)) + { + audio_column_->add_audio_item (i); } - *output_stream.os_p_ << flush; - *mlog << endl; + performance_->add_element (p); } void -Score_performer::play_event(Midi_item*m) +Score_performer::announce_element (Audio_element_info info) { - midi_item_p_arr_.push(m); + announce_infos_.push (info); } -Moment -Score_performer::get_mom() const +void +Score_performer::prepare (Moment m) { - return now_mom_; + audio_column_ = new Audio_column (m); + play_element (audio_column_); + recurse_over_translators (context (), &Translator::start_translation_timestep, UP); } void -Score_performer::header(Midi_stream &output_stream) +Score_performer::finish () { - Midi_track midi_track; - - time_t t = time( 0 ); - - // perhaps multiple text events? - String str = String( "Creator: " ) + get_version_str() + "\n"; - - Midi_text creator( Midi_text::TEXT, str ); - midi_track.add( Moment( 0 ), &creator ); - - str = "Automatically generated at "; - str += ctime( &t ); - str = str.left_str( str.length_i() - 1 ); - str += "\n"; - Midi_text generate( Midi_text::TEXT, str ); - midi_track.add( Moment( 0 ), &generate ); - - str = "from musical definition: "; - - str += score_l_->location_str(); - Midi_text from( Midi_text::TEXT, str ); - midi_track.add( Moment( 0 ), &from ); - - Midi_text track_name( Midi_text::TRACK_NAME, "Track " - + String_convert::i2dec_str( 0, 0, '0' ) ); - midi_track.add( Moment( 0 ), &track_name ); - - output_stream << midi_track; + recurse_over_translators (context (), &Translator::finalize, UP); } - + void -Score_performer::prepare( Moment m ) +Score_performer::one_time_step () { - now_mom_ = m; + recurse_over_translators (context (), &Performer::process_music, UP); + recurse_over_translators (context (), &Performer::do_announces, UP); + recurse_over_translators (context (), &Translator::stop_translation_timestep, UP); } -void -Score_performer::process() +int +Score_performer::get_tempo () const { - process_requests(); - prev_mom_ = now_mom_; + return ::get_tempo (performance_->midi_, Moment (Rational (1, 4))); } -void -Score_performer::set_score(Score* score_l ) + +Music_output * +Score_performer::get_output () { - Global_translator::set_score( score_l ); - midi_l_ = score_l->midi_p_; + Music_output * o = performance_; + performance_ = 0; + return o; } void -Score_performer::start() +Score_performer::initialize () { - if ( midi_l_->outfile_str_ == "" ) - midi_l_->outfile_str_ = default_out_fn + ".midi"; -} + performance_ = new Performance; + performance_->midi_ = get_output_def (); - -int -Score_performer::get_tempo_i()const -{ - return midi_l_->get_tempo_i(Moment( 1, 4 )); + Translator_group::initialize (); }