2.1 KiB
2.1 KiB
09. Create Player UI with Waveform Visualization
meta: id: podcast-tui-app-09 feature: podcast-tui-app priority: P0 depends_on: [08] tags: [player, waveform, visualization, solidjs, opentui]
objective:
- Create player UI layout
- Implement playback controls (play/pause, skip, progress)
- Build ASCII waveform visualization
- Add progress tracking and seek functionality
deliverables:
src/components/Player.tsxwith player UIsrc/components/PlaybackControls.tsxwith controlssrc/components/Waveform.tsxwith ASCII waveformsrc/utils/waveform.tswith visualization logic
steps:
- Create
src/components/Player.tsx:- Player header with episode info
- Progress bar with seek functionality
- Waveform visualization area
- Playback controls
- Create
src/components/PlaybackControls.tsx:- Play/Pause button
- Previous/Next episode buttons
- Volume control
- Speed control
- Keyboard shortcuts (space, arrows)
- Create
src/components/Waveform.tsx:- ASCII waveform visualization
- Click to seek
- Color-coded for played/paused
- Use frame buffer for drawing
- Create
src/utils/waveform.ts:- Generate waveform data from audio
- Convert to ASCII characters
- Handle audio duration and position
- Add player to "Player" navigation tab
tests:
- Unit: Test waveform generation
- Unit: Test playback controls
- Integration: Test player UI displays correctly
- Integration: Test keyboard shortcuts work
acceptance_criteria:
- Player UI displays episode information
- Playback controls work (play/pause, skip)
- Waveform visualization shows audio waveform
- Progress bar updates during playback
- Clicking waveform seeks to position
validation:
- Run application and navigate to "Player"
- Select an episode to play
- Test playback controls
- Verify waveform visualization
- Test seeking by clicking waveform
- Test keyboard shortcuts
notes:
- ASCII waveform: Use
#for peaks,.for valleys - Audio integration: Trigger system player or use Web Audio API
- Waveform data needs to be cached for performance
- Use SolidJS
useTimelinefor animation