Title: GP5 with 3x repeats: tickCache.findBeat resolves to wrong (earlier) repeat pass after seek, causing playback/visual desync (“Extreme – Rise”) · Issue #2548 · CoderLine/alphaTab · GitHub
Open Graph Title: GP5 with 3x repeats: tickCache.findBeat resolves to wrong (earlier) repeat pass after seek, causing playback/visual desync (“Extreme – Rise”) · Issue #2548 · CoderLine/alphaTab
X Title: GP5 with 3x repeats: tickCache.findBeat resolves to wrong (earlier) repeat pass after seek, causing playback/visual desync (“Extreme – Rise”) · Issue #2548 · CoderLine/alphaTab
Description: Is there an existing issue for this? I have searched the existing issues Current Behavior Tick-to-Beat Resolution Failure: https://youtu.be/stt11W1L2OQ When loading the GP5 file “Extreme – Rise” (contains a repeated section M25-M26, e.g....
Open Graph Description: Is there an existing issue for this? I have searched the existing issues Current Behavior Tick-to-Beat Resolution Failure: https://youtu.be/stt11W1L2OQ When loading the GP5 file “Extreme – Rise” (c...
X Description: Is there an existing issue for this? I have searched the existing issues Current Behavior Tick-to-Beat Resolution Failure: https://youtu.be/stt11W1L2OQ When loading the GP5 file “Extreme – Rise” (c...
Opengraph URL: https://github.com/CoderLine/alphaTab/issues/2548
X: @github
Domain: patch-diff.githubusercontent.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"GP5 with 3x repeats: tickCache.findBeat resolves to wrong (earlier) repeat pass after seek, causing playback/visual desync (“Extreme – Rise”)","articleBody":"### Is there an existing issue for this?\n\n- [x] I have searched the existing issues\n\n### Current Behavior\n\nTick-to-Beat Resolution Failure:\n\nhttps://youtu.be/stt11W1L2OQ\u2028\n\nWhen loading the GP5 file “Extreme – Rise” (contains a repeated section M25-M26, e.g. “3x repeat”), seeking to a tick (or click to seek) after the repeat section to M27. The custom cursor moves correctly to M27 (Default alphaTab Cursor and player thinks we clicked on M25) Press Play starts playback at the correct audio tick, but AlphaTab’s beat resolution/events continue to resolve to an earlier tick inside the repeat pass. This causes the cursor/beat mapping to “snap back” to the earlier pass while audio is playing the later position.\n\nEvidence from logs (representative):\n\t•\tSeek target: tick 695040 (M363)\n\t•\tAudio starts: Player state: PLAYING … tick: 695041\n\t•\tBeat lookup called with tick in the 695k range:\n🎯 Beat lookup { playing: true, tickUsed: 695045, scope: 'all', found: true }\n\t•\tBut played beat/event is from earlier repeat pass:\n⚖️ Timeline Correction (beatChanged) { audioTick: 695049, eventTick: 664320 }\n\t•\tResulting beat reported corresponds to earlier pass (≈tick 664k / M347), not the seek position.\n\nThe Conclusion:\nAlphaTab's tickCache is collapsing the timeline. Even when provided with a unique playback tick that should correspond to the \"second pass\" of a repeat, the resolver is \"snapping\" back to the \"first pass\" coordinates. This creates a permanent mismatch between the Audio (playing at 695k) and the Visuals (rendered at 664k).\n\n### Expected Behavior\n\nDefault Cursor and Player should move to the click to seek start position (Example M27 and player and cursor should move and resume playback from this spot). It should maintain the normal mapping system logic needed to move and play normal:\n\nAfter seeking to tick 695040, AlphaTab should:\n\t•\tPlay audio from the seeked position and\n\t•\tResolve beats/cursor position for the same playback timeline position (≈695k), not a prior repeat pass (≈664k).\n\ntickCache.findBeat(trackIndices, 695045) should return a beat whose absolutePlaybackStart (or equivalent) is close to 695045, not ~664320.\n\n\n### Steps To Reproduce\n\n1.\tLoad the GP5 file “Extreme – Rise” (has a repeat section, including “3x repeat” behavior). Start at M27 and watch where the cursor moves too. \n\t2.\tStart playback and/or allow the piece to progress so repeat behavior is active (optional, but issue reproduces after seek regardless).\n\t3.\tSeek/click to a position after the repeated section, e.g. tick ~695,040 (in our test UI this corresponds to measure ~363). or any measure from M27 to the end of the file and the behavior will be present anywhere. \n\t4.\tPress Play.\n\t5.\tObserve:\n\t•\tAudio plays from the seeked position (tick ~695k).\n\t•\tBeat resolution/events (playedBeatChanged / tickCache.findBeat results) resolve to an earlier tick inside the repeat pass (~664k), causing visual cursor/beat mapping to jump backward.\n\n### Link to jsFiddle, CodePen, Project\n\n_No response_\n\n### Version and Environment\n\n```bash\nalphaTab 1.8.1\ninitAlphaTab.ts:206 \nUser Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) \nAppleWebKit/537.36 (KHTML, like Gecko) \nChrome/144.0.0.0 \nSafari/537.36\ninitAlphaTab.ts:207 \nScreen: 1148x859\n```\n\n### Platform\n\nWeb\n\n### Anything else?\n\nI will work on getting some sample files for the repo tomorrow as well. ","author":{"url":"https://github.com/AvaTheArchitect","@type":"Person","name":"AvaTheArchitect"},"datePublished":"2026-02-07T08:22:46.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":5},"url":"https://github.com/2548/alphaTab/issues/2548"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:ce61fa21-8c8e-5ad5-86dd-f2bbae42507f |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | A656:15009E:859040:B7BACA:698F3302 |
| html-safe-nonce | 693135a5391a65aec514a541299478509c210a12d99a9a0fd6ea2b69a989e5b4 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBNjU2OjE1MDA5RTo4NTkwNDA6QjdCQUNBOjY5OEYzMzAyIiwidmlzaXRvcl9pZCI6IjE2NDgyMzgzNDIyNjAxMjkzMSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 10cc24689ef341e9f4536b1d08a2fedea83c6618c8945a02366f07090342b15a |
| hovercard-subject-tag | issue:3909778069 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/CoderLine/alphaTab/2548/issue_layout |
| twitter:image | https://opengraph.githubassets.com/6338aa368dcc3b8ad2f1f1fbbe0690bd86888f21ebc7752f16a057bb7b7e0d0f/CoderLine/alphaTab/issues/2548 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/6338aa368dcc3b8ad2f1f1fbbe0690bd86888f21ebc7752f16a057bb7b7e0d0f/CoderLine/alphaTab/issues/2548 |
| og:image:alt | Is there an existing issue for this? I have searched the existing issues Current Behavior Tick-to-Beat Resolution Failure: https://youtu.be/stt11W1L2OQ When loading the GP5 file “Extreme – Rise” (c... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | AvaTheArchitect |
| hostname | github.com |
| expected-hostname | github.com |
| None | 6102991c714c1a6a27d05fb4f96ea6ca87a6750b4f093b95cc57ed1b84b145a1 |
| turbo-cache-control | no-preview |
| go-import | github.com/CoderLine/alphaTab git https://github.com/CoderLine/alphaTab.git |
| octolytics-dimension-user_id | 715045 |
| octolytics-dimension-user_login | CoderLine |
| octolytics-dimension-repository_id | 1491192 |
| octolytics-dimension-repository_nwo | CoderLine/alphaTab |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1491192 |
| octolytics-dimension-repository_network_root_nwo | CoderLine/alphaTab |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | e2fe82f90e107669021e243add8f74ea2a9be1b3 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width