From: fred Date: Sun, 24 Mar 2002 19:53:42 +0000 (+0000) Subject: lilypond-0.1.7 X-Git-Tag: release/1.5.59~4123 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=762cf4c9eecd6cc3177eeac76f9b66bed9ed642c;p=lilypond.git lilypond-0.1.7 --- diff --git a/lily/audio-score.cc b/lily/audio-score.cc new file mode 100644 index 0000000000..27f82a0746 --- /dev/null +++ b/lily/audio-score.cc @@ -0,0 +1,112 @@ +/* + audio-score.cc -- implement Audio_score + + source file of the GNU LilyPond music typesetter + + (c) 1997 Jan Nieuwenhuizen +*/ + +#include +#include "debug.hh" +#include "string.hh" +#include "string-convert.hh" +#include "main.hh" +#include "midi-def.hh" +#include "midi-item.hh" +#include "midi-stream.hh" +#include "audio-column.hh" +#include "audio-staff.hh" +#include "audio-score.hh" +#include "score.hh" + +Audio_score::Audio_score( Score* l ) +{ + score_l_ = l; +} + +void +Audio_score::add( Audio_column* p ) +{ + p->audio_score_l_ = this; + audio_column_p_list_.bottom().add(p); +} + +void +Audio_score::output( Midi_stream& midi_stream_r ) +{ + int tracks_i = audio_staff_l_list_.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++ ); +} + +void +Audio_score::output_header_track( Midi_stream& midi_stream_r ) +{ + 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 ); + + Midi_tempo tempo( score_l_->midi_p_->get_tempo_i( Moment( 1, 4 ) ) ); + midi_track.add( Moment(0), &tempo); + + midi_stream_r << midi_track; +} + +void +Audio_score::add_staff( Audio_staff* l ) +{ + audio_staff_l_list_.bottom().add( l ); +} + +void +Audio_score::add(Audio_element *p) +{ + audio_elem_p_list_.bottom().add( p); +} + +void +Audio_score::print() const +{ +#ifndef NPRINT + mtor << "Audio_score { "; + score_l_->midi_p_->print(); + mtor << "\ncolumns: "; + for ( PCursor i( audio_column_p_list_ ); i.ok(); i++ ) + i->print(); + mtor << "}\n"; +#endif +} + +void +Audio_score::process() +{ +} + diff --git a/lily/include/score-performer.hh b/lily/include/score-performer.hh index 4a79cb1fb4..b0b584e72a 100644 --- a/lily/include/score-performer.hh +++ b/lily/include/score-performer.hh @@ -11,6 +11,9 @@ #include "performer-group-performer.hh" #include "global-translator.hh" +/** + Top level performer. Completely takes care of MIDI output + */ class Score_performer: public Performer_group_performer, public Global_translator { @@ -20,26 +23,22 @@ public: ~Score_performer(); protected: - virtual Translator* ancestor_l( int l ); + virtual Translator* ancestor_l(int l); virtual int depth_i() const; virtual void finish(); - virtual Moment get_mom() const; - virtual void prepare( Moment mom ); + virtual void prepare(Moment mom); virtual void process(); - virtual void set_score( Score* score_l ); + virtual void set_score(Score* score_l); virtual void start(); virtual int get_tempo_i() const; - virtual void play_event(Midi_item*); + virtual void play(Audio_element* p); + private: void header(Midi_stream&); - Midi_def* midi_l_; - - Moment prev_mom_; Moment now_mom_; - - Link_array midi_item_p_arr_; + Audio_column* audio_column_l_; }; #endif // SCORE_PERFORMER_HH diff --git a/lily/score-performer.cc b/lily/score-performer.cc index df8ff16747..ea27d507b8 100644 --- a/lily/score-performer.cc +++ b/lily/score-performer.cc @@ -1,151 +1,104 @@ /* score-performer.cc -- implement Score_performer + source file of the GNU LilyPond music typesetter + (c) 1996, 1997 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 "audio-score.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 "audio-staff.hh" IMPLEMENT_IS_TYPE_B1(Score_performer,Performer_group_performer); + ADD_THIS_PERFORMER(Score_performer); + Score_performer::Score_performer() { - midi_l_ = 0; } + Score_performer::~Score_performer() { } + Translator* -Score_performer::ancestor_l( int l ) +Score_performer::ancestor_l(int l) { - return Global_translator::ancestor_l( l ); + return Global_translator::ancestor_l(l); } + int Score_performer::depth_i() const { return Global_translator::depth_i(); } + void Score_performer::finish() { 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; - } - *output_stream.os_p_ << flush; - *mlog << endl; } -void -Score_performer::play_event(Midi_item*m) -{ - midi_item_p_arr_.push(m); -} - -Moment -Score_performer::get_mom() const -{ - return now_mom_; -} void -Score_performer::header(Midi_stream &output_stream) +Score_performer::play(Audio_element * p) { - 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 ); - - Midi_tempo tempo ( get_tempo_i()); - midi_track.add( Moment(0), &tempo); - - output_stream << midi_track; + if (p->is_type_b(Audio_item::static_name())) { + audio_column_l_->add( (Audio_item*)p); + } else if (p->is_type_b(Audio_staff::static_name())) { + score_l_->audio_score_p_->add_staff( (Audio_staff*)p ); + } + score_l_->audio_score_p_->add(p); } + void -Score_performer::prepare( Moment m ) +Score_performer::prepare(Moment m) { now_mom_ = m; + audio_column_l_ = new Audio_column(m); + score_l_->audio_score_p_->add(audio_column_l_); } + void Score_performer::process() { process_requests(); - prev_mom_ = now_mom_; } + void -Score_performer::set_score(Score* score_l ) +Score_performer::set_score(Score* score_l) { - Global_translator::set_score( score_l ); - midi_l_ = score_l->midi_p_; + Global_translator::set_score(score_l); } + void Score_performer::start() { - // - int track_i = 1; - Performer_group_performer::set_track( track_i ); - // - - if ( midi_l_->outfile_str_ == "" ) - midi_l_->outfile_str_ = default_out_fn + ".midi"; } int Score_performer::get_tempo_i()const { - return midi_l_->get_tempo_i(Moment( 1, 4 )); + return score_l_->midi_p_->get_tempo_i(Moment(1, 4)); } diff --git a/lily/staff-performer.cc b/lily/staff-performer.cc index 0d94d87ae7..3605653c38 100644 --- a/lily/staff-performer.cc +++ b/lily/staff-performer.cc @@ -1,67 +1,55 @@ /* staff-performer.cc -- implement Staff_performer - (c) 1996, 1997 Jan Nieuwenhuizen - */ + source file of the GNU LilyPond music typesetter + (c) 1997 Jan Nieuwenhuizen + */ #include "staff-performer.hh" #include "translator.hh" #include "input-translator.hh" #include "debug.hh" -#include "midi-def.hh" -#include "midi-item.hh" -#include "midi-stream.hh" -#include "string.hh" -#include "string-convert.hh" - +#include "audio-column.hh" +#include "audio-item.hh" +#include "audio-staff.hh" IMPLEMENT_IS_TYPE_B1(Staff_performer,Performer_group_performer); ADD_THIS_PERFORMER(Staff_performer); Staff_performer::Staff_performer() { - midi_mom_ = 0; - midi_track_p_ = new Midi_track; -} -void -Staff_performer::do_creation_processing() -{ - header(); -} - -void -Staff_performer::do_removal_processing() -{ - Performer::play_event( midi_track_p_); + audio_staff_p_ = 0; } Staff_performer::~Staff_performer() { - delete midi_track_p_; + delete audio_staff_p_; } void -Staff_performer::header() +Staff_performer::do_creation_processing() { - // set track name - Midi_text track_name( Midi_text::TRACK_NAME, instrument_str()); - midi_track_p_->add( Moment( 0 ), &track_name ); + audio_staff_p_ = new Audio_staff; + + // staff name + play(new Audio_text( Audio_text::TRACK_NAME, instrument_str())); - // set instrument description - Midi_text instrument_name( Midi_text::INSTRUMENT_NAME, instrument_str() ); - midi_track_p_->add( Moment( 0 ), &instrument_name ); + // instrument description + play(new Audio_text( Audio_text::INSTRUMENT_NAME, instrument_str())); - // set instrument :-) - // lieve wendy, nu heb je mijn track_i_ / get_staff_i weggehaald... - // zie ook note-performer: ugh - // ugh, need to know channel (===track===staff) too - int channel_i = track_i_; - Midi_instrument instrument( channel_i, instrument_str() ); - midi_track_p_->add( Moment( 0 ), &instrument ); + // tempo + play(new Audio_tempo(get_tempo_i())); - Midi_tempo midi_tempo( get_tempo_i( ) ); - midi_track_p_->add( Moment( 0 ), &midi_tempo ); + // instrument + play(new Audio_instrument(instrument_str())); +} + +void +Staff_performer::do_removal_processing() +{ + Performer::play( audio_staff_p_ ); + audio_staff_p_ = 0; } String @@ -71,26 +59,11 @@ Staff_performer::instrument_str() } void -Staff_performer::play_event( Midi_item* l ) -{ - Moment mom = get_mom(); - Moment delta_t = mom - midi_mom_ ; - midi_mom_ += delta_t; - midi_track_p_->add( delta_t, l); -} - - -// -int -Staff_performer::get_track_i() const -{ - return track_i_; -} - -void -Staff_performer::set_track( int& track_i_r ) +Staff_performer::play( Audio_element* p ) { - track_i_ = track_i_r++; + if (p->is_type_b(Audio_item::static_name())) { + audio_staff_p_->add((Audio_item*)p); + } + Performer::play(p); } -//