UNPKG

mo-framework

Version:

Hybrid mobile app framework with generators

149 lines (120 loc) 4.4 kB
define(['jquery', 'lodash', './env', './assets'], function ($, _, env, assets) { var html5Audio = { _$iframe: null, _iFrameReady: false, _getIFrame: function () { if (!html5Audio._$iframe) { html5Audio._$iframe = $('<iframe src="' + assets.getDir() + 'ios-player.html" width="0" height="0" frameborder="0">') .appendTo(document.body) .load(function () { html5Audio._iFrameReady = true; }); } return html5Audio._$iframe; }, play: function (src, volume, callback) { var $player = $('<audio>') .attr('src', src); $player[0].volume = volume || 0.5; $player.on('ended', function () { html5Audio.clearPlayer($player); callback && callback(); }); // context: parentElement (body or iframe) function appendAndPlay (parent) { $player.appendTo($(parent)); $player[0].load(); $player[0].play(); } if (env.iOS) { var $iFrame = html5Audio._getIFrame(); if (html5Audio._iFrameReady) { appendAndPlay($iFrame); } else { $iFrame.load(function () { appendAndPlay($iFrame); }); } } else { appendAndPlay(document.body); } return $player; }, clearPlayer: function ($player) { $player[0].pause(); $player // .trigger('ended') .off('ended') .remove(); $player = null; } }, phonegapMedia = { play: function (src, volume, callback) { var player = new Media(src, null, null, function (state) { if (state == 4) { player.release(); callback && callback(); } }); // Obey mute button + keep calm in background. player.play({ playAudioWhenScreenIsLocked : false }); return player; }, clearPlayer: function (player) { player.release(); player.stop(); } }, naMedia = { _na: null, init: function () { naMedia._na = window.plugins && window.plugins.NativeAudio; var sounds = ['award', 'draw', 'gameStart', 'intro', 'lost', 'pk', 'rightAnswer', 'timer', 'won', 'wrongAnswer'], music = ['app', 'game']; _.each(sounds, function (name) { var id = assets.getDir() + 'music/' + name + '.wav'; naMedia._na.preloadSimple(id, id); }); _.each(music, function (name) { var id = assets.getDir() + 'music/' + name + '.mp3'; naMedia._na.preloadComplex(id, id, 1, 1, 0); }); }, play: function (src, volume, callback) { if (src.indexOf('.mp3') != -1) { naMedia._na.loop(src); } else { naMedia._na.play(src); } return src; }, clearPlayer: function (player) { naMedia._na.stop(player); } }, initProxy = { _media: null, init: function () { if (env.phonegap) { if (window.plugins && typeof window.plugins.NativeAudio == 'function') { initProxy._media = naMedia; } else if (typeof window.Media == 'function') { initProxy._media = phonegapMedia; } else { initProxy._media = html5Audio; } } else { initProxy._media = html5Audio; } if (typeof initProxy._media.init == 'function') { return initProxy._media.init.apply(this, arguments); } }, play: function () { return initProxy._media && initProxy._media.play.apply(this, arguments); }, clearPlayer: function () { return initProxy._media && initProxy._media.clearPlayer.apply(this, arguments); } }; return initProxy; });