Commit 30bb40a7 authored by LoveEevee's avatar LoveEevee

Fix pausing in bufferedloop

parent 881c4037
...@@ -5,8 +5,8 @@ class BufferedLoop{ ...@@ -5,8 +5,8 @@ class BufferedLoop{
this.context=new AudioContext() this.context=new AudioContext()
this.buffers=[] this.buffers=[]
this.sources=new Set() this.sources=new Set()
this.loadCallback=[]
this.bufferedTime=0 this.bufferedTime=0
this.iteration=0
this.bgm1=bgm1 this.bgm1=bgm1
this.bgm2=bgm2 this.bgm2=bgm2
this.loadSound(bgm1.url,0) this.loadSound(bgm1.url,0)
...@@ -28,11 +28,13 @@ class BufferedLoop{ ...@@ -28,11 +28,13 @@ class BufferedLoop{
setLoaded(){ setLoaded(){
if(this.buffers[0]&&this.buffers[1]){ if(this.buffers[0]&&this.buffers[1]){
this.loaded=true this.loaded=true
if(this.loadCallback){ for(var i in this.loadCallback){
this.loadCallback() this.loadCallback[i]()
delete this.loadCallback }
} }
} }
onLoad(callback){
this.loadCallback.push(callback)
} }
playSound(buffer,time,duration){ playSound(buffer,time,duration){
var self=this var self=this
...@@ -41,11 +43,14 @@ class BufferedLoop{ ...@@ -41,11 +43,14 @@ class BufferedLoop{
source.connect(this.context.destination) source.connect(this.context.destination)
source.start(time) source.start(time)
this.bufferedTime=time+duration this.bufferedTime=time+duration
this.sources.add(source) var sourceObject={
setTimeout(function(){ source:source,
self.sources.delete(source) timeout:setTimeout(function(){
self.sources.delete(sourceObject)
},duration*1000) },duration*1000)
} }
this.sources.add(sourceObject)
}
addLoop(){ addLoop(){
if(this.context.currentTime>this.bufferedTime-1){ if(this.context.currentTime>this.bufferedTime-1){
this.playSound( this.playSound(
...@@ -59,10 +64,12 @@ class BufferedLoop{ ...@@ -59,10 +64,12 @@ class BufferedLoop{
play(){ play(){
var self=this var self=this
if(!this.loaded){ if(!this.loaded){
this.loadCallback=this.play return this.onLoad(function(){
return self.play()
})
} }
this.start=this.context.currentTime+0.1 this.start=this.context.currentTime+0.1
this.iteration=0
this.playSound( this.playSound(
this.buffers[0], this.buffers[0],
this.start, this.start,
...@@ -75,8 +82,9 @@ class BufferedLoop{ ...@@ -75,8 +82,9 @@ class BufferedLoop{
} }
pause(){ pause(){
clearInterval(this.interval) clearInterval(this.interval)
this.sources.forEach(function(source){ this.sources.forEach(function(sourceObject){
source.stop(0) sourceObject.source.stop(0)
clearTimeout(sourceObject.timeout)
}) })
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment