Parcourir la source

Added looping + a way to stop sfx and loops

tags/v0.1.0
Fen Dweller il y a 6 ans
Parent
révision
c25e1676a5
Aucune clé connue n'a été trouvée dans la base pour cette signature ID de la clé GPG: E80B35A6F11C3656
1 fichiers modifiés avec 53 ajouts et 2 suppressions
  1. +53
    -2
      audio.js

+ 53
- 2
audio.js Voir le fichier

@@ -1,22 +1,73 @@
let playing = [];
looping = {};

let audioDict = {};

// play some sound

function playAudio(name) {
function playSfx(name) {
if (audioDict[name] == undefined) {
console.log(name + " is not loaded yet, dingus");
return;
}

let src = audioContext.createBufferSource();

src.buffer = audioDict[name];
src.connect(audioContext.destination);

playing.push(src);

src.name = name;
src.onended = (event) => src.done = true;

src.start(0);
}

function playLoop(name) {
if (audioDict[name] == undefined) {
console.log(name + " is not loaded yet, dingus");
return;
}

// if already playing, just keep going
if (looping[name] && !looping[name].done) {
console.log(name + " is already looping");
return;
}

let src = audioContext.createBufferSource();
src.buffer = audioDict[name];
src.connect(audioContext.destination);

looping[name] = src;

src.name = name;
src.onended = (event) => src.done = true;

src.loop = true;

src.start(0);
}

function stopSfx(name) {
playing.map(item => {
if (item.name == name)
item.stop();
} );
cleanPlaying();
}

function stopLoop(name) {
if (looping[name]) {
looping[name].stop();
delete looping[name];
}
}

function cleanPlaying() {
playing = playing.filter(item => !item.done);
}

// asynchronously load an audio file

function loadAudio(name, flush=false) {


Chargement…
Annuler
Enregistrer