init
This commit is contained in:
55
src/hooks/useAudioControl.ts
Normal file
55
src/hooks/useAudioControl.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
// hooks/useAudioControl.ts
|
||||
import { useEffect, useState } from "react";
|
||||
import AudioManager from "../utils/audioManager";
|
||||
|
||||
interface UseAudioControlReturn {
|
||||
currentPlayingId: string | null;
|
||||
stopAllAudio: () => void;
|
||||
pauseAllAudio: () => void;
|
||||
getAudioStates: () => Record<
|
||||
string,
|
||||
{
|
||||
isPlaying: boolean;
|
||||
duration: number;
|
||||
currentTime: number;
|
||||
}
|
||||
>;
|
||||
}
|
||||
|
||||
export const useAudioControl = (): UseAudioControlReturn => {
|
||||
const [currentPlayingId, setCurrentPlayingId] = useState<string | null>(null);
|
||||
const audioManager = AudioManager.getInstance();
|
||||
|
||||
useEffect(() => {
|
||||
// 定期检查当前播放状态
|
||||
const interval = setInterval(() => {
|
||||
const currentId = audioManager.getCurrentAudioId();
|
||||
setCurrentPlayingId(currentId);
|
||||
}, 500);
|
||||
|
||||
return () => {
|
||||
clearInterval(interval);
|
||||
};
|
||||
}, [audioManager]);
|
||||
|
||||
const stopAllAudio = () => {
|
||||
audioManager.stopCurrent();
|
||||
setCurrentPlayingId(null);
|
||||
};
|
||||
|
||||
const pauseAllAudio = () => {
|
||||
audioManager.pauseCurrent();
|
||||
setCurrentPlayingId(null);
|
||||
};
|
||||
|
||||
const getAudioStates = () => {
|
||||
return audioManager.getAudioStates();
|
||||
};
|
||||
|
||||
return {
|
||||
currentPlayingId,
|
||||
stopAllAudio,
|
||||
pauseAllAudio,
|
||||
getAudioStates,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user