use-volume
Hook for managing volume and mute state
Installation
npx shadcn add @limeplay/use-volumeAdd Event & Action Bridge
Import the useVolumeStates hook in your existing PlayerHooks component.
import React from "react"
import { usePlaybackStates } from "@/hooks/limeplay/use-playback"
import { usePlayerStates } from "@/hooks/limeplay/use-player"
import { useVolumeStates } from "@/hooks/limeplay/use-volume"
export const PlayerHooks = React.memo(() => {
usePlayerStates()
usePlaybackStates()
useVolumeStates()
return null
})Add the Store States
import { createPlaybackStore, PlaybackStore } from "@/hooks/limeplay/use-playback"
import { createVolumeStore, VolumeStore } from "@/hooks/limeplay/use-volume"
export type TypeMediaStore = PlaybackStore &
VolumeStore &
{}
export function createMediaStore(initProps?: Partial<CreateMediaStoreProps>) {
const mediaStore = create<TypeMediaStore>()((...etc) => ({
...createPlaybackStore(...etc),
...createVolumeStore(...etc),
...initProps,
}))
return mediaStore
}Example Usage
Use the useVolume() hook to control volume in your components.
import { useVolume } from "@/hooks/limeplay/use-volume"
import { useMediaStore } from "@/components/limeplay/media-provider"
export function VolumeControl() {
const volume = useMediaStore((state) => state.volume)
const muted = useMediaStore((state) => state.muted)
const { setVolume, toggleMute } = useVolume()
return (
<div>
<input
type="range"
min="0"
max="1"
step="0.01"
value={volume}
onChange={(e) => setVolume(Number(e.target.value))}
/>
<button onClick={toggleMute}>
{muted ? "Unmute" : "Mute"}
</button>
</div>
)
}Understanding
The use-volume hook provides volume and mute management following the Event & Action Bridge pattern:
- Event Bridge:
useVolumeStates()listens tovolumechangeandaudiotrackschangedevents, syncing volume, mute, and audio track availability to the React store - Action Bridge:
useVolume()providessetVolume(),toggleMute(), andsetMuted()functions that control the native media element
The hook automatically handles edge cases like setting volume to 0 (which automatically mutes) and provides a reset volume value when unmuting from 0.
API Reference
useVolumeStates()
Sets up event listeners for volume changes and audio track changes. This hook should be called once in your PlayerHooks component.
useVolume()
Returns control functions for managing volume and mute state.
Returns
Prop
Type
Store State
The volume store provides the following state accessed via useMediaStore:
Prop
Type