Files
PodTui/tasks/audio-playback-fix/01-fix-volume-speed-controls.md
2026-02-05 23:43:19 -05:00

3.2 KiB

01. Fix volume and speed controls in audio backends

meta: id: audio-playback-fix-01 feature: audio-playback-fix priority: P1 depends_on: [] tags: [implementation, backend-fix, testing-required]

objective:

  • Fix non-functional volume and speed controls in audio player backends (mpv, ffplay, afplay)
  • Implement proper error handling and validation for volume/speed commands
  • Ensure commands are successfully received and applied by the audio player

deliverables:

  • Fixed MpvBackend.setVolume() and MpvBackend.setSpeed() methods with proper IPC command validation
  • Enhanced AfplayBackend.setVolume() and AfplayBackend.setSpeed() for runtime changes
  • Added command response validation in all backends
  • Unit tests for volume and speed control methods

steps:

  • Step 1: Analyze current IPC implementation in MpvBackend (lines 206-223)
  • Step 2: Implement proper response validation for setVolume and setSpeed IPC commands
  • Step 3: Fix afplay backend to apply volume/speed changes at runtime (currently only on next play)
  • Step 4: Add error handling and logging for failed volume/speed commands
  • Step 5: Add unit tests in src/utils/audio-player.test.ts for volume/speed methods
  • Step 6: Verify volume changes apply immediately and persist across playback
  • Step 7: Verify speed changes apply immediately and persist across playback

tests:

  • Unit:
    • Test MpvBackend.setVolume() sends correct IPC command and receives valid response
    • Test MpvBackend.setSpeed() sends correct IPC command and receives valid response
    • Test AfplayBackend.setVolume() applies volume immediately
    • Test AfplayBackend.setSpeed() applies speed immediately
    • Test volume clamp values (0-1 range)
    • Test speed clamp values (0.25-3 range)
  • Integration:
    • Test volume control through Player component UI
    • Test speed control through Player component UI
    • Test volume/speed changes persist across pause/resume cycles
    • Test volume/speed changes persist across track changes

acceptance_criteria:

  • Volume slider in Player component changes volume in real-time
  • Speed controls in Player component change playback speed in real-time
  • Volume changes are visible in system audio output
  • Speed changes are immediately reflected in playback rate
  • No errors logged when changing volume or speed
  • Volume/speed settings persist when restarting the app

validation:

  • Run bun test src/utils/audio-player.test.ts to verify unit tests pass
  • Test volume control using Up/Down arrow keys in Player
  • Test speed control using 'S' key in Player
  • Verify volume level is visible in PlaybackControls component
  • Verify speed level is visible in PlaybackControls component
  • Check console logs for any IPC errors

notes:

  • mpv backend uses JSON IPC over Unix socket - need to validate response format
  • afplay backend needs to restart process for volume/speed changes (current behavior)
  • ffplay backend doesn't support runtime volume/speed changes (document limitation)
  • Volume and speed state is stored in backend class properties and should be updated on successful commands
  • Reference: src/utils/audio-player.ts lines 206-223 (mpv send method), lines 789-791 (afplay setVolume), lines 793-795 (afplay setSpeed)