import { useIntegratedRecording } from '@waveform-playlist/recording';
import { WaveformPlaylistProvider } from '@waveform-playlist/browser';
function RecordingPlaylist() {
const [tracks, setTracks] = useState<ClipTrack[]>([]);
const [selectedTrackId, setSelectedTrackId] = useState<string | null>(null);
const {
isRecording,
isPaused,
duration,
level,
peakLevel,
hasPermission,
devices,
selectedDevice,
startRecording,
stopRecording,
pauseRecording,
resumeRecording,
requestMicAccess,
changeDevice,
error,
} = useIntegratedRecording(tracks, setTracks, selectedTrackId);
return (
<div>
{!hasPermission && (
<button onClick={requestMicAccess}>Enable Microphone</button>
)}
{hasPermission && (
<>
{/* Device selector */}
<select onChange={(e) => changeDevice(e.target.value)} value={selectedDevice || ''}>
{devices.map((device) => (
<option key={device.deviceId} value={device.deviceId}>
{device.label}
</option>
))}
</select>
{/* VU Meter */}
<div>
<div style={{ width: `${level * 100}%`, height: 20, background: 'green' }} />
<div style={{ width: `${peakLevel * 100}%`, height: 4, background: 'red' }} />
</div>
{/* Recording controls */}
{!isRecording ? (
<button onClick={startRecording}>Record</button>
) : (
<>
<button onClick={isPaused ? resumeRecording : pauseRecording}>
{isPaused ? 'Resume' : 'Pause'}
</button>
<button onClick={stopRecording}>Stop</button>
<div>Duration: {duration.toFixed(2)}s</div>
</>
)}
{error && <div>Error: {error.message}</div>}
</>
)}
<WaveformPlaylistProvider tracks={tracks}>
{/* Playlist UI */}
</WaveformPlaylistProvider>
</div>
);
}