Skip to content

feat(player): add bounded rehearsal playback rates - #1063

Merged
seonghobae merged 17 commits into
feat/rehearsal-player-first-section-loopfrom
codex/playback-rate-control
Aug 30, 2026
Merged

feat(player): add bounded rehearsal playback rates#1063
seonghobae merged 17 commits into
feat/rehearsal-player-first-section-loopfrom
codex/playback-rate-control

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 29, 2026

Copy link
Copy Markdown
Collaborator

Product gap

Add the next Issue #961 rehearsal-player slice on top of PR #1062: bounded, keyboard-accessible playback-speed control for real local audio.

Exact current identity

Product outcome

  • Offers 0.75x, 1x, and 1.25x only through the single rehearsal transport state machine.
  • Applies HTMLMediaElement.playbackRate to real media and reapplies it after source reloads.
  • Enables preservesPitch when the runtime exposes the standard property.
  • Announces the effective count-in tempo and preserves the elapsed fraction of the current beat when playback rate changes.
  • Keeps section selection, pause/resume, count-in, and media-clock loop boundaries under the same transport state.
  • Keeps playback fail-closed when no playable Tauri asset URL exists.

Stack scope

This shared stack branch currently contains the normal merges for PR #1066 (role-filtered loops), PR #1067 (keyboard section-cue navigation), and PR #1068 (manual cue-boundary corrections), followed by the playback-rate work. The current head above is the only head for hosted evidence.

Validation

  • Focused transport/player tests: 39 passed.
  • Full desktop test suite: 267 passed across 23 files; statements, branches, functions, and lines all 100%.
  • Desktop typecheck and lint passed.
  • Desktop Vite build passed; it reports the existing large-chunk warning.
  • git diff --check passed.
  • Hosted checks and robot review are being rerun for current head d99c9358b4c7bdcbf7d090c287b40d8104f97ade; prior-head results are not used as completion evidence.

Security Notes

  • No new filesystem, URL, subprocess, IPC, WebView, or network boundary is introduced.
  • Playback-rate input is accepted only from the fixed contract values; invalid runtime events leave state unchanged.
  • Audio remains governed by PR feat(player): play real audio section loops #1062's scoped Tauri asset handling and selected-file validation. No path is logged.
  • Playback-rate semantics follow the WHATWG HTML Standard media-element contract: playbackRate is effective speed and preservesPitch is enabled when supported: https://html.spec.whatwg.org/multipage/media.html
  • The count-in timer is bounded to the admitted tempo/rate values and is cancelled when transport authority is revoked.

Acceptance ceiling

This slice does not claim role/stem isolation, real-device speaker-output acceptance, or Issue #770 known-take accuracy acceptance. Those remain separate product gaps.


Devin Review

@coderabbitai

coderabbitai Bot commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fbac9052-3537-46e9-892c-dd4bb1817913

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

This report is out of date. Scroll down for Devin Review's latest report on this PR.

Devin Review found 5 new potential issues.

Devin Review

Comment thread apps/desktop/src/features/workspace/RehearsalPlayer.tsx Outdated
Comment thread apps/desktop/src/features/workspace/RehearsalPlayer.tsx Outdated
Comment thread apps/desktop/src/features/workspace/RehearsalPlayer.tsx
Comment thread apps/desktop/src/features/workspace/RehearsalPlayer.tsx
Comment thread apps/desktop/src/features/workspace/rehearsalTransport.ts
Base automatically changed from codex/real-audio-loop to feat/rehearsal-player-first-section-loop August 30, 2026 02:22
devin-ai-integration[bot]

This comment was marked as resolved.

Merge exact-head b96e454 after local and hosted verification.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

Devin Review

Comment thread apps/desktop/src/features/workspace/RehearsalPlayer.test.tsx
@seonghobae

Copy link
Copy Markdown
Collaborator Author

Current-head follow-up for d99c935:\n\n- The count-in scheduler now owns one timer chain outside React commit batching, preserves elapsed beat progress across repeated 0.75x/1.25x changes, and cancels on transport authority loss.\n- Focused transport/player tests pass: 39.\n- Full desktop suite passes: 267 tests across 23 files, 100% statements/branches/functions/lines.\n- Typecheck and lint pass; Vite build passes with the existing large-chunk warning.\n- The current PR body documents the stack topology: #1066, #1067, and #1068 were normally merged into this shared branch before the playback-rate work, so the aggregate diff is intentional and no history was rewritten.\n- AGENTS.md now records that bounded pitch-preserving playback rate is delivered while stem playback remains a separate gap.\n\nHosted Devin review is pending for this exact head; no prior-head result is used as completion evidence.

@seonghobae
seonghobae merged commit 435cc02 into feat/rehearsal-player-first-section-loop Aug 30, 2026
2 checks passed
@seonghobae
seonghobae deleted the codex/playback-rate-control branch August 30, 2026 02:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant