This commit is contained in:
2025-12-25 07:21:30 +06:00
parent 8265e2d719
commit 0f9a7e39ce
8 changed files with 135 additions and 98 deletions

View File

@@ -4,13 +4,12 @@ export default function useAudioContext(audioTrack: Ref<MediaStreamTrack | undef
const ctx = new (window.AudioContext || window.webkitAudioContext)()
const stream = new MediaStream()
const audioEl = new Audio()
const sourceNode = shallowRef<MediaStreamAudioSourceNode>()
const gainNode = ctx.createGain()
let hackExecuted = false
watch(audioTrack, (track, prevTrack) => {
watch(audioTrack, async (track, prevTrack) => {
if (prevTrack)
stream.removeTrack(prevTrack)
@@ -19,16 +18,14 @@ export default function useAudioContext(audioTrack: Ref<MediaStreamTrack | undef
stream.addTrack(track)
if (!hackExecuted) {
const audioEl = new Audio()
if (!audioEl.srcObject) {
audioEl.srcObject = stream
audioEl.muted = true
hackExecuted = true
}
sourceNode.value = ctx.createMediaStreamSource(stream)
connect()
await connect()
}, { immediate: true })
useEventListener(document, 'click', async () => {
@@ -36,10 +33,16 @@ export default function useAudioContext(audioTrack: Ref<MediaStreamTrack | undef
await ctx.resume()
}
connect()
await connect()
}, { once: true })
function connect() {
onScopeDispose(() => {
audioEl.pause()
audioEl.srcObject = null
ctx.close()
})
async function connect() {
if (!sourceNode.value || ctx.state === 'suspended')
return