56 lines
1.2 KiB
TypeScript
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,
|
|
};
|
|
};
|