1import { Audio, AudioMode, InterruptionModeAndroid } from 'expo-av'; 2import { Dispatch, useEffect, useState } from 'react'; 3 4export function useAudio(): [boolean, Dispatch<boolean>] { 5 const [isAudioEnabled, setAudioEnabled] = useState(true); 6 7 useEffect(() => { 8 Audio.setIsEnabledAsync(isAudioEnabled); 9 return () => { 10 Audio.setIsEnabledAsync(true); 11 }; 12 }, [isAudioEnabled]); 13 14 return [isAudioEnabled, setAudioEnabled]; 15} 16 17export function useAudioMode( 18 initialAudioMode: Partial<AudioMode> 19): [Partial<AudioMode>, Dispatch<Partial<AudioMode>>] { 20 const [audioMode, setAudioMode] = useState(initialAudioMode); 21 22 useEffect(() => { 23 setAudioModeAsync(audioMode); 24 }, [audioMode]); 25 26 return [audioMode, setAudioMode]; 27} 28 29async function setAudioModeAsync(audioMode: Partial<AudioMode>): Promise<void> { 30 await Audio.setAudioModeAsync({ 31 ...audioMode, 32 interruptionModeAndroid: InterruptionModeAndroid.DoNotMix, 33 shouldDuckAndroid: false, 34 playThroughEarpieceAndroid: false, 35 }); 36} 37