Zoom Controls
TheuseZoomControls hook manages waveform zoom via the PlaylistEngine, with state mirrored from engine events.
Basic Usage
Hook Interface
The hook is used internally byWaveformPlaylistProvider. Access via context hooks:
packages/browser/src/hooks/useZoomControls.ts:4-10
Zoom In/Out
Zoom operations delegate to the engine:- Calculates new
samplesPerPixelvalue (halves for zoom in, doubles for zoom out) - Enforces min/max zoom bounds
- Updates
canZoomIn/canZoomOutflags - Emits
statechangeevent
packages/browser/src/hooks/useZoomControls.ts:44-50
Samples Per Pixel
The zoom level is represented bysamplesPerPixel:
Initial Zoom Level
Set the initial zoom when creating the playlist:packages/browser/src/hooks/useZoomControls.ts:14
Zoom Boundaries
The engine enforces zoom limits:packages/browser/src/hooks/useZoomControls.ts:8-9
Zoom with Keyboard Shortcuts
Zoom Slider
Create a custom zoom slider:State Synchronization
Zoom state flows from engine to React:packages/browser/src/hooks/useZoomControls.ts:53-68
Non-Blocking Updates
Zoom updates usestartTransition to avoid blocking playback:
packages/browser/src/hooks/useZoomControls.ts:54-58
Web Worker Peak Generation
Peak data is generated in a web worker at load time, then resampled on zoom:packages/browser/CLAUDE.md (Web Worker Peak Generation section)
Example: Zoom Toolbar
Zoom to Fit
Fit the entire waveform in the viewport:Zoom to Selection
Zoom to show only the selected region:Next Steps
- Keyboard Shortcuts - Add zoom keyboard shortcuts
- Loading Audio - Understand peak generation
- Multi-Track Editing - Edit at different zoom levels