X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpiano-pedal-performer.cc;h=84f540f323b01b37b85cec059be1ae3da28be043;hb=refs%2Ftags%2Frelease%2F1.7.18;hp=6b1efab4358068a5129548572eb6d9b4570d124f;hpb=9661ba1fb275f3e14f8a69f2cee2f02a2f893e48;p=lilypond.git diff --git a/lily/piano-pedal-performer.cc b/lily/piano-pedal-performer.cc index 6b1efab435..84f540f323 100644 --- a/lily/piano-pedal-performer.cc +++ b/lily/piano-pedal-performer.cc @@ -3,15 +3,13 @@ source file of the GNU LilyPond music typesetter - (c) 2000 Jan Nieuwenhuizen + (c) 2000--2003 Jan Nieuwenhuizen */ #include "performer.hh" -#include "command-request.hh" -#include "musical-request.hh" + +#include "event.hh" #include "audio-item.hh" -#include "dictionary.hh" -#include "dictionary-iter.hh" /** perform Piano pedals @@ -21,104 +19,103 @@ class Piano_pedal_performer : public Performer struct Pedal_info { char const *name_; - Span_req* start_req_l_; - Drul_array req_l_drul_; + Music* start_req_; + Drul_array req_l_drul_; }; public: - VIRTUAL_COPY_CONS (Translator); - Piano_pedal_performer (); + TRANSLATOR_DECLARATIONS(Piano_pedal_performer); ~Piano_pedal_performer (); protected: - virtual void do_creation_processing (); - virtual bool do_try_music (Music*); - virtual void do_process_music (); - virtual void do_pre_move_processing (); - virtual void do_post_move_processing (); + virtual void initialize (); + virtual bool try_music (Music*); + virtual void create_audio_elements (); + virtual void stop_translation_timestep (); + virtual void start_translation_timestep (); private: - Link_array audio_p_arr_; + Link_array audios_; Pedal_info * info_alist_; }; -ADD_THIS_TRANSLATOR (Piano_pedal_performer); - Piano_pedal_performer::Piano_pedal_performer () { info_alist_ = 0; } -Piano_pedal_performer::~Piano_pedal_performer() +Piano_pedal_performer::~Piano_pedal_performer () { delete[] info_alist_; } void -Piano_pedal_performer::do_creation_processing () +Piano_pedal_performer::initialize () { info_alist_ = new Pedal_info[4]; Pedal_info *p = info_alist_; - char * names [] = { "Sostenuto", "Sustain", "UnaChorda", 0 }; + char * names [] = { "Sostenuto", "Sustain", "UnaCorda", 0 }; char **np = names ; do { p->name_ = *np; p->req_l_drul_[START] = 0; p->req_l_drul_[STOP] = 0; - p->start_req_l_ = 0; + p->start_req_ = 0; p++; } - while (*(np ++)); + while (* (np ++)); } void -Piano_pedal_performer::do_process_music () +Piano_pedal_performer::create_audio_elements () { - for (Pedal_info*p = info_alist_; p->name_; p ++) + for (Pedal_info*p = info_alist_; p && p->name_; p ++) { if (p->req_l_drul_[STOP]) { - if (!p->start_req_l_) + if (!p->start_req_) { - p->req_l_drul_[STOP]->origin ()->warning (_f ("can't find start of piano pedal: %s", String (p->name_))); + p->req_l_drul_[STOP]->origin ()->warning (_f ("can't find start of piano pedal: `%s'", String (p->name_))); } else { Audio_piano_pedal* a = new Audio_piano_pedal; - a->type_str_ = String (p->name_); + a->type_string_ = String (p->name_); a->dir_ = STOP; - audio_p_arr_.push (a); + audios_.push (a); } - p->start_req_l_ = 0; + p->start_req_ = 0; } if (p->req_l_drul_[START]) { - p->start_req_l_ = p->req_l_drul_[START]; + p->start_req_ = p->req_l_drul_[START]; Audio_piano_pedal* a = new Audio_piano_pedal; - a->type_str_ = String (p->name_); + a->type_string_ = String (p->name_); a->dir_ = START; - audio_p_arr_.push (a); + audios_.push (a); } + p->req_l_drul_[START] = 0; + p->req_l_drul_[STOP] = 0; } } void -Piano_pedal_performer::do_pre_move_processing () +Piano_pedal_performer::stop_translation_timestep () { - for (int i=0; i< audio_p_arr_.size (); i++) - play_element (audio_p_arr_[i]); - audio_p_arr_.clear (); + for (int i=0; i< audios_.size (); i++) + play_element (audios_[i]); + audios_.clear (); } void -Piano_pedal_performer::do_post_move_processing () +Piano_pedal_performer::start_translation_timestep () { - for (Pedal_info*p = info_alist_; p->name_; p ++) + for (Pedal_info*p = info_alist_; p && p->name_; p ++) { p->req_l_drul_[STOP] = 0; p->req_l_drul_[START] = 0; @@ -126,18 +123,25 @@ Piano_pedal_performer::do_post_move_processing () } bool -Piano_pedal_performer::do_try_music (Music* r) +Piano_pedal_performer::try_music (Music* r) { - if (Span_req * s = dynamic_cast(r)) + if (r->is_mus_type ("pedal-event")) { for (Pedal_info*p = info_alist_; p->name_; p ++) { - if (s->span_type_str_ == String (p->name_)) + String nm = p->name_ + String ("Event"); + if (gh_equal_p (r->get_mus_property ("name") , + scm_makfrom0str (nm.to_str0()))) { - p->req_l_drul_[s->span_dir_] = s; + Direction d = to_dir (r->get_mus_property ("span-direction")); + p->req_l_drul_[d] = r; return true; } } } return false; } + +ENTER_DESCRIPTION (Piano_pedal_performer, "","", + "pedal-event", + "","","" );