@threlte/extras
Version:
Utilities, abstractions and plugins for your Threlte apps
31 lines (30 loc) • 1.04 kB
JavaScript
import { useThrelteUserContext } from '@threlte/core';
import { SvelteMap } from 'svelte/reactivity';
const audioListeners = new SvelteMap();
const audioCtx = {
audioListeners,
addAudioListener: (listener, id = 'default') => {
if (audioListeners.has(id)) {
console.warn(`An AudioListener with the id "${id}" has already been added, aborting.`);
return;
}
audioListeners.set(id, listener);
},
removeAudioListener: (id = 'default') => {
if (!audioListeners.has(id)) {
console.warn(`No AudioListener with the id "${id}" found, aborting.`);
return;
}
audioListeners.delete(id);
},
getAudioListener: (id = 'default') => {
if (!audioListeners.has(id)) {
console.warn(`No AudioListener with the id "${id}" found, aborting.`);
return;
}
return audioListeners.get(id);
}
};
export function useThrelteAudio() {
return useThrelteUserContext('threlte-audio', audioCtx);
}