import { Audio, AudioMode, InterruptionModeAndroid } from 'expo-av'; import { Dispatch, useEffect, useState } from 'react'; export function useAudio(): [boolean, Dispatch] { const [isAudioEnabled, setAudioEnabled] = useState(true); useEffect(() => { Audio.setIsEnabledAsync(isAudioEnabled); return () => { Audio.setIsEnabledAsync(true); }; }, [isAudioEnabled]); return [isAudioEnabled, setAudioEnabled]; } export function useAudioMode( initialAudioMode: Partial ): [Partial, Dispatch>] { const [audioMode, setAudioMode] = useState(initialAudioMode); useEffect(() => { setAudioModeAsync(audioMode); }, [audioMode]); return [audioMode, setAudioMode]; } async function setAudioModeAsync(audioMode: Partial): Promise { await Audio.setAudioModeAsync({ ...audioMode, interruptionModeAndroid: InterruptionModeAndroid.DoNotMix, shouldDuckAndroid: false, playThroughEarpieceAndroid: false, }); }