@pixi/sound
Version:
WebAudio API playback library with filters
60 lines (57 loc) • 1.8 kB
JavaScript
import { ExtensionType, LoaderParserPriority, path, extensions as extensions$1 } from 'pixi.js';
import { getInstance } from './instance.mjs';
import { Sound } from './Sound.mjs';
import { extensions, supported, mimes } from './utils/supported.mjs';
const getAlias = (asset) => {
const src = asset.src;
let alias = asset?.alias?.[0];
if (!alias || asset.src === alias) {
alias = path.basename(src, path.extname(src));
}
return alias;
};
const soundAsset = {
extension: ExtensionType.Asset,
detection: {
test: async () => true,
add: async (formats) => [...formats, ...extensions.filter((ext) => supported[ext])],
remove: async (formats) => formats.filter((ext) => formats.includes(ext))
},
loader: {
name: "sound",
extension: {
type: [ExtensionType.LoadParser],
priority: LoaderParserPriority.High
},
/** Should we attempt to load this file? */
test(url) {
const ext = path.extname(url).slice(1);
return !!supported[ext] || mimes.some((mime) => url.startsWith(`data:${mime}`));
},
/** Load the sound file, this is mostly handled by Sound.from() */
async load(url, asset) {
const sound = await new Promise((resolve, reject) => Sound.from({
...asset.data,
url,
preload: true,
loaded(err, sound2) {
if (err) {
reject(err);
} else {
resolve(sound2);
}
asset.data?.loaded?.(err, sound2);
}
}));
getInstance().add(getAlias(asset), sound);
return sound;
},
/** Remove the sound from the library */
async unload(_sound, asset) {
getInstance().remove(getAlias(asset));
}
}
};
extensions$1.add(soundAsset);
export { soundAsset };
//# sourceMappingURL=soundAsset.mjs.map