mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-22 08:12:00 +02:00

* fix: hide audio element on mobile * chore: add tts docs link * fix: select voice option on first render * fix: NotAllowedError, prevent async playback for mobile triggers, consolidate MessageAudio code, user user-triggered unmutes * fix: Firefox/unsupported type for MediaSource hack * refactor(STT): make icon red when recording. consolidate logic to AudioRecorder component * fix: revert Redis changes to use separate client for sessions
48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import { useEffect, useRef } from 'react';
|
|
|
|
export default function useCustomAudioRef({
|
|
setIsPlaying,
|
|
}: {
|
|
setIsPlaying: (isPlaying: boolean) => void;
|
|
}) {
|
|
const audioRef = useRef<HTMLAudioElement | null>(null);
|
|
useEffect(() => {
|
|
const handleEnded = () => {
|
|
setIsPlaying(false);
|
|
console.log('message audio ended');
|
|
if (audioRef.current) {
|
|
URL.revokeObjectURL(audioRef.current.src);
|
|
}
|
|
};
|
|
|
|
const handleStart = () => {
|
|
setIsPlaying(true);
|
|
console.log('message audio started');
|
|
};
|
|
|
|
const handlePause = () => {
|
|
setIsPlaying(false);
|
|
console.log('message audio paused');
|
|
};
|
|
|
|
const audioElement = audioRef.current;
|
|
|
|
if (audioRef.current) {
|
|
audioRef.current.muted = true;
|
|
audioRef.current.addEventListener('ended', handleEnded);
|
|
audioRef.current.addEventListener('play', handleStart);
|
|
audioRef.current.addEventListener('pause', handlePause);
|
|
}
|
|
|
|
return () => {
|
|
if (audioElement) {
|
|
audioElement.removeEventListener('ended', handleEnded);
|
|
audioElement.removeEventListener('play', handleStart);
|
|
audioElement.removeEventListener('pause', handlePause);
|
|
URL.revokeObjectURL(audioElement.src);
|
|
}
|
|
};
|
|
}, [setIsPlaying]);
|
|
|
|
return { audioRef };
|
|
}
|