voice-changer/client/demo/src/001_globalHooks/001_useAudioConfig.ts

37 lines
1.1 KiB
TypeScript
Raw Normal View History

2023-02-16 18:09:56 +03:00
import { useEffect, useState } from "react"
export type AudioConfigState = {
audioContext: AudioContext | null
}
export const useAudioConfig = (): AudioConfigState => {
const [audioContext, setAudioContext] = useState<AudioContext | null>(null)
useEffect(() => {
try {
const ctx = new AudioContext()
setAudioContext(ctx)
} catch (e) {
console.warn(e)
// If crate ctx failed, wait for user jesture.
const createAudioContext = () => {
console.log("click window")
const ctx = new AudioContext()
document.removeEventListener('touchstart', createAudioContext);
document.removeEventListener('mousedown', createAudioContext);
setAudioContext(ctx)
}
document.addEventListener('touchstart', createAudioContext);
document.addEventListener('mousedown', createAudioContext);
}
}, [])
console.log("AUDIO CONTEXT", audioContext)
const ret: AudioConfigState = {
audioContext
}
return ret
}