forked from chrelad/keypress
-
Notifications
You must be signed in to change notification settings - Fork 0
/
keypress.js
81 lines (69 loc) · 2.03 KB
/
keypress.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
var KeyPressSoundController = function(options) {
var fileNames = [
"sounds/key0.mp3",
"sounds/key1.mp3",
"sounds/key2.mp3",
"sounds/key3.mp3",
"sounds/key4.mp3",
"sounds/key5.mp3",
"sounds/key6.mp3",
"sounds/key7.mp3",
"sounds/key8.mp3"
];
var loadedAudioFiles = [];
var loadSounds = function(fileNames) {
fileNames.forEach(function(fileName) {
try {
var sound = new Audio(fileName);
sound.load();
loadedAudioFiles.push(sound);
} catch (e) {
console.error("Error loading sound " + fileName);
return;
}
});
};
var playRandomSound = function() {
if (areFilesLoaded()) {
console.error("No audio files have been loaded");
return;
}
var randomIndex = getRandomInt(0, fileNames.length - 1);
var randomSound = loadedAudioFiles[randomIndex];
playAudioObject(randomSound);
};
var playSoundByFileName = function(fileName) {
var ix = fileNames.indexOf(fileName);
playAudioObject(loadedAudioFiles[ix]);
};
var playAudioObject = function(audioObject) {
audioObject.play();
};
var getRandomInt = function(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
};
var areFilesLoaded = function() {
return fileNames.length < 1 || loadedAudioFiles.length < 1;
};
var constructReturnObject = function(options) {
var returnObject = {
FileNames: fileNames,
LoadSounds: loadSounds,
PlayRandomSound: playRandomSound,
PlaySoundByFileName: playSoundByFileName,
AreFilesLoaded: areFilesLoaded
};
if (typeof options === "undefined" || typeof options !== "object") {
applyDefaultOptions(returnObject);
return returnObject;
}
if (options.doNotLoadSoundsAutomatically === false) {
returnObject.LoadSounds(returnObject.FileNames);
}
return returnObject;
};
var applyDefaultOptions = function(returnObject) {
returnObject.LoadSounds(returnObject.FileNames);
};
return constructReturnObject(options);
};