Import source: src/hooks/useAudioPlayer
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -0,0 +1,32 @@
|
|||||||
|
import { useState, useCallback } from 'react'
|
||||||
|
import { tracks } from '../data/mockData'
|
||||||
|
|
||||||
|
export function useAudioPlayer() {
|
||||||
|
const [currentTrack, setCurrentTrack] = useState(tracks[0])
|
||||||
|
const [isPlaying, setIsPlaying] = useState(false)
|
||||||
|
const [progress, setProgress] = useState(0)
|
||||||
|
const [volume, setVolume] = useState(0.8)
|
||||||
|
|
||||||
|
const play = useCallback((track) => {
|
||||||
|
setCurrentTrack(track)
|
||||||
|
setIsPlaying(true)
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const togglePlay = useCallback(() => setIsPlaying(p => !p), [])
|
||||||
|
|
||||||
|
const next = useCallback(() => {
|
||||||
|
setCurrentTrack(t => {
|
||||||
|
const idx = tracks.findIndex(x => x.id === t.id)
|
||||||
|
return tracks[(idx + 1) % tracks.length]
|
||||||
|
})
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const prev = useCallback(() => {
|
||||||
|
setCurrentTrack(t => {
|
||||||
|
const idx = tracks.findIndex(x => x.id === t.id)
|
||||||
|
return tracks[(idx - 1 + tracks.length) % tracks.length]
|
||||||
|
})
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
return { currentTrack, isPlaying, progress, volume, play, togglePlay, next, prev, setProgress, setVolume }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user