You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Playback selection UX: keep the paused cursor independent until Play #2926
Portions of this content were authored by an AI agent. The agent has read AGENTS.md and the human submitter accepts responsibility for
compliance with the rules in that document.
AI-assisted (disclosure block included as described in AGENTS.md).
Current Behavior
Please check a video attached to the issue at hte end of the page! (...a human submitter %)...)
In the Control playground, with playback paused at a note, starting a drag selection moves the playback cursor to the first selected note. Editing the range therefore changes the stopped playback position before pressing Play.
The existing selection boundaries can be adjusted using handles. I would like the selectable boundary to be clearer when hovering over its vertical edge.
This is a request to discuss the playground interaction, rather than a claim that playback ranges and looping should be coupled. I understand the intended independent behavior explained in #2575. The earlier handle-alignment issue #2863 was resolved by #2886; this request concerns subsequent interaction and presentation.
Expected Behavior
My goal is to make selecting a practice passage and following playback feel calmer and more predictable. alphaTab already supports adjusting playback ranges; these are the interaction and presentation changes I tried locally, and I would appreciate your thoughts on whether they would be useful in the playground.
A quieter selection background. I reduced the selection fill because a strong tint competed with the notation and the playback highlight while reading the score. The selected passage remains identifiable through a light fill and a thin blue outline. The active bar uses a lighter version of the original yellow, so editing a range and following playback have distinct visual cues.
Different heights for the selection and active-bar highlight. The selection frame covers the complete visual height of the system, including markings and both notation and TAB when present. The playing-bar background follows the staff bounds. Keeping these different extents makes their roles easier to distinguish and reduces the sense of overlapping highlights.
A more readable playback cursor. I used a 2 px orange line that extends above and below the notation, and placed it behind the note glyphs. I also turned off individual played-note colouring in the example. The aim is to make the position easy to find without covering or recolouring the note being read.
More discoverable boundary editing. The frame has a thin perimeter and no circular handles. Hovering a left or right edge makes that edge thicker and changes the pointer to a horizontal resize cursor. Either edge can be dragged independently to a note boundary, with a forgiving hit area. This gives a visible indication of where and how to adjust the passage.
Selection editing leaves the paused position alone. Creating a selection or moving its boundaries does not move the stopped playback cursor. Only pressing Play moves it to the selection start and plays the selected range. Loop remains independent. To me, this makes it easier to adjust a practice passage without losing the place where I paused.
Less visual competition while playing. Once Play is pressed, the selection's editing frame hides and the active bar and playback cursor remain visible. Pausing restores the frame so the passage can be adjusted again.
Predictable end of a drag. Releasing the pointer outside the score or cancelling the gesture ends the edit. Boundary edits also preserve the chosen occurrence of a repeated passage rather than unexpectedly switching to another repeat.
The videos below show these behaviours on a notation-only instrument and on an instrument with notation and TAB. They show the local prototype, not the current upstream behaviour. The compact player's controls and layout are only a demonstration harness and are outside the proposed contribution.
These are personal usability preferences from practising with the example. I would be happy to adapt the direction to fit alphaTab's intended interaction model, including keeping it as an optional playground behaviour if that makes more sense.
Steps To Reproduce
Run the playground from develop and open /demos/control/.
Use the bundled test-data/audio/full-song.gp5 score and the first track, Anette voice.
Wait for playback controls to become available; click a note in bar 6 to place the paused cursor.
Drag from an earlier note in bar 6 into bar 7, then release.
Observe that the stopped cursor moves to the beginning of the selection before Play has been pressed.
For the desired notation + TAB interaction, use the fourth track, Emmpu(Acoustic), in the same score.
Reproduction used the unmodified Control playground files from upstream develop, commit 25ef76d38b482b1cf9959cdfc6fcddfd5cb5b76a, and the locally generated alphaTab engine. The following is actual debug output; its commit/date are the generated engine's build metadata, not the upstream playground revision.
[AlphaTab][VersionInfo] alphaTab 1.9.0
[AlphaTab][VersionInfo] commit: bf3fc48f53d899ccb60454385001787132e04eca
[AlphaTab][VersionInfo] build date: 2026-10-07T08:47:05.171Z
[AlphaTab][VersionInfo] High DPI: 2
[AlphaTab][VersionInfo] Platform: BrowserModule
[AlphaTab][VersionInfo] WebPack: false
[AlphaTab][VersionInfo] Vite: false
[AlphaTab][VersionInfo] Browser: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36
[AlphaTab][VersionInfo] Window Size: 3440x1232
[AlphaTab][VersionInfo] Screen Size: 1800x1169
Platform
Web
Anything else?
The human submitter has reviewed and approved the demonstration videos:
Original upstream Control after dragging a selection
The demonstration videos contain a temporary resize-pointer indicator because browser capture does not reproduce the native resize pointer accurately. Boundary-drag portions are slowed 6x and labelled accordingly. The recording aid is absent from the proposed contribution.
The compact example is only the demonstration harness. Its player controls, layout and styling are outside the intended contribution.
Note
AI-authored disclosure (
alphatab-ai-authored-v1)Portions of this content were authored by an AI agent. The agent has read
AGENTS.md and the human submitter accepts responsibility for
compliance with the rules in that document.
Is there an existing issue for this?
I have read the contribution rules
AI authorship
AI-assisted (disclosure block included as described in AGENTS.md).
Current Behavior
Please check a video attached to the issue at hte end of the page! (...a human submitter %)...)
In the Control playground, with playback paused at a note, starting a drag selection moves the playback cursor to the first selected note. Editing the range therefore changes the stopped playback position before pressing Play.
The existing selection boundaries can be adjusted using handles. I would like the selectable boundary to be clearer when hovering over its vertical edge.
This is a request to discuss the playground interaction, rather than a claim that playback ranges and looping should be coupled. I understand the intended independent behavior explained in #2575. The earlier handle-alignment issue #2863 was resolved by #2886; this request concerns subsequent interaction and presentation.
Expected Behavior
My goal is to make selecting a practice passage and following playback feel calmer and more predictable. alphaTab already supports adjusting playback ranges; these are the interaction and presentation changes I tried locally, and I would appreciate your thoughts on whether they would be useful in the playground.
The videos below show these behaviours on a notation-only instrument and on an instrument with notation and TAB. They show the local prototype, not the current upstream behaviour. The compact player's controls and layout are only a demonstration harness and are outside the proposed contribution.
These are personal usability preferences from practising with the example. I would be happy to adapt the direction to fit alphaTab's intended interaction model, including keeping it as an optional playground behaviour if that makes more sense.
Steps To Reproduce
developand open/demos/control/.test-data/audio/full-song.gp5score and the first track, Anette voice.Link to jsFiddle, CodePen, Project
alphaTab playground and bundled score
Personal-fork review PR and demonstration context. Player controls and layout are outside this proposal; this PR is provided for inspection while upstream scope is discussed.
Version and Environment
Reproduction used the unmodified Control playground files from upstream
develop, commit25ef76d38b482b1cf9959cdfc6fcddfd5cb5b76a, and the locally generated alphaTab engine. The following is actual debug output; its commit/date are the generated engine's build metadata, not the upstream playground revision.Platform
Web
Anything else?
The human submitter has reviewed and approved the demonstration videos:
Notation only — first instrument (Anette voice)
notation-only.mp4
Notation + TAB — fourth instrument (Emmpu(Acoustic))
notation-and-tab.mp4
Original upstream Control after dragging a selection
The demonstration videos contain a temporary resize-pointer indicator because browser capture does not reproduce the native resize pointer accurately. Boundary-drag portions are slowed 6x and labelled accordingly. The recording aid is absent from the proposed contribution.
The compact example is only the demonstration harness. Its player controls, layout and styling are outside the intended contribution.