this.shouldBePlaying = 0;
this.startTime = 0;
this.nextStartTime = 0;
- this.load();
}
Sound.prototype = {
if (this._ended && this._playbackRate > 0)
this.setCurrentTime(0);
- if (this._paused) {
+ if (this._paused || this._ended) {
this._paused = false;
+ this._ended = false;
this.dispatchEventAsync(new CustomEvent('play'));
if (this._readyState < this.READY.FUTURE_DATA)
playInternal: function() {
this.gainNode = Sound.audioContext.createGainNode();
- this.gainNode.gain.value = this._volume;
+ this.gainNode.gain.value = this._muted ? 0 : this._volume;
this.gainNode.connect(Sound.audioContext.destination);
this.node = Sound.audioContext.createBufferSource();
this._autoplay = false;
if (!this._paused) {
- this._paused = false;
+ this._paused = true;
this.dispatchEventAsync(new CustomEvent('timeupdate'));
this.dispatchEventAsync(new CustomEvent('pause'));
}
},
onended: function() {
+ if (this._loop) {
+ this.stopInternal();
+ this.setCurrentTime(0);
+ this.playInternal();
+ return;
+ }
+
this._ended = true;
this.nextStartTime = 0;
this.stopInternal();
setSrc: function(src) {
this._src = src;
- this.load();
+ if (this._autoplay && this._src != null)
+ this.load();
},
getCurrentSrc: function() {
},
setVolume: function(volume) {
+ if (this._volume == volume)
+ return;
+
this._volume = volume;
- if (!this.gainNode)
+ this.dispatchEventAsync(new CustomEvent('volumechange'));
+
+ if (this.gainNode)
+ this.gainNode.gain.value = this._muted ? 0 : this._volume;
+ },
+
+ getMuted: function() {
+ return this._muted;
+ },
+
+ setMuted: function(muted) {
+ if (this._muted == muted)
return;
- this.gainNode.gain.value = volume;
+ this._muted = muted;
this.dispatchEventAsync(new CustomEvent('volumechange'));
+
+ if (this.gainNode)
+ this.gainNode.gain.value = this._muted ? 0 : this._volume;
+ },
+
+ getAutoplay: function() {
+ return this._autoplay;
+ },
+
+ setAutoplay: function(autoplay) {
+ if (this._autoplay == autoplay)
+ return;
+
+ this._autoplay = autoplay;
+ if (this._autoplay && this._src != null)
+ this.load();
+ },
+
+ getLoop: function() {
+ return this._loop;
+ },
+
+ setLoop: function(loop) {
+ this._loop = loop;
},
};