The Lyric_combine_music_iterator had an explicit check if the CreateContext
event was really for a context of type "Voice". Unfortunately, that
check fails if the lyrics are supposed to be attached to a CueVoice
context (or some self-defined Voice-derived context!), because
"CueVoice"!="Voice".
Unfortunately, I don't know how to check whether a context "CVoice"
(identified only by a the context type string; we don't have any
Context* object!) is an alias for Voice. If we had the Context* object,
we could use is_alias, but we only have the string "CVoice" and need to
check if a context of that type is an alias for "Voice".
However, I don't think that check is necessary at all. It simply prevents
find_voice from being called in cases when no Voice is generated (and thus
no new context to possibly attach the lyrics to). If that check is removed,
find_voice will also be called for any other context created while
waiting for a voice to attach the lyrics to, but it will not find an
appropriate voice anyway.
--- /dev/null
+\version "2.15.4"
+\header {
+ texidoc = "For Voice-derived contexts like CueVoice, the lyrics should
+still start with the first note."
+}
+
+\score {
+ \new Staff <<
+ \new Voice \relative c'' {
+ g2
+ <<
+ { \voiceOne r2 }
+ \new CueVoice = "cue" { \voiceTwo g4 g }
+ >>
+ }
+ \context Lyrics \lyricsto "cue" { A B }
+ >>
+}
if (!ok ())
return ;
- // TODO: Check first if type=Voice and if id matches
- Stream_event * ev = unsmob_stream_event (sev);
- if (ev->get_property ("type") != ly_symbol2scm ("Voice"))
- return ;
-
+ // Search for a possible candidate voice to attach the lyrics to. If none
+ // is found, we'll try next time again.
Context *voice = find_voice ();
-
if (voice)
{
set_music_context (voice);