/
roadie.js
127 lines (110 loc) · 2.13 KB
/
roadie.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
var Roadie = function(w, d) {
var map;
var audio = new Audio();
var fileExt;
var canPlay;
var useFile;
var assetDir = 'assets';
var firstTime;
var playFunc = noop;
function init(m, ad) {
map = m;
if(!!ad) {
assetDir = ad
}
}
function noop() {}
function setup() {
testFormat();
testUseFile(function() {
playFunc = useFile ? playFile : playSpriteEntry;
if(map && !useFile) {
firstTime = true;
}
});
}
function testFormat() {
canPlay = true;
if (audio.canPlayType('audio/mpeg') != "") {
fileExt = "mp3";
} else if (audio.canPlayType('audio/wav') != "") {
fileExt = "wav";
} else {
canPlay = false;
}
}
function testUseFile(cb) {
try {
if(canPlay) {
audio.src = assetDir + "/1ssilence." + that.fileExt;
try {
audio.play();
audio.addEventListener('timeupdate', function() {
audio.pause();
useFile = true;
cb();
});
setTimeout(function() {
if(!useFile) {
useFile = false;
cb();
}
}, 1000);
} catch (e) {
useFile = false;
cb();
}
} else {
useFile = false;
cb();
}
} catch(ex) {
canPlay = false;
useFile = false;
cb();
}
}
function playFile(entry, callback) {
try {
if(canPlay && map) {
var aud = new Audio();
aud.src = map[entry].file + '.' + fileExt;
aud.play();
aud.addEventListener('ended', function() {
if(!!callback) {
callback();
}
});
}
} catch(ex) {}
}
function playSpriteEntry(entry, callback) {
var that = this;
try {
if(firstTime) {
audio = document.getElementById(map.soundSprite);
firstTime = false;
} else {
audio.currentTime = map[entry].start;
}
if(canPlay && map && !!audio) {
audio.play();
var x = setInterval(function() {
if(audio.currentTime > map[entry].end) {
audio.pause();
if(callback) {
callback();
}
clearInterval(x);
}
}, 20);
}
} catch(ex) {
console.log("Me cannot play no more: "+ex.message);
}
}
return {
init: init,
play: playFunc
}
}(window, window.document);