catmario/lib.js

134 lines
3.9 KiB
JavaScript
Raw Normal View History

2015-10-25 21:35:44 +08:00
//"use strict";
var LibraryDLM = {
$DLM: {
audioCtx: null,
audioBuffer: [],
audioSources: [],
bgmPlayer: null,
currentBgm: 0,
},
sound_init: function() {
var audioCtx;
try {
audioCtx = new (window.AudioContext || window.webkitAudioContext)();
}
catch (e) {
}
if (audioCtx) {
DLM.audioCtx = audioCtx;
// Old Web Audio API (e.g. Safari 6.0.5) had an inconsistently named createGainNode function.
if (typeof (audioCtx.createGain) === 'undefined') audioCtx.createGain = audioCtx.createGainNode;
var loadAudio = function (id, url) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function (e) {
audioCtx.decodeAudioData(this.response, function (buffer) {
DLM.audioBuffer[id] = buffer;
});
};
xhr.send();
}
loadAudio(1, 'bgm/se1.mp3');
loadAudio(2, 'bgm/se2.mp3');
}
var player = document.createElement("AUDIO");
if (player) {
player.volume = 0.5;
DLM.bgmPlayer = player;
}
},
soundplay: function(x) {
var i = 0;
var s = 0;
var d = 0;
switch (x) {
case 1: i = 1; s = 0.000; d = 0.641; break;
case 3: i = 1; s = 0.700; d = 0.432; break;
case 4: i = 1; s = 1.200; d = 0.928; break;
case 5: i = 1; s = 2.200; d = 0.458; break;
case 6: i = 1; s = 2.700; d = 0.249; break;
case 7: i = 1; s = 3.000; d = 0.928; break;
case 8: i = 1; s = 4.000; d = 0.928; break;
case 9: i = 1; s = 5.000; d = 0.928; break;
case 10: i = 1; s = 6.000; d = 0.432; break;
case 11: i = 1; s = 6.500; d = 6.936; break;
case 12: i = 1; s = 13.500; d = 3.253; break;
case 13: i = 2; s = 0.000; d = 0.275; break;
case 14: i = 2; s = 0.300; d = 0.118; break;
case 15: i = 2; s = 0.500; d = 0.797; break;
case 16: i = 2; s = 1.400; d = 4.428; break;
case 17: i = 2; s = 5.900; d = 6.936; break;
case 18: i = 2; s = 13.000; d = 1.476; break;
}
if (i > 0) {
var audioCtx = DLM.audioCtx;
if (audioCtx == null)
return;
var source = audioCtx.createBufferSource();
source.buffer = DLM.audioBuffer[i];
source.connect(audioCtx.destination);
source.start(0, s, d);
source.onended = function () {
if (DLM.audioSources[x] == source) {
DLM.audioSources[x] = null;
}
}
DLM.audioSources[x] = source;
}
},
soundstop: function(x) {
var s = DLM.audioSources[x];
if (s) {
s.stop();
DLM.audioSources[x] = null;
}
},
soundcheck: function(x) {
return DLM.audioSources[x] != null;
},
bgmchange: function (x) {
DLM.currentBgm = x;
},
bgmstop: function (x) {
if (DLM.bgmPlayer) {
DLM.bgmPlayer.pause();
}
},
bgmplay: function(x) {
var player = DLM.bgmPlayer;
if (!player) return;
switch (DLM.currentBgm) {
case 100: player.src = "bgm/field.mp3"; break;
case 103: player.src = "bgm/dungeon.mp3"; break;
case 104: player.src = "bgm/star4.mp3"; break;
case 105: player.src = "bgm/castle.mp3"; break;
case 106: player.src = "bgm/puyo.mp3"; break;
default: return;
}
player.loop = true;
player.play();
}
};
autoAddDeps(LibraryDLM, '$DLM');
mergeInto(LibraryManager.library, LibraryDLM);