Is there an existing issue for this?
Current Behavior
When a lyric syllable is attached to a tie-destination / continuation note, alphaTab appears to render that lyric on the tied continuation beat instead of carrying it forward to the next fresh note attack.
This causes the lyric stream to drift out of alignment after held notes. In my test case, the lyric “sease” which is part of the word disease but the lyric reads as "di - sease" is held across a tied note, but the next lyric “Yeah,” is rendered on the tie destination. After that point, following syllables are shifted until the phrase is corrected manually.|
Here is the first image that shows this clearly:
I compared the same GP file against other players and being a singer myself I knew there are rests or breaths between these lyrics, and on the other players they appear to treat the tied continuation as a held/extender position rather than a new lyric attack. You can see that here:
I tested once again on my Labs Native alphaTab Repo and confirmed the same issue the first screenshot:
And you can see the syllables or renderer does not know when to shift the lyrics or that any lyrics are held when there is a (4) tie in note or continued note as we can. Eventually what happens is one by one the lyrics start to fall a note behind as each tie destination or continuation note is played. Before you know it the lyrics are now 5 notes behind.
Lastly, we found a way to fix this and to carry the lyrics forward:
Expected Behavior
Lyrics should align to fresh note attacks, not tied continuation notes.
If a beat is only a tie destination / continuation of a held note, it should not consume the next lyric syllable. The lyric should be carried forward to the next real note attack, while the tied note behaves more like a lyric extender / held position.
Steps To Reproduce
- Load a GP file with lyrics and tied / held vocal notes.
- Use alphaTab with EffectLyrics enabled.
- Find a phrase where one lyric syllable is sustained across a tied note.
- Compare the lyric placement against Songsterr or Guitar Pro-style lyric phrasing.
- Notice that alphaTab places the next lyric syllable on the tie-destination beat instead of the next fresh note attack.
In my test file, the affected phrase is around the lyric “di-sease / Yeah,” where “sease” is held, but “Yeah,” is placed on the tied continuation note.
Link to jsFiddle, CodePen, Project
No response
Version and Environment
alphaTab v1.8.1
webpack v1.8.1
Chrome Browser
Next.js
Platform
Web
Anything else?
I used a probe to inspect the beat data and found this pattern:
tick: 68640
lyric0: "sease"
isTieOrigin: true
isTieDestination: false
tick: 69120
lyric0: "Yeah,"
isTieDestination: true
tieOrigin: true
So the next lyric token is being attached to a tie-destination / continuation beat.
As a workaround in our player, we tested a small carry-queue approach:
- If a lyric lands on a continuation beat, queue it instead of rendering it there.
- Skip rests.
- Render queued lyrics on the next fresh note attack.
- If that beat also has its own lyric, carry that lyric forward to the next valid beat.
This restored the lyric alignment to match the Songsterr reference in the affected phrase.
I can provide the test GP file, screenshots, video, and a PR with the carry-queue style fix if this seems like the right direction.
Related note: I also noticed a separate layout behavior where alphaTab renders EffectLyrics above the tab staff, which creates a large upper lyric lane. In Guitar Pro, lyrics can be positioned under the tab staff in certain layouts, and Songsterr-style tab rendering also places lyrics below the staff. I may open a separate issue for that so this ticket can stay focused on the tied-note lyric drift.
Is there an existing issue for this?
Current Behavior
When a lyric syllable is attached to a tie-destination / continuation note, alphaTab appears to render that lyric on the tied continuation beat instead of carrying it forward to the next fresh note attack.
This causes the lyric stream to drift out of alignment after held notes. In my test case, the lyric “sease” which is part of the word disease but the lyric reads as "di - sease" is held across a tied note, but the next lyric “Yeah,” is rendered on the tie destination. After that point, following syllables are shifted until the phrase is corrected manually.|
Here is the first image that shows this clearly:
I compared the same GP file against other players and being a singer myself I knew there are rests or breaths between these lyrics, and on the other players they appear to treat the tied continuation as a held/extender position rather than a new lyric attack. You can see that here:
I tested once again on my Labs Native alphaTab Repo and confirmed the same issue the first screenshot:
And you can see the syllables or renderer does not know when to shift the lyrics or that any lyrics are held when there is a (4) tie in note or continued note as we can. Eventually what happens is one by one the lyrics start to fall a note behind as each tie destination or continuation note is played. Before you know it the lyrics are now 5 notes behind.
Lastly, we found a way to fix this and to carry the lyrics forward:
Expected Behavior
Lyrics should align to fresh note attacks, not tied continuation notes.
If a beat is only a tie destination / continuation of a held note, it should not consume the next lyric syllable. The lyric should be carried forward to the next real note attack, while the tied note behaves more like a lyric extender / held position.
Steps To Reproduce
In my test file, the affected phrase is around the lyric “di-sease / Yeah,” where “sease” is held, but “Yeah,” is placed on the tied continuation note.
Link to jsFiddle, CodePen, Project
No response
Version and Environment
Platform
Web
Anything else?
I used a probe to inspect the beat data and found this pattern:
tick: 68640
lyric0: "sease"
isTieOrigin: true
isTieDestination: false
tick: 69120
lyric0: "Yeah,"
isTieDestination: true
tieOrigin: true
So the next lyric token is being attached to a tie-destination / continuation beat.
As a workaround in our player, we tested a small carry-queue approach:
This restored the lyric alignment to match the Songsterr reference in the affected phrase.
I can provide the test GP file, screenshots, video, and a PR with the carry-queue style fix if this seems like the right direction.
Related note: I also noticed a separate layout behavior where alphaTab renders EffectLyrics above the tab staff, which creates a large upper lyric lane. In Guitar Pro, lyrics can be positioned under the tab staff in certain layouts, and Songsterr-style tab rendering also places lyrics below the staff. I may open a separate issue for that so this ticket can stay focused on the tied-note lyric drift.