/// /// /** * Phaser - Sound * * A Sound file, used by the Game.SoundManager for playback. */ module Phaser { export class Sound { constructor(context, gainNode, data, volume?: number = 1, loop?: bool = false) { this._context = context; this._gainNode = gainNode; this._buffer = data; this._volume = volume; this.loop = loop; // Local volume control if (this._context !== null) { this._localGainNode = this._context.createGainNode(); this._localGainNode.connect(this._gainNode); this._localGainNode.gain.value = this._volume; } if (this._buffer === null) { this.isDecoding = true; } else { this.play(); } } private _context; private _gainNode; private _localGainNode; private _buffer; private _volume: number; private _sound; loop: bool = false; duration: number; isPlaying: bool = false; isDecoding: bool = false; public setDecodedBuffer(data) { this._buffer = data; this.isDecoding = false; this.play(); } public play() { if (this._buffer === null || this.isDecoding === true) { return; } this._sound = this._context.createBufferSource(); this._sound.buffer = this._buffer; this._sound.connect(this._localGainNode); if (this.loop) { this._sound.loop = true; } this._sound.noteOn(0); // the zero is vitally important, crashes iOS6 without it this.duration = this._sound.buffer.duration; this.isPlaying = true; } public stop() { if (this.isPlaying === true) { this.isPlaying = false; this._sound.noteOff(0); } } public mute() { this._localGainNode.gain.value = 0; } public unmute() { this._localGainNode.gain.value = this._volume; } public set volume(value: number) { this._volume = value; this._localGainNode.gain.value = this._volume; } public get volume(): number { return this._volume; } } }