// ---------------------------------------------------------------------------- // Buzz, a Javascript HTML5 Audio library // v1.1.0 - released 2013-08-15 13:18 // Licensed under the MIT license. // http://buzz.jaysalvat.com/ // ---------------------------------------------------------------------------- // Copyright (C) 2010-2013 Jay Salvat // http://jaysalvat.com/ // ---------------------------------------------------------------------------- (function (t, n, e) { "undefined" != typeof module && module.exports ? (module.exports = e()) : "function" == typeof n.define && n.define.amd ? define(t, [], e) : (n[t] = e()); })("buzz", this, function () { var t = { defaults: { autoplay: !1, duration: 5e3, formats: [], loop: !1, placeholder: "--", preload: "metadata", volume: 80, document: document, }, types: { mp3: "audio/mpeg", ogg: "audio/ogg", wav: "audio/wav", aac: "audio/aac", m4a: "audio/x-m4a", }, sounds: [], el: document.createElement("audio"), sound: function (n, e) { function i(t) { for (var n = [], e = t.length - 1, i = 0; e >= i; i++) n.push({ start: t.start(i), end: t.end(i) }); return n; } function u(t) { return t.split(".").pop(); } function s(n, e) { var i = r.createElement("source"); (i.src = e), t.types[u(e)] && (i.type = t.types[u(e)]), n.appendChild(i); } e = e || {}; var r = e.document || t.defaults.document, o = 0, a = [], h = {}, l = t.isSupported(); if ( ((this.load = function () { return l ? (this.sound.load(), this) : this; }), (this.play = function () { return l ? (this.sound.play(), this) : this; }), (this.togglePlay = function () { return l ? (this.sound.paused ? this.sound.play() : this.sound.pause(), this) : this; }), (this.pause = function () { return l ? (this.sound.pause(), this) : this; }), (this.isPaused = function () { return l ? this.sound.paused : null; }), (this.stop = function () { return l ? (this.setTime(0), this.sound.pause(), this) : this; }), (this.isEnded = function () { return l ? this.sound.ended : null; }), (this.loop = function () { return l ? ((this.sound.loop = "loop"), this.bind("ended.buzzloop", function () { (this.currentTime = 0), this.play(); }), this) : this; }), (this.unloop = function () { return l ? (this.sound.removeAttribute("loop"), this.unbind("ended.buzzloop"), this) : this; }), (this.mute = function () { return l ? ((this.sound.muted = !0), this) : this; }), (this.unmute = function () { return l ? ((this.sound.muted = !1), this) : this; }), (this.toggleMute = function () { return l ? ((this.sound.muted = !this.sound.muted), this) : this; }), (this.isMuted = function () { return l ? this.sound.muted : null; }), (this.setVolume = function (t) { return l ? (0 > t && (t = 0), t > 100 && (t = 100), (this.volume = t), (this.sound.volume = t / 100), this) : this; }), (this.getVolume = function () { return l ? this.volume : this; }), (this.increaseVolume = function (t) { return this.setVolume(this.volume + (t || 1)); }), (this.decreaseVolume = function (t) { return this.setVolume(this.volume - (t || 1)); }), (this.setTime = function (t) { if (!l) return this; var n = !0; return ( this.whenReady(function () { n === !0 && ((n = !1), (this.sound.currentTime = t)); }), this ); }), (this.getTime = function () { if (!l) return null; var n = Math.round(100 * this.sound.currentTime) / 100; return isNaN(n) ? t.defaults.placeholder : n; }), (this.setPercent = function (n) { return l ? this.setTime(t.fromPercent(n, this.sound.duration)) : this; }), (this.getPercent = function () { if (!l) return null; var n = Math.round( t.toPercent(this.sound.currentTime, this.sound.duration) ); return isNaN(n) ? t.defaults.placeholder : n; }), (this.setSpeed = function (t) { return l ? ((this.sound.playbackRate = t), this) : this; }), (this.getSpeed = function () { return l ? this.sound.playbackRate : null; }), (this.getDuration = function () { if (!l) return null; var n = Math.round(100 * this.sound.duration) / 100; return isNaN(n) ? t.defaults.placeholder : n; }), (this.getPlayed = function () { return l ? i(this.sound.played) : null; }), (this.getBuffered = function () { return l ? i(this.sound.buffered) : null; }), (this.getSeekable = function () { return l ? i(this.sound.seekable) : null; }), (this.getErrorCode = function () { return l && this.sound.error ? this.sound.error.code : 0; }), (this.getErrorMessage = function () { if (!l) return null; switch (this.getErrorCode()) { case 1: return "MEDIA_ERR_ABORTED"; case 2: return "MEDIA_ERR_NETWORK"; case 3: return "MEDIA_ERR_DECODE"; case 4: return "MEDIA_ERR_SRC_NOT_SUPPORTED"; default: return null; } }), (this.getStateCode = function () { return l ? this.sound.readyState : null; }), (this.getStateMessage = function () { if (!l) return null; switch (this.getStateCode()) { case 0: return "HAVE_NOTHING"; case 1: return "HAVE_METADATA"; case 2: return "HAVE_CURRENT_DATA"; case 3: return "HAVE_FUTURE_DATA"; case 4: return "HAVE_ENOUGH_DATA"; default: return null; } }), (this.getNetworkStateCode = function () { return l ? this.sound.networkState : null; }), (this.getNetworkStateMessage = function () { if (!l) return null; switch (this.getNetworkStateCode()) { case 0: return "NETWORK_EMPTY"; case 1: return "NETWORK_IDLE"; case 2: return "NETWORK_LOADING"; case 3: return "NETWORK_NO_SOURCE"; default: return null; } }), (this.set = function (t, n) { return l ? ((this.sound[t] = n), this) : this; }), (this.get = function (t) { return l ? (t ? this.sound[t] : this.sound) : null; }), (this.bind = function (t, n) { if (!l) return this; t = t.split(" "); for ( var e = this, i = function (t) { n.call(e, t); }, u = 0; t.length > u; u++ ) { var s = t[u], r = s; (s = r.split(".")[0]), a.push({ idx: r, func: i }), this.sound.addEventListener(s, i, !0); } return this; }), (this.unbind = function (t) { if (!l) return this; t = t.split(" "); for (var n = 0; t.length > n; n++) for (var e = t[n], i = e.split(".")[0], u = 0; a.length > u; u++) { var s = a[u].idx.split("."); (a[u].idx == e || (s[1] && s[1] == e.replace(".", ""))) && (this.sound.removeEventListener(i, a[u].func, !0), a.splice(u, 1)); } return this; }), (this.bindOnce = function (t, n) { if (!l) return this; var e = this; return ( (h[o++] = !1), this.bind(t + "." + o, function () { h[o] || ((h[o] = !0), n.call(e)), e.unbind(t + "." + o); }), this ); }), (this.trigger = function (t) { if (!l) return this; t = t.split(" "); for (var n = 0; t.length > n; n++) for (var e = t[n], i = 0; a.length > i; i++) { var u = a[i].idx.split("."); if (a[i].idx == e || (u[0] && u[0] == e.replace(".", ""))) { var s = r.createEvent("HTMLEvents"); s.initEvent(u[0], !1, !0), this.sound.dispatchEvent(s); } } return this; }), (this.fadeTo = function (n, e, i) { function u() { setTimeout(function () { n > s && n > o.volume ? (o.setVolume((o.volume += 1)), u()) : s > n && o.volume > n ? (o.setVolume((o.volume -= 1)), u()) : i instanceof Function && i.apply(o); }, r); } if (!l) return this; e instanceof Function ? ((i = e), (e = t.defaults.duration)) : (e = e || t.defaults.duration); var s = this.volume, r = e / Math.abs(s - n), o = this; return ( this.play(), this.whenReady(function () { u(); }), this ); }), (this.fadeIn = function (t, n) { return l ? this.setVolume(0).fadeTo(100, t, n) : this; }), (this.fadeOut = function (t, n) { return l ? this.fadeTo(0, t, n) : this; }), (this.fadeWith = function (t, n) { return l ? (this.fadeOut(n, function () { this.stop(); }), t.play().fadeIn(n), this) : this; }), (this.whenReady = function (t) { if (!l) return null; var n = this; 0 === this.sound.readyState ? this.bind("canplay.buzzwhenready", function () { t.call(n); }) : t.call(n); }), l && n) ) { for (var d in t.defaults) t.defaults.hasOwnProperty(d) && (e[d] = e[d] || t.defaults[d]); if (((this.sound = r.createElement("audio")), n instanceof Array)) for (var c in n) n.hasOwnProperty(c) && s(this.sound, n[c]); else if (e.formats.length) for (var f in e.formats) e.formats.hasOwnProperty(f) && s(this.sound, n + "." + e.formats[f]); else s(this.sound, n); e.loop && this.loop(), e.autoplay && (this.sound.autoplay = "autoplay"), (this.sound.preload = e.preload === !0 ? "auto" : e.preload === !1 ? "none" : e.preload), this.setVolume(e.volume), t.sounds.push(this); } }, group: function (t) { function n() { for ( var n = e(null, arguments), i = n.shift(), u = 0; t.length > u; u++ ) t[u][i].apply(t[u], n); } function e(t, n) { return t instanceof Array ? t : Array.prototype.slice.call(n); } (t = e(t, arguments)), (this.getSounds = function () { return t; }), (this.add = function (n) { n = e(n, arguments); for (var i = 0; n.length > i; i++) t.push(n[i]); }), (this.remove = function (n) { n = e(n, arguments); for (var i = 0; n.length > i; i++) for (var u = 0; t.length > u; u++) if (t[u] == n[i]) { t.splice(u, 1); break; } }), (this.load = function () { return n("load"), this; }), (this.play = function () { return n("play"), this; }), (this.togglePlay = function () { return n("togglePlay"), this; }), (this.pause = function (t) { return n("pause", t), this; }), (this.stop = function () { return n("stop"), this; }), (this.mute = function () { return n("mute"), this; }), (this.unmute = function () { return n("unmute"), this; }), (this.toggleMute = function () { return n("toggleMute"), this; }), (this.setVolume = function (t) { return n("setVolume", t), this; }), (this.increaseVolume = function (t) { return n("increaseVolume", t), this; }), (this.decreaseVolume = function (t) { return n("decreaseVolume", t), this; }), (this.loop = function () { return n("loop"), this; }), (this.unloop = function () { return n("unloop"), this; }), (this.setTime = function (t) { return n("setTime", t), this; }), (this.set = function (t, e) { return n("set", t, e), this; }), (this.bind = function (t, e) { return n("bind", t, e), this; }), (this.unbind = function (t) { return n("unbind", t), this; }), (this.bindOnce = function (t, e) { return n("bindOnce", t, e), this; }), (this.trigger = function (t) { return n("trigger", t), this; }), (this.fade = function (t, e, i, u) { return n("fade", t, e, i, u), this; }), (this.fadeIn = function (t, e) { return n("fadeIn", t, e), this; }), (this.fadeOut = function (t, e) { return n("fadeOut", t, e), this; }); }, all: function () { return new t.group(t.sounds); }, isSupported: function () { return !!t.el.canPlayType; }, isOGGSupported: function () { return ( !!t.el.canPlayType && t.el.canPlayType('audio/ogg; codecs="vorbis"') ); }, isWAVSupported: function () { return !!t.el.canPlayType && t.el.canPlayType('audio/wav; codecs="1"'); }, isMP3Supported: function () { return !!t.el.canPlayType && t.el.canPlayType("audio/mpeg;"); }, isAACSupported: function () { return ( !!t.el.canPlayType && (t.el.canPlayType("audio/x-m4a;") || t.el.canPlayType("audio/aac;")) ); }, toTimer: function (t, n) { var e, i, u; return ( (e = Math.floor(t / 3600)), (e = isNaN(e) ? "--" : e >= 10 ? e : "0" + e), (i = n ? Math.floor((t / 60) % 60) : Math.floor(t / 60)), (i = isNaN(i) ? "--" : i >= 10 ? i : "0" + i), (u = Math.floor(t % 60)), (u = isNaN(u) ? "--" : u >= 10 ? u : "0" + u), n ? e + ":" + i + ":" + u : i + ":" + u ); }, fromTimer: function (t) { var n = ("" + t).split(":"); return ( n && 3 == n.length && (t = 3600 * parseInt(n[0], 10) + 60 * parseInt(n[1], 10) + parseInt(n[2], 10)), n && 2 == n.length && (t = 60 * parseInt(n[0], 10) + parseInt(n[1], 10)), t ); }, toPercent: function (t, n, e) { var i = Math.pow(10, e || 0); return Math.round(((100 * t) / n) * i) / i; }, fromPercent: function (t, n, e) { var i = Math.pow(10, e || 0); return Math.round((n / 100) * t * i) / i; }, }; return t; });