X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftie-performer.cc;h=ba7954e995724678d1cf62e55053bc7aac9dead0;hb=47db9a3883d726ca53e2133a3b2298f78dd6a32e;hp=c53ddeac7b359a24e26656f150c5237f3e3c3410;hpb=f93e4199873c91ae32f0e84a610d14853dc379df;p=lilypond.git diff --git a/lily/tie-performer.cc b/lily/tie-performer.cc index c53ddeac7b..ba7954e995 100644 --- a/lily/tie-performer.cc +++ b/lily/tie-performer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2011 Han-Wen Nienhuys + Copyright (C) 1998--2015 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -110,8 +110,32 @@ Tie_performer::acknowledge_audio_element (Audio_element_info inf) // (*it).moment_ already stores the end of the tied note! Moment skip = now_mom () - (*it).end_moment_; an->tie_to (th, skip); - // this invalidates the iterator, we are leaving the loop anyway - heads_to_tie_.erase (it); + it = heads_to_tie_.erase (it); + } + } + if (found) + return; + for (it = heads_to_tie_.begin (); + !found && (it != heads_to_tie_.end ()); + it++) + { + Audio_element_info et = (*it).head_; + Audio_note *th = dynamic_cast (et.elem_); + Stream_event *left_mus = et.event_; + + if (!(th && right_mus && left_mus)) + continue; + + SCM p1 = left_mus->get_property ("pitch"); + SCM p2 = right_mus->get_property ("pitch"); + if (Pitch::is_smob (p1) && Pitch::is_smob (p2) + && Pitch::unsmob (p1)->tone_pitch () == Pitch::unsmob (p2)->tone_pitch ()) + { + found = true; + // (*it).moment_ already stores the end of the tied note! + Moment skip = now_mom () - (*it).end_moment_; + an->tie_to (th, skip); + it = heads_to_tie_.erase (it); } } }