X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fscore-performer.cc;h=31f9ecdade04ba9b4ff72a8c71110e838e665384;hb=8d42f330d9a6ca0111ef66ce349a42751d686582;hp=2e3853964609b2f35fb0a7b037405afbbc23f7e0;hpb=06808d259c01da500d09bef741ec99a7cadf95f9;p=lilypond.git diff --git a/lily/score-performer.cc b/lily/score-performer.cc index 2e38539646..31f9ecdade 100644 --- a/lily/score-performer.cc +++ b/lily/score-performer.cc @@ -1,146 +1,96 @@ /* score-performer.cc -- implement Score_performer - (c) 1996, 1997 Jan Nieuwenhuizen - */ + source file of the GNU LilyPond music typesetter + + (c) 1996--2005 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" - -IMPLEMENT_IS_TYPE_B1(Score_performer,Performer_group_performer); -IMPLEMENT_STATIC_NAME(Score_performer); -ADD_THIS_PERFORMER(Score_performer); - -Score_performer::Score_performer() +#include "warn.hh" +#include "context-def.hh" +#include "output-def.hh" + +ADD_TRANSLATOR (Score_performer, + /* descr */ "", + /* creats*/ "", + /* accepts */ "", + /* acks */ "", + /* reads */ "", + /* write */ ""); + +Score_performer::Score_performer () { - midi_stream_p_ = 0; - midi_l_ = 0; + performance_ = 0; } -Score_performer::~Score_performer() +Score_performer::~Score_performer () { - delete midi_stream_p_; -} - -Translator* -Score_performer::ancestor_l( int l ) -{ - return Global_translator::ancestor_l( l ); } -int -Score_performer::depth_i() const -{ - return Global_translator::depth_i(); +void +Score_performer::play_element (Audio_element *p) +{ + if (Audio_item *i = dynamic_cast (p)) + { + audio_column_->add_audio_item (i); + } + performance_->add_element (p); } void -Score_performer::finish() +Score_performer::announce_element (Audio_element_info info) { - *mlog << "MIDI output to " << midi_l_->outfile_str_ << " ..." << endl; - *mlog << "tracks: "; - header(); - Performer_group_performer::midi_output( midi_stream_p_ ); - *mlog << endl; + 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() +Score_performer::finish () { - int track_i = 0; - Midi_track midi_track( track_i ); - - 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 = "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: "; -#if 0 - Source_file* sourcefile_l = source_l_g->sourcefile_l( score_l_->defined_ch_C_ ); - if ( sourcefile_l ) - str += sourcefile_l->name_str(); -#elif 1 - str += score_l_->location_str(); -#else - str += score_l_-> -#endif - Midi_text from( Midi_text::TEXT, str ); - midi_track.add( Moment( 0 ), &from ); - - // set track name - Midi_text track_name( Midi_text::TRACK_NAME, "Track " + String_convert::i2dec_str( 0, 0, '0' ) ); - midi_track.add( Moment( 0 ), &track_name ); - - // ugh, to please lily when reparsing mi2mu output. - // lily currently barfs when no meter present. - /* are you sure? init is to 4/4 HWN */ - Midi_time midi_time( 4, 4, 18 ); - midi_track.add( Moment( 0.0 ), &midi_time ); - - *mlog << "[" << track_i << "]"; - *midi_stream_p_ << midi_track; + recurse_over_translators (context (), &Translator::finalize, UP); } -void -Score_performer::prepare( Moment m ) +void +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 () { - /* - why's there no start() when there's a finish()? - let's misuse this for start() - */ - 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 () { - int track_i = 1; - Performer_group_performer::set_track( midi_l_, track_i ); + performance_ = new Performance; + performance_->midi_ = get_output_def (); - if ( midi_l_->outfile_str_ == "" ) - midi_l_->outfile_str_ = default_out_fn + ".midi"; - - midi_stream_p_ = new Midi_stream( midi_l_->outfile_str_, track_i, 384 ); + Translator_group::initialize (); } -