notes.
Moment when () const;
vector<Audio_item*> 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
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
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_staff*> audio_staffs_;
vector<Audio_element*> audio_elements_;
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);
Moment
Midi_note::get_length () const
{
- Moment m = audio_->length_mom_;
+ Moment m = audio_->end_column_->when () - audio_->audio_column_->when ();
return m;
}
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)
{
}
void
-Performance::output (Midi_stream &midi_stream)
+Performance::output (Midi_stream &midi_stream) const
{
int tracks_ = audio_staffs_.size ();
}
void
-Performance::write_output (string out)
+Performance::write_output (string out) const
{
if (out == "-")
out = "lelie.midi";
}
+void
+Performance::remap_grace_durations ()
+{
+ for (vsize i = 0; i < audio_elements_.size (); i++)
+ {
+ if (Audio_column * col = dynamic_cast<Audio_column*> (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 ();
+}
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);
}