Skip to content

Playback selection UX: keep the paused cursor independent until Play #2926

Description

@sgabenov

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 searched the existing issues.

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.

  • 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

  1. Run the playground from develop and open /demos/control/.
  2. Use the bundled test-data/audio/full-song.gp5 score and the first track, Anette voice.
  3. Wait for playback controls to become available; click a note in bar 6 to place the paused cursor.
  4. Drag from an earlier note in bar 6 into bar 7, then release.
  5. Observe that the stopped cursor moves to the beginning of the selection before Play has been pressed.
  6. For the desired notation + TAB interaction, use the fourth track, Emmpu(Acoustic), in the same score.

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, 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:

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

Original Control selection and playback cursor

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    Priority

    None yet

    Area

    None yet

    Platform

    None yet

    Work State

    None yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions