+2006-09-04 Michael Welsh Duggan <md5i@cs.cmu.edu>
+
+ * lily/tie-performer.cc: remove unused last_event_ property.
+ (class Tie_performer): add now_tied_heads_ property for
+ partially-tied heads.
+ (acknowledge_audio_element): when adding an Audio_note, put the
+ note in now_tied_heads_ if the audio note is partially tied.
+ (stop_translation_timestep): always include entries in
+ now_tied_heads_ in heads_to_tie_.
+
+ * lily/drum-note-performer.cc (process_music): look for tie-events
+ in the articulations; pass to Audio_note constructor.
+
+ * lily/note-performer.cc (process_music): look for tie-events in
+ the articulations; pass to Audio_note constructor.
+
+ * lily/audio-item.cc (Audio_note): Initialize tie_event_ in
+ constructor.
+
+ * lily/include/audio-item.hh (class Audio_note): add tie_event_.
+ include initializer in constructor.
+
2006-09-02 Joe Neeman <joeneeman@gmail.com>
* lily/simple-spacer.cc (get_line_forces): Ignore loose columns
audio_column_ = 0;
}
-Audio_note::Audio_note (Pitch p, Moment m, int transposing_i)
+Audio_note::Audio_note (Pitch p, Moment m, bool tie_event, int transposing_i)
{
pitch_ = p;
length_mom_ = m;
tied_ = 0;
transposing_ = transposing_i;
+ tie_event_ = tie_event;
}
void
#include "audio-item.hh"
#include "audio-column.hh"
#include "global-context.hh"
+#include "music.hh"
#include "pitch.hh"
#include "stream-event.hh"
#include "translator.icc"
if (Pitch *pit = unsmob_pitch (defn))
{
- Audio_note *p = new Audio_note (*pit, get_event_length (n), 0);
+ SCM articulations = n->get_property ("articulations");
+ Music *tie_event = 0;
+ for (SCM s = articulations;
+ !tie_event && scm_is_pair (s);
+ s = scm_cdr (s))
+ {
+ Music *m = unsmob_music (scm_car (s));
+ if (!m)
+ continue;
+
+ if (m->is_mus_type ("tie-event"))
+ tie_event = m;
+ }
+
+ Audio_note *p = new Audio_note (*pit, get_event_length (n),
+ tie_event, 0);
Audio_element_info info (p, n);
announce_element (info);
notes_.push_back (p);
class Audio_note : public Audio_item
{
public:
- Audio_note (Pitch p, Moment m, int transposing_i = 0);
+ Audio_note (Pitch p, Moment m, bool tie_event, int transposing_i);
void tie_to (Audio_note *);
Moment length_mom_;
int transposing_;
Audio_note *tied_;
+ bool tie_event_;
};
class Audio_piano_pedal : public Audio_item
#include "audio-item.hh"
#include "audio-column.hh"
#include "global-context.hh"
+#include "music.hh"
#include "stream-event.hh"
#include "warn.hh"
if (Pitch *pitp = unsmob_pitch (pit))
{
- Audio_note *p = new Audio_note (*pitp, get_event_length (n), - transposing);
+ SCM articulations = n->get_property ("articulations");
+ Music *tie_event = 0;
+ for (SCM s = articulations;
+ !tie_event && scm_is_pair (s);
+ s = scm_cdr (s))
+ {
+ Music *m = unsmob_music (scm_car (s));
+ if (!m)
+ continue;
+
+ if (m->is_mus_type ("tie-event"))
+ tie_event = m;
+ }
+
+ Audio_note *p = new Audio_note (*pitp, get_event_length (n),
+ tie_event, - transposing);
Audio_element_info info (p, n);
announce_element (info);
notes_.push_back (p);
class Tie_performer : public Performer
{
Stream_event *event_;
- Stream_event *last_event_;
vector<Audio_element_info> now_heads_;
+ vector<Audio_element_info> now_tied_heads_;
vector<Audio_element_info> heads_to_tie_;
bool ties_created_;
Tie_performer::Tie_performer ()
{
event_ = 0;
- last_event_ = 0;
ties_created_ = false;
}
{
if (Audio_note *an = dynamic_cast<Audio_note *> (inf.elem_))
{
- now_heads_.push_back (inf);
+ if (an->tie_event_)
+ now_tied_heads_.push_back (inf);
+ else
+ now_heads_.push_back (inf);
+
for (vsize i = heads_to_tie_.size (); i--;)
{
Stream_event *right_mus = inf.event_;
if (ties_created_)
{
heads_to_tie_.clear ();
- last_event_ = 0;
ties_created_ = false;
}
if (event_)
{
heads_to_tie_ = now_heads_;
- last_event_ = event_;
}
+
+ for (vsize i = now_tied_heads_.size(); i--;)
+ heads_to_tie_.push_back (now_tied_heads_[i]);
+
event_ = 0;
now_heads_.clear ();
+ now_tied_heads_.clear ();
}
ADD_TRANSLATOR (Tie_performer,