phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
361 lines (323 loc) • 10.2 kB
JavaScript
/**
* @author Richard Davey <rich@phaser.io>
* @author Pavle Goloskokovic <pgoloskokovic@gmail.com> (http://prunegames.com)
* @copyright 2013-2025 Phaser Studio Inc.
* @license {@link https://opensource.org/licenses/MIT|MIT License}
*/
var BaseSoundManager = require('../BaseSoundManager');
var Class = require('../../utils/Class');
var EventEmitter = require('eventemitter3');
var NoAudioSound = require('./NoAudioSound');
var NOOP = require('../../utils/NOOP');
/**
* @classdesc
* No-audio implementation of the Sound Manager. It is used if audio has been
* disabled in the game config or the device doesn't support any audio.
*
* It represents a graceful degradation of Sound Manager logic that provides
* minimal functionality and prevents Phaser projects that use audio from
* breaking on devices that don't support any audio playback technologies.
*
* @class NoAudioSoundManager
* @extends Phaser.Sound.BaseSoundManager
* @memberof Phaser.Sound
* @constructor
* @since 3.0.0
*
* @param {Phaser.Game} game - Reference to the current game instance.
*/
var NoAudioSoundManager = new Class({
Extends: EventEmitter,
initialize:
function NoAudioSoundManager (game)
{
EventEmitter.call(this);
this.game = game;
this.sounds = [];
this.mute = false;
this.volume = 1;
this.rate = 1;
this.detune = 0;
this.pauseOnBlur = true;
this.locked = false;
},
/**
* Adds a new sound into the sound manager.
*
* @method Phaser.Sound.NoAudioSoundManager#add
* @since 3.60.0
*
* @param {string} key - Asset key for the sound.
* @param {Phaser.Types.Sound.SoundConfig} [config] - An optional config object containing default sound settings.
*
* @return {Phaser.Sound.NoAudioSound} The new sound instance.
*/
add: function (key, config)
{
var sound = new NoAudioSound(this, key, config);
this.sounds.push(sound);
return sound;
},
/**
* Adds a new audio sprite sound into the sound manager.
* Audio Sprites are a combination of audio files and a JSON configuration.
* The JSON follows the format of that created by https://github.com/tonistiigi/audiosprite
*
* @method Phaser.Sound.NoAudioSoundManager#addAudioSprite
* @since 3.60.0
*
* @param {string} key - Asset key for the sound.
* @param {Phaser.Types.Sound.SoundConfig} [config] - An optional config object containing default sound settings.
*
* @return {Phaser.Sound.NoAudioSound} The new audio sprite sound instance.
*/
addAudioSprite: function (key, config)
{
var sound = this.add(key, config);
sound.spritemap = {};
return sound;
},
/**
* Gets the first sound in the manager matching the given key, if any.
*
* @method Phaser.Sound.NoAudioSoundManager#get
* @since 3.23.0
*
* @generic {Phaser.Sound.BaseSound} T
* @genericUse {T} - [$return]
*
* @param {string} key - Sound asset key.
*
* @return {?Phaser.Sound.BaseSound} - The sound, or null.
*/
get: function (key)
{
return BaseSoundManager.prototype.get.call(this, key);
},
/**
* Gets any sounds in the manager matching the given key.
*
* @method Phaser.Sound.NoAudioSoundManager#getAll
* @since 3.23.0
*
* @generic {Phaser.Sound.BaseSound} T
* @genericUse {T[]} - [$return]
*
* @param {string} key - Sound asset key.
*
* @return {Phaser.Sound.BaseSound[]} - The sounds, or an empty array.
*/
getAll: function (key)
{
return BaseSoundManager.prototype.getAll.call(this, key);
},
/**
* This method does nothing but return 'false' for the No Audio Sound Manager, to maintain
* compatibility with the other Sound Managers.
*
* @method Phaser.Sound.NoAudioSoundManager#play
* @since 3.0.0
*
* @param {string} key - Asset key for the sound.
* @param {(Phaser.Types.Sound.SoundConfig|Phaser.Types.Sound.SoundMarker)} [extra] - An optional additional object containing settings to be applied to the sound. It could be either config or marker object.
*
* @return {boolean} Always 'false' for the No Audio Sound Manager.
*/
// eslint-disable-next-line no-unused-vars
play: function (key, extra)
{
return false;
},
/**
* This method does nothing but return 'false' for the No Audio Sound Manager, to maintain
* compatibility with the other Sound Managers.
*
* @method Phaser.Sound.NoAudioSoundManager#playAudioSprite
* @since 3.0.0
*
* @param {string} key - Asset key for the sound.
* @param {string} spriteName - The name of the sound sprite to play.
* @param {Phaser.Types.Sound.SoundConfig} [config] - An optional config object containing default sound settings.
*
* @return {boolean} Always 'false' for the No Audio Sound Manager.
*/
// eslint-disable-next-line no-unused-vars
playAudioSprite: function (key, spriteName, config)
{
return false;
},
/**
* Removes a sound from the sound manager.
* The removed sound is destroyed before removal.
*
* @method Phaser.Sound.NoAudioSoundManager#remove
* @since 3.0.0
*
* @param {Phaser.Sound.BaseSound} sound - The sound object to remove.
*
* @return {boolean} True if the sound was removed successfully, otherwise false.
*/
remove: function (sound)
{
return BaseSoundManager.prototype.remove.call(this, sound);
},
/**
* Removes all sounds from the manager, destroying the sounds.
*
* @method Phaser.Sound.NoAudioSoundManager#removeAll
* @since 3.23.0
*/
removeAll: function ()
{
return BaseSoundManager.prototype.removeAll.call(this);
},
/**
* Removes all sounds from the sound manager that have an asset key matching the given value.
* The removed sounds are destroyed before removal.
*
* @method Phaser.Sound.NoAudioSoundManager#removeByKey
* @since 3.0.0
*
* @param {string} key - The key to match when removing sound objects.
*
* @return {number} The number of matching sound objects that were removed.
*/
removeByKey: function (key)
{
return BaseSoundManager.prototype.removeByKey.call(this, key);
},
/**
* Stops any sounds matching the given key.
*
* @method Phaser.Sound.NoAudioSoundManager#stopByKey
* @since 3.23.0
*
* @param {string} key - Sound asset key.
*
* @return {number} - How many sounds were stopped.
*/
stopByKey: function (key)
{
return BaseSoundManager.prototype.stopByKey.call(this, key);
},
/**
* Empty function for the No Audio Sound Manager.
*
* @method Phaser.Sound.NoAudioSoundManager#onBlur
* @since 3.0.0
*/
onBlur: NOOP,
/**
* Empty function for the No Audio Sound Manager.
*
* @method Phaser.Sound.NoAudioSoundManager#onFocus
* @since 3.0.0
*/
onFocus: NOOP,
/**
* Empty function for the No Audio Sound Manager.
*
* @method Phaser.Sound.NoAudioSoundManager#onGameBlur
* @since 3.0.0
*/
onGameBlur: NOOP,
/**
* Empty function for the No Audio Sound Manager.
*
* @method Phaser.Sound.NoAudioSoundManager#onGameFocus
* @since 3.0.0
*/
onGameFocus: NOOP,
/**
* Empty function for the No Audio Sound Manager.
*
* @method Phaser.Sound.NoAudioSoundManager#pauseAll
* @since 3.0.0
*/
pauseAll: NOOP,
/**
* Empty function for the No Audio Sound Manager.
*
* @method Phaser.Sound.NoAudioSoundManager#resumeAll
* @since 3.0.0
*/
resumeAll: NOOP,
/**
* Empty function for the No Audio Sound Manager.
*
* @method Phaser.Sound.NoAudioSoundManager#stopAll
* @since 3.0.0
*/
stopAll: NOOP,
/**
* Empty function for the No Audio Sound Manager.
*
* @method Phaser.Sound.NoAudioSoundManager#update
* @since 3.0.0
*/
update: NOOP,
/**
* Empty function for the No Audio Sound Manager.
*
* @method Phaser.Sound.NoAudioSoundManager#setRate
* @since 3.0.0
*
* @return {this} This Sound Manager.
*/
setRate: NOOP,
/**
* Empty function for the No Audio Sound Manager.
*
* @method Phaser.Sound.NoAudioSoundManager#setDetune
* @since 3.0.0
*
* @return {this} This Sound Manager.
*/
setDetune: NOOP,
/**
* Empty function for the No Audio Sound Manager.
*
* @method Phaser.Sound.NoAudioSoundManager#setMute
* @since 3.0.0
*/
setMute: NOOP,
/**
* Empty function for the No Audio Sound Manager.
*
* @method Phaser.Sound.NoAudioSoundManager#setVolume
* @since 3.0.0
*/
setVolume: NOOP,
/**
* Empty function for the No Audio Sound Manager.
*
* @method Phaser.Sound.NoAudioSoundManager#unlock
* @since 3.0.0
*/
unlock: NOOP,
/**
* Method used internally for iterating only over active sounds and skipping sounds that are marked for removal.
*
* @method Phaser.Sound.NoAudioSoundManager#forEachActiveSound
* @private
* @since 3.0.0
*
* @param {Phaser.Types.Sound.EachActiveSoundCallback} callback - Callback function. (manager: Phaser.Sound.BaseSoundManager, sound: Phaser.Sound.BaseSound, index: number, sounds: Phaser.Manager.BaseSound[]) => void
* @param {*} [scope] - Callback context.
*/
forEachActiveSound: function (callbackfn, scope)
{
BaseSoundManager.prototype.forEachActiveSound.call(this, callbackfn, scope);
},
/**
* Destroys all the sounds in the game and all associated events.
*
* @method Phaser.Sound.NoAudioSoundManager#destroy
* @since 3.0.0
*/
destroy: function ()
{
BaseSoundManager.prototype.destroy.call(this);
}
});
module.exports = NoAudioSoundManager;