mami/src/mami.js/sound/osukeys.js

79 lines
2.2 KiB
JavaScript

#include rng.js
const OsuKeys = (function() {
const urlBase = '//static.flash.moe/sounds/';
const rng = new MamiRNG;
let sndRng = false;
const playSound = function(name) {
if(!mami.hasSound())
return;
const urls = {
ogg: urlBase + name + '.ogg',
mp3: urlBase + name + '.mp3',
};
mami.getSound().load('OsuKeys:' + name, urls, function(success, buffer) {
if(success) {
const source = buffer.createSource();
if(sndRng)
source.setRate(1.8 - (rng.sample() * 1.5));
source.play();
}
});
};
const playPress = function() { playSound('key-press-' + rng.next(1, 5).toString()); };
const playCaps = function() { playSound('key-caps'); };
const playConfirm = function() { playSound('key-confirm'); };
const playDelete = function() { playSound('key-delete'); };
const playMove = function() { playSound('key-movement'); };
const keyHandler = function(ev) {
switch(ev.key) {
case 'Enter':
case 'NumpadEnter':
playConfirm();
break;
case 'Backspace':
case 'Delete':
playDelete();
break;
case 'NumLock':
case 'CapsLock':
case 'ScrollLock':
playCaps();
break;
case 'ArrowUp':
case 'ArrowDown':
case 'ArrowLeft':
case 'ArrowRight':
playMove();
break;
case 'Control':
case 'Alt':
case 'Shift':
break;
default:
playPress();
break;
}
};
return {
playConfirm: playConfirm,
playDelete: playDelete,
playCaps: playCaps,
playMove: playMove,
playPress: playPress,
setEnable: function(value) {
if(value)
window.addEventListener('keydown', keyHandler);
else
window.removeEventListener('keydown', keyHandler);
},
setRandomRate: function(value) { sndRng = !!value; },
};
})();