Player controls + live state returned by useAudioPlayer.
Live state is exposed via getters on a stable object so templates
can read player.status / player.currentTime without a .value
hop. Imperative controls are plain functions.
interface AudioPlayerHandleRMS level of the last analysed frame, [0, 1].