提交 2cf28786 编写于 作者: A Adrian Stutz

Don't rely on an existing buffer source node in Audio,

fixes calling setBuffer after Audio has been played
and makes get/setLoop consistent with get/setPlaybackRate.
上级 20167762
......@@ -12,14 +12,14 @@ function Audio( listener ) {
this.type = 'Audio';
this.context = listener.context;
this.source = this.context.createBufferSource();
this.source.onended = this.onEnded.bind( this );
this.gain = this.context.createGain();
this.gain.connect( listener.getInput() );
this.autoplay = false;
this.buffer = null;
this.loop = false;
this.startTime = 0;
this.playbackRate = 1;
this.isPlaying = false;
......@@ -53,7 +53,7 @@ Audio.prototype = Object.assign( Object.create( Object3D.prototype ), {
setBuffer: function ( audioBuffer ) {
this.source.buffer = audioBuffer;
this.buffer = audioBuffer;
this.sourceType = 'buffer';
if ( this.autoplay ) this.play();
......@@ -80,9 +80,9 @@ Audio.prototype = Object.assign( Object.create( Object3D.prototype ), {
var source = this.context.createBufferSource();
source.buffer = this.source.buffer;
source.loop = this.source.loop;
source.onended = this.source.onended;
source.buffer = this.buffer;
source.loop = this.loop;
source.onended = this.onEnded.bind( this );
source.start( 0, this.startTime );
source.playbackRate.value = this.playbackRate;
......@@ -256,7 +256,7 @@ Audio.prototype = Object.assign( Object.create( Object3D.prototype ), {
}
return this.source.loop;
return this.loop;
},
......@@ -269,7 +269,15 @@ Audio.prototype = Object.assign( Object.create( Object3D.prototype ), {
}
this.source.loop = value;
this.loop = value;
if ( this.isPlaying === true ) {
this.source.loop = this.loop;
}
return this;
},
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册