From: Han-Wen Nienhuys Date: Thu, 11 Jan 2007 12:51:35 +0000 (+0100) Subject: Performance::remap_grace_durations(): robust way of handling grace X-Git-Tag: release/2.11.11-1~7 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=49ec27a164a91714ebf51989652520ec3f62b973;p=lilypond.git Performance::remap_grace_durations(): robust way of handling grace notes. --- diff --git a/lily/include/audio-column.hh b/lily/include/audio-column.hh index d71e9f5325..cefa44f5a8 100644 --- a/lily/include/audio-column.hh +++ b/lily/include/audio-column.hh @@ -25,15 +25,12 @@ public: Moment when () const; vector audio_items_; + Moment when_; protected: void offset_when (Moment m); friend class Score_performer; -private: - Audio_column (Audio_column const &); - - Moment when_; }; #endif // AUDIO_COLUMN_HH diff --git a/lily/include/audio-element.hh b/lily/include/audio-element.hh index 0e430aea2b..dac7bddd54 100644 --- a/lily/include/audio-element.hh +++ b/lily/include/audio-element.hh @@ -17,9 +17,8 @@ public: Audio_element (); virtual ~Audio_element (); - VIRTUAL_COPY_CONSTRUCTOR(Audio_element, Audio_element); + DECLARE_CLASSNAME(Audio_element); virtual char const *name () const; -protected: }; #endif // AUDIO_ELEMENT_HH diff --git a/lily/include/performance.hh b/lily/include/performance.hh index 582ec4dbfc..7aa90ca511 100644 --- a/lily/include/performance.hh +++ b/lily/include/performance.hh @@ -19,12 +19,13 @@ public: DECLARE_CLASSNAME(Performance); void add_element (Audio_element *p); - - void output (Midi_stream &midi_stream_r); - void output_header_track (Midi_stream &midi_stream_r); + virtual void process (); + void remap_grace_durations (); + void output (Midi_stream &midi_stream) const; + void output_header_track (Midi_stream &midi_stream) const; void print () const; - void write_output (string filename); + void write_output (string filename) const; vector audio_staffs_; vector audio_elements_; diff --git a/lily/midi-item.cc b/lily/midi-item.cc index 1f4b233406..ebbb20aeec 100644 --- a/lily/midi-item.cc +++ b/lily/midi-item.cc @@ -96,14 +96,12 @@ Midi_event::Midi_event (Moment delta_mom, Midi_item *midi) midi_ = midi; } -/* - ugh. midi output badly broken since grace note hackage. -*/ string Midi_event::to_string () const { - Rational rat_dt = (delta_mom_.main_part_ * Rational (384) - + delta_mom_.grace_part_ * Rational (100)) * Rational (4); + assert (delta_mom_.grace_part_ == Rational (0)); + + Rational rat_dt = delta_mom_.main_part_ * Rational (384) * Rational (4); int delta = rat_dt.to_int (); string delta_string = Midi_item::i2varint_string (delta); @@ -248,7 +246,7 @@ Midi_note::Midi_note (Audio_note *a) Moment Midi_note::get_length () const { - Moment m = audio_->length_mom_; + Moment m = audio_->end_column_->when () - audio_->audio_column_->when (); return m; } diff --git a/lily/midi-walker.cc b/lily/midi-walker.cc index 2a37d3d0bd..3bdc426be0 100644 --- a/lily/midi-walker.cc +++ b/lily/midi-walker.cc @@ -63,7 +63,8 @@ Midi_walker::do_start_note (Midi_note *note) for (vsize i = 0; i < stop_note_queue.size (); i++) { /* if this pith already in queue */ - if (stop_note_queue[i].val->get_semitone_pitch () == note->get_semitone_pitch ()) + if (stop_note_queue[i].val->get_semitone_pitch () + == note->get_semitone_pitch ()) { if (stop_note_queue[i].key < stop_mom) { diff --git a/lily/performance.cc b/lily/performance.cc index 6a03b02ea4..78070a064a 100644 --- a/lily/performance.cc +++ b/lily/performance.cc @@ -34,7 +34,7 @@ Performance::~Performance () } void -Performance::output (Midi_stream &midi_stream) +Performance::output (Midi_stream &midi_stream) const { int tracks_ = audio_staffs_.size (); @@ -89,7 +89,7 @@ Performance::add_element (Audio_element *p) } void -Performance::write_output (string out) +Performance::write_output (string out) const { if (out == "-") out = "lelie.midi"; @@ -107,3 +107,21 @@ Performance::write_output (string out) } +void +Performance::remap_grace_durations () +{ + for (vsize i = 0; i < audio_elements_.size (); i++) + { + if (Audio_column * col = dynamic_cast (audio_elements_[i])) + { + col->when_.main_part_ = col->when_.main_part_ + Rational (1,4) * col->when_.grace_part_; + col->when_.grace_part_ = Rational (0); + } + } +} + +void +Performance::process () +{ + remap_grace_durations (); +} diff --git a/lily/score-performer.cc b/lily/score-performer.cc index 635f82bc56..99d2f84967 100644 --- a/lily/score-performer.cc +++ b/lily/score-performer.cc @@ -92,6 +92,7 @@ Score_performer::prepare (SCM sev) SCM sm = ev->get_property ("moment"); Moment *m = unsmob_moment (sm); audio_column_ = new Audio_column (*m); + announce_element (Audio_element_info (audio_column_, 0)); precomputed_recurse_over_translators (context (), START_TRANSLATION_TIMESTEP, UP); }