Skip to content

Bug: MP3 uploads lack slowdown and loop controls #47

@Dandiggas

Description

@Dandiggas

Problem

When an uploaded MP3 is selected in the practice workspace, the app does not expose the same practice controls that YouTube gets. This breaks the core use case: quickly upload a track, slow it down, and work out a part.

This was hit in real use: the user needed to upload an MP3 quickly and slow it down, but the MP3 path felt clunky and the slowdown capability was missing.

Current behaviour

In frontend/next-app/src/components/studio/PracticeMedia.tsx:

  • YouTube media renders PlaybackSpeedControl and ABLoopControl.
  • Uploaded audio renders LocalAudioPlayer only.

In frontend/next-app/src/app/practice-timer/page.tsx, handleSpeedChange() already calls:

  • player.setPlaybackRate(speed) for YouTube
  • audioPlayerRef.current?.setPlaybackRate(speed) for local audio

So the audio player has some technical support, but the UI does not expose it for MP3 uploads.

Expected behaviour

Uploaded MP3s should behave like serious practice material:

  • User can upload an MP3 and immediately slow it down.
  • Speed control is visible for MP3/audio media, not just YouTube.
  • Speed changes apply immediately to the uploaded audio.
  • AB loop controls work for uploaded audio if supported by the current LocalAudioPlayerHandle.
  • The user can scrub, loop, and slow down without having to switch media modes or restart a session.

Acceptance criteria

  • MP3/audio mode renders PlaybackSpeedControl.
  • MP3/audio mode renders ABLoopControl using the existing audio loop controller path.
  • Speed changes apply to the LocalAudioPlayer immediately.
  • Uploading an MP3 and selecting 0.75x / 0.5x works in active practice mode.
  • Existing YouTube speed/loop behaviour is not regressed.
  • Add/adjust tests around PracticeMedia so both YouTube and audio paths expose practice controls.

Why this matters

The app should be useful in the moment of practice. If the user sits down needing to work out a track, MP3 upload + slowdown must be fast and obvious. This is core workflow, not polish.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P0: launch-blockerMust ship before launchbugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions