blob: b161ce865dc04a3b822593b52fc0f17e34dc31dd (
plain)
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
|
var PlayList=function(el){
var playList= el,
files={},
list=[],
loops=4,
status = {
playing : false,
current : 0,
currentLoop : 0
},
audioBuffer = null;
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();
function addItem(data){
list.push(data.url);
playList.innerHTML+='<li>'+
data.url+
'</li>';
if(!status.playing)
play(data.url);
}
function play(data){
audioBuffer = context.createBufferSource();
audioBuffer.buffer=(typeof data=='string')?
(
function(){
status.currentLoop=0;
return files[data];
}
)():data;
audioBuffer.connect(context.destination);
status.playing=true;
audioBuffer.start(0);
audioBuffer.onended=function(){
status.currentLoop++;
if(status.currentLoop>=loops){
status.playing=false;
next();
return;
}
play(this.buffer);
}
}
function next(){
var count = list.length;
status.current++;
if(status.current>=count)
status.current=0;
if(!status.playing)
play(list[status.current]);
}
function recievedAudio(data){
if(files[data.url]){
data.file=null;
addItem(data);
return;
}
var audioBinary=Base64Binary.decodeArrayBuffer(data.file);
context.decodeAudioData(
audioBinary,
function(buffer) {
files[data.url]=buffer;
data.file=null;
addItem(data);
}
);
}
return {
add : addItem,
is : status,
on : {
add:recievedAudio
}
}
}
|