phaser/src/device/Audio.js

118 lines
3.6 KiB
JavaScript
Raw Normal View History

2018-02-12 16:01:20 +00:00
/**
* @author Richard Davey <rich@photonstorm.com>
2022-02-28 14:29:51 +00:00
* @copyright 2022 Photon Storm Ltd.
2019-05-10 15:15:04 +00:00
* @license {@link https://opensource.org/licenses/MIT|MIT License}
2018-02-12 16:01:20 +00:00
*/
var Browser = require('./Browser');
/**
* Determines the audio playback capabilities of the device running this Phaser Game instance.
* These values are read-only and populated during the boot sequence of the game.
* They are then referenced by internal game systems and are available for you to access
* via `this.sys.game.device.audio` from within any Scene.
*
2018-03-28 14:04:09 +00:00
* @typedef {object} Phaser.Device.Audio
* @since 3.0.0
*
* @property {boolean} audioData - Can this device play HTML Audio tags?
* @property {boolean} dolby - Can this device play EC-3 Dolby Digital Plus files?
* @property {boolean} m4a - Can this device can play m4a files.
* @property {boolean} aac - Can this device can play aac files.
* @property {boolean} mp3 - Can this device play mp3 files?
* @property {boolean} ogg - Can this device play ogg files?
* @property {boolean} opus - Can this device play opus files?
* @property {boolean} wav - Can this device play wav files?
* @property {boolean} webAudio - Does this device have the Web Audio API?
* @property {boolean} webm - Can this device play webm files?
*/
2016-11-25 04:33:48 +00:00
var Audio = {
aac: false,
2016-11-25 04:33:48 +00:00
audioData: false,
dolby: false,
m4a: false,
mp3: false,
2016-11-25 04:33:48 +00:00
ogg: false,
opus: false,
wav: false,
webAudio: false,
webm: false
2016-11-25 04:33:48 +00:00
};
function init ()
2016-11-25 04:33:48 +00:00
{
if (typeof importScripts === 'function')
{
return Audio;
}
2016-11-25 04:33:48 +00:00
Audio.audioData = !!(window['Audio']);
2016-11-25 04:33:48 +00:00
Audio.webAudio = !!(window['AudioContext'] || window['webkitAudioContext']);
var audioElement = document.createElement('audio');
var result = !!audioElement.canPlayType;
try
{
if (result)
{
var CanPlay = function (type1, type2)
2016-11-25 04:33:48 +00:00
{
var canPlayType1 = audioElement.canPlayType('audio/' + type1).replace(/^no$/, '');
2016-11-25 04:33:48 +00:00
if (type2)
{
return Boolean(canPlayType1 || audioElement.canPlayType('audio/' + type2).replace(/^no$/, ''));
}
else
{
return Boolean(canPlayType1);
}
};
2016-11-25 04:33:48 +00:00
// wav Mimetypes accepted:
2016-11-25 04:33:48 +00:00
// developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
Audio.ogg = CanPlay('ogg; codecs="vorbis"');
Audio.opus = CanPlay('ogg; codecs="opus"', 'opus');
Audio.mp3 = CanPlay('mpeg');
Audio.wav = CanPlay('wav');
Audio.m4a = CanPlay('x-m4a');
Audio.aac = CanPlay('aac');
Audio.webm = CanPlay('webm; codecs="vorbis"');
2016-11-25 04:33:48 +00:00
2022-06-27 16:52:52 +00:00
if (audioElement.canPlayType('audio/mp4; codecs="ec-3"') !== '')
2016-11-25 04:33:48 +00:00
{
if (Browser.edge)
{
Audio.dolby = true;
}
else if (Browser.safari && Browser.safariVersion >= 9)
{
if ((/Mac OS X (\d+)_(\d+)/).test(navigator.userAgent))
{
var major = parseInt(RegExp.$1, 10);
var minor = parseInt(RegExp.$2, 10);
if ((major === 10 && minor >= 11) || major > 10)
{
Audio.dolby = true;
}
}
}
}
}
}
catch (e)
{
// Nothing to do here
}
return Audio;
}
module.exports = init();