Files
tashow-h5/src/hooks/useAudioControl.ts
2025-09-03 15:06:16 +08:00

56 lines
1.2 KiB
TypeScript

// 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,
};
};