1.9 switch to SoundManager2 for better HTML5 audio support
This commit is contained in:
parent
c79720b923
commit
2cb7987932
14 changed files with 1322 additions and 1890 deletions
64
index.html
64
index.html
|
@ -8,8 +8,8 @@
|
|||
<link href="style/Style.css" rel="stylesheet" type="text/css" />
|
||||
<link href="js/fancybox/jquery.fancybox-1.3.4.css" rel="stylesheet" type="text/css" />
|
||||
<link href="js/contextMenu/jquery.contextMenu.css" rel="stylesheet" type="text/css" />
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="js/audiojs/audio.min.js" type="text/javascript"></script>
|
||||
<script src="js/jquery-1.7.2.min.js" type="text/javascript"></script>
|
||||
<script src="js/sm/soundmanager2-jsmin.js" type="text/javascript"></script>
|
||||
<script src="js/jquery.scrollTo-1.4.2-min.js" type="text/javascript"></script>
|
||||
<script src="js/jquery.disable.text.select.pack.js" type="text/javascript"></script>
|
||||
<script src="js/jquery.cookie.js" type="text/javascript"></script>
|
||||
|
@ -23,50 +23,17 @@
|
|||
<script src="js/ui-load.js" type="text/javascript"></script>
|
||||
<script src="js/ui-ready.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">
|
||||
var a;
|
||||
var audio;
|
||||
audiojs.events.ready(function () {
|
||||
a = audiojs.createAll({
|
||||
trackEnded: function () {
|
||||
var next = $('#CurrentPlaylistContainer tr.playing').next();
|
||||
changeTrack(next);
|
||||
},
|
||||
updatePlayhead: function (percent) {
|
||||
var player = this.settings.createPlayer;
|
||||
var scrubber = $(this.wrapper).find("." + player.scrubberClass);
|
||||
var progress = $(this.wrapper).find("." + player.progressClass);
|
||||
|
||||
progress.css('width', (scrubber.get(0).offsetWidth * percent) + 'px');
|
||||
|
||||
var played = $(this.wrapper).find("." + player.playedClass);
|
||||
var p = this.duration * percent,
|
||||
m = Math.floor(p / 60),
|
||||
s = Math.floor(p % 60);
|
||||
played.html((m < 10 ? '0' : '') + m + ':' + (s < 10 ? '0' : '') + s);
|
||||
|
||||
if (!scrobbled && p > 30 && (percent > 0.5 || p > 480)) {
|
||||
scrobbleSong(true);
|
||||
}
|
||||
},
|
||||
useFlash: (function() {
|
||||
var a = document.createElement('audio'),
|
||||
userAgent = navigator.userAgent.toLowerCase(),
|
||||
version = parseFloat((userAgent.match( /.+(?:rv|it|ra|ie|me)[\/: ]([\d.]+)/ ) || [])[1]);
|
||||
|
||||
if (/chrome/.test(userAgent) && version < 10) return false;
|
||||
return !(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, ''));
|
||||
})()
|
||||
});
|
||||
// Load in the first track
|
||||
audio = a[0];
|
||||
});
|
||||
|
||||
soundManager.url = 'js/sm/swf';
|
||||
soundManager.preferFlash = false;
|
||||
soundManager.debugMode = false;
|
||||
//soundManager.flashVersion = 9; // optional: shiny features (default = 8)
|
||||
//soundManager.useFlashBlock = false; // optionally, enable when you're ready to dive in
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="container">
|
||||
<div id="messages">This is a test!</div>
|
||||
<div id="messages"></div>
|
||||
<div id="nav">
|
||||
<ul class="tabs">
|
||||
<li><a href="#tabLibrary" class="first" title="Library"><img src="images/headphones_gd_16x14.png" /></a></li>
|
||||
|
@ -247,7 +214,11 @@
|
|||
<span class="changes"></span>
|
||||
</li>
|
||||
-->
|
||||
<li class="log"><span class="version">Current - 1.8</span>
|
||||
<li class="log"><span class="version">3/31/2012 - 1.9</span>
|
||||
<span class="changes">Switched to SoundManager2 audio library (changing track position currently not functional, next update)</span>
|
||||
<span class="changes">Other minor bug fixes</span>
|
||||
</li>
|
||||
<li class="log"><span class="version">3/27/2012 - 1.8</span>
|
||||
<span class="changes">Added Download link to Albums</span>
|
||||
<span class="changes">Fixed bug with Next/Previous keyboard shortcuts</span>
|
||||
<span class="changes">Moved navigation since most displays are widescreen</span>
|
||||
|
@ -287,7 +258,7 @@
|
|||
<h3 class="title">Thanks</h3>
|
||||
<ul class="preferences">
|
||||
<li>Icons - <a href="http://somerandomdude.com/work/iconic" target="_blank">http://somerandomdude.com/work/iconic</a></li>
|
||||
<li>Audio Library - <a href="http://kolber.github.com/audiojs" target="_blank">http://kolber.github.com/audiojs</a></li>
|
||||
<li>Audio Library - <a href="http://www.schillmania.com/projects/soundmanager2" target="_blank">http://www.schillmania.com/projects/soundmanager2</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -325,7 +296,12 @@
|
|||
</div>
|
||||
<div class="playeractionssmall"><a href="#" class="button" id="action_ToggleSideBar" title="Toggle Side Bar"><img src="images/arrow_right_gl_12x12.png" /></a></div>
|
||||
<div id="playermiddle">
|
||||
<div id="audiocontainer"><audio src="" preload="none" /></div>
|
||||
<div id="audiocontainer">
|
||||
<div class="audiojs" id="audio_wrapper0">
|
||||
<div class="scrubber"><div class="progress"></div><div class="loaded" ></div></div>
|
||||
<div class="time"><em class="played">00:00</em>/<strong class="duration">00:00</strong></div><div class="error-message"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
|
|
49
js/app.js
49
js/app.js
|
@ -408,8 +408,49 @@ function playSong(el, songid, albumid) {
|
|||
$('#coverartimage img').attr('src', baseURL + '/getCoverArt.view?v=1.6.0&c=' + applicationName + '&f=jsonp&size=50&id=' + coverart);
|
||||
$('#playermiddle').css('visibility', 'visible');
|
||||
$('#songdetails').css('visibility', 'visible');
|
||||
audio.load(baseURL + '/stream.view?u=' + username + '&p=' + passwordenc + '&v=' + version + '&c=' + applicationName + '&f=jsonp&id=' + songid);
|
||||
audio.play();
|
||||
// SoundManager Initialize
|
||||
soundManager.destroySound('audio');
|
||||
soundManager.createSound({
|
||||
id: 'audio',
|
||||
url: baseURL + '/stream.view?u=' + username + '&p=' + passwordenc + '&v=' + version + '&c=' + applicationName + '&f=jsonp&id=' + songid,
|
||||
whileloading: function () {
|
||||
console.log('loaded:' + this.bytesLoaded + ' total:' + this.bytesTotal);
|
||||
var percent = this.bytesLoaded / this.bytesTotal;
|
||||
var scrubber = $('#audio_wrapper0').find(".scrubber");
|
||||
var loaded = $('#audio_wrapper0').find(".loaded");
|
||||
loaded.css('width', (scrubber.get(0).offsetWidth * percent) + 'px');
|
||||
},
|
||||
whileplaying: function () {
|
||||
//console.log('position:' + this.position + ' duration:' + this.duration);
|
||||
var percent = this.position / this.duration;
|
||||
var scrubber = $('#audio_wrapper0').find(".scrubber");
|
||||
var progress = $('#audio_wrapper0').find(".progress");
|
||||
progress.css('width', (scrubber.get(0).offsetWidth * percent) + 'px');
|
||||
|
||||
var played = $('#audio_wrapper0').find(".played");
|
||||
var p = (this.duration / 1000) * percent,
|
||||
m = Math.floor(p / 60),
|
||||
s = Math.floor(p % 60);
|
||||
played.html((m < 10 ? '0' : '') + m + ':' + (s < 10 ? '0' : '') + s);
|
||||
|
||||
// Scrobble song once percentage is reached
|
||||
if (!scrobbled && p > 30 && (percent > 0.5 || p > 480)) {
|
||||
scrobbleSong(true);
|
||||
}
},
|
||||
onload: function () {
|
||||
var duration = $('#audio_wrapper0').find(".duration");
|
||||
var dp = this.duration / 1000,
|
||||
dm = Math.floor(dp / 60),
|
||||
ds = Math.floor(dp % 60);
|
||||
duration.html((dm < 10 ? '0' : '') + dm + ':' + (ds < 10 ? '0' : '') + ds);
|
||||
},
|
||||
onfinish: function () {
|
||||
var next = $('#CurrentPlaylistContainer tr.playing').next();
|
||||
changeTrack(next);
|
||||
}
|
||||
});
|
||||
soundManager.play('audio');
|
||||
|
||||
$('table.songlist tr.song').removeClass('playing');
|
||||
$(el).addClass('playing');
|
||||
$('#PlayTrack').find('img').attr('src', 'images/pause_24x32.png');
|
||||
|
@ -466,12 +507,12 @@ function playPauseSong() {
|
|||
$(el).find('img').attr('src', 'images/play_24x32.png');
|
||||
$(el).removeClass('playing');
|
||||
$(el).addClass('paused');
|
||||
audio.playPause();
|
||||
soundManager.pause('audio');
|
||||
} else if ($(el).hasClass('paused')) {
|
||||
$(el).find('img').attr('src', 'images/pause_24x32.png');
|
||||
$(el).removeClass('paused');
|
||||
$(el).addClass('playing');
|
||||
audio.playPause();
|
||||
soundManager.resume('audio');
|
||||
} else {
|
||||
// Start playing song
|
||||
var play = $('#CurrentPlaylistContainer tr.selected').first();
|
||||
|
|
|
@ -1,704 +0,0 @@
|
|||
// A cross-browser javascript shim for html5 audio
|
||||
(function (audiojs, audiojsInstance, container) {
|
||||
// Use the path to the audio.js file to create relative paths to the swf and player graphics
|
||||
// Remember that some systems (e.g. ruby on rails) append strings like '?1301478336' to asset paths
|
||||
var path = (function () {
|
||||
var re = new RegExp('audio(\.min)?\.js.*'),
|
||||
scripts = document.getElementsByTagName('script');
|
||||
for (var i = 0, ii = scripts.length; i < ii; i++) {
|
||||
var path = scripts[i].getAttribute('src');
|
||||
if (re.test(path)) return path.replace(re, '');
|
||||
}
|
||||
})();
|
||||
|
||||
// ##The audiojs interface
|
||||
// This is the global object which provides an interface for creating new `audiojs` instances.
|
||||
// It also stores all of the construction helper methods and variables.
|
||||
container[audiojs] = {
|
||||
instanceCount: 0,
|
||||
instances: {},
|
||||
// The markup for the swf. It is injected into the page if there is not support for the `<audio>` element. The `$n`s are placeholders.
|
||||
// `$1` The name of the flash movie
|
||||
// `$2` The path to the swf
|
||||
// `$3` Cache invalidation
|
||||
flashSource: '\
|
||||
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="$1" width="1" height="1" name="$1" style="position: absolute; left: -1px;"> \
|
||||
<param name="movie" value="$2?playerInstance=' + audiojs + '.instances[\'$1\']&datetime=$3"> \
|
||||
<param name="allowscriptaccess" value="always"> \
|
||||
<embed name="$1" src="$2?playerInstance=' + audiojs + '.instances[\'$1\']&datetime=$3" width="1" height="1" allowscriptaccess="always"> \
|
||||
</object>',
|
||||
|
||||
// ### The main settings object
|
||||
// Where all the default settings are stored. Each of these variables and methods can be overwritten by the user-provided `options` object.
|
||||
settings: {
|
||||
autoplay: false,
|
||||
loop: false,
|
||||
preload: true,
|
||||
imageLocation: path + 'player-graphics.gif',
|
||||
swfLocation: path + 'audiojs.swf',
|
||||
useFlash: (function () {
|
||||
var a = document.createElement('audio');
|
||||
return !(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, ''));
|
||||
})(),
|
||||
hasFlash: (function () {
|
||||
if (navigator.plugins && navigator.plugins.length && navigator.plugins['Shockwave Flash']) {
|
||||
return true;
|
||||
} else if (navigator.mimeTypes && navigator.mimeTypes.length) {
|
||||
var mimeType = navigator.mimeTypes['application/x-shockwave-flash'];
|
||||
return mimeType && mimeType.enabledPlugin;
|
||||
} else {
|
||||
try {
|
||||
var ax = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
|
||||
return true;
|
||||
} catch (e) { }
|
||||
}
|
||||
return false;
|
||||
})(),
|
||||
// The default markup and classes for creating the player:
|
||||
createPlayer: {
|
||||
markup: '\
|
||||
<div class="play-pause"> \
|
||||
<p class="play"></p> \
|
||||
<p class="pause"></p> \
|
||||
<p class="loading"></p> \
|
||||
<p class="error"></p> \
|
||||
</div> \
|
||||
<div class="scrubber"> \
|
||||
<div class="progress"></div> \
|
||||
<div class="loaded"></div> \
|
||||
</div> \
|
||||
<div class="time"> \
|
||||
<em class="played">00:00</em>/<strong class="duration">00:00</strong> \
|
||||
</div> \
|
||||
<div class="error-message"></div>',
|
||||
playPauseClass: 'play-pause',
|
||||
scrubberClass: 'scrubber',
|
||||
progressClass: 'progress',
|
||||
loaderClass: 'loaded',
|
||||
timeClass: 'time',
|
||||
durationClass: 'duration',
|
||||
playedClass: 'played',
|
||||
errorMessageClass: 'error-message',
|
||||
playingClass: 'playing',
|
||||
loadingClass: 'loading',
|
||||
errorClass: 'error'
|
||||
},
|
||||
// The css used by the default player. This is is dynamically injected into a `<style>` tag in the top of the head.
|
||||
css: '\
|
||||
.audiojs audio { position: absolute; left: -1px; } \
|
||||
.audiojs { width: 460px; height: 36px; background: #404040; overflow: hidden; font-family: monospace; font-size: 12px; \
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #444), color-stop(0.5, #555), color-stop(0.51, #444), color-stop(1, #444)); \
|
||||
background-image: -moz-linear-gradient(center top, #444 0%, #555 50%, #444 51%, #444 100%); \
|
||||
-webkit-box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.3); -moz-box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.3); \
|
||||
-o-box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.3); box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.3); } \
|
||||
.audiojs .play-pause { width: 25px; height: 40px; padding: 4px 6px; margin: 0px; float: left; overflow: hidden; border-right: 1px solid #000; } \
|
||||
.audiojs p { display: none; width: 25px; height: 40px; margin: 0px; cursor: pointer; } \
|
||||
.audiojs .play { display: block; } \
|
||||
.audiojs .scrubber { position: relative; float: left; width: 280px; background: #5a5a5a; height: 14px; margin: 10px; border-top: 1px solid #3f3f3f; border-left: 0px; border-bottom: 0px; overflow: hidden; } \
|
||||
.audiojs .progress { position: absolute; top: 0px; left: 0px; height: 14px; width: 0px; background: #ccc; z-index: 1; \
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #ccc), color-stop(0.5, #ddd), color-stop(0.51, #ccc), color-stop(1, #ccc)); \
|
||||
background-image: -moz-linear-gradient(center top, #ccc 0%, #ddd 50%, #ccc 51%, #ccc 100%); } \
|
||||
.audiojs .loaded { position: absolute; top: 0px; left: 0px; height: 14px; width: 0px; background: #000; \
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #222), color-stop(0.5, #333), color-stop(0.51, #222), color-stop(1, #222)); \
|
||||
background-image: -moz-linear-gradient(center top, #222 0%, #333 50%, #222 51%, #222 100%); } \
|
||||
.audiojs .time { float: left; height: 36px; line-height: 36px; margin: 0px 0px 0px 6px; padding: 0px 6px 0px 12px; border-left: 1px solid #000; color: #ddd; text-shadow: 1px 1px 0px rgba(0, 0, 0, 0.5); } \
|
||||
.audiojs .time em { padding: 0px 2px 0px 0px; color: #f9f9f9; font-style: normal; } \
|
||||
.audiojs .time strong { padding: 0px 0px 0px 2px; font-weight: normal; } \
|
||||
.audiojs .error-message { float: left; display: none; margin: 0px 10px; height: 36px; width: 400px; overflow: hidden; line-height: 36px; white-space: nowrap; color: #fff; \
|
||||
text-overflow: ellipsis; -o-text-overflow: ellipsis; -icab-text-overflow: ellipsis; -khtml-text-overflow: ellipsis; -moz-text-overflow: ellipsis; -webkit-text-overflow: ellipsis; } \
|
||||
.audiojs .error-message a { color: #eee; text-decoration: none; padding-bottom: 1px; border-bottom: 1px solid #999; white-space: wrap; } \
|
||||
\
|
||||
.audiojs .play { background: url("$1") -2px -1px no-repeat; } \
|
||||
.audiojs .loading { background: url("$1") -2px -31px no-repeat; } \
|
||||
.audiojs .error { background: url("$1") -2px -61px no-repeat; } \
|
||||
.audiojs .pause { background: url("$1") -2px -91px no-repeat; } \
|
||||
\
|
||||
.playing .play, .playing .loading, .playing .error { display: none; } \
|
||||
.playing .pause { display: block; } \
|
||||
\
|
||||
.loading .play, .loading .pause, .loading .error { display: none; } \
|
||||
.loading .loading { display: block; } \
|
||||
\
|
||||
.error .time, .error .play, .error .pause, .error .scrubber, .error .loading { display: none; } \
|
||||
.error .error { display: block; } \
|
||||
.error .play-pause p { cursor: auto; } \
|
||||
.error .error-message { display: block; }',
|
||||
// The default event callbacks:
|
||||
trackEnded: function (e) { },
|
||||
flashError: function () {
|
||||
var player = this.settings.createPlayer,
|
||||
errorMessage = getByClass(player.errorMessageClass, this.wrapper),
|
||||
html = 'Missing <a href="http://get.adobe.com/flashplayer/">flash player</a> plugin.';
|
||||
if (this.mp3) html += ' <a href="' + this.mp3 + '">Download audio file</a>.';
|
||||
container[audiojs].helpers.removeClass(this.wrapper, player.loadingClass);
|
||||
container[audiojs].helpers.addClass(this.wrapper, player.errorClass);
|
||||
errorMessage.innerHTML = html;
|
||||
},
|
||||
loadError: function (e) {
|
||||
var player = this.settings.createPlayer,
|
||||
errorMessage = getByClass(player.errorMessageClass, this.wrapper);
|
||||
container[audiojs].helpers.removeClass(this.wrapper, player.loadingClass);
|
||||
container[audiojs].helpers.addClass(this.wrapper, player.errorClass);
|
||||
errorMessage.innerHTML = 'Error loading: "' + this.mp3 + '"';
|
||||
},
|
||||
init: function () {
|
||||
var player = this.settings.createPlayer;
|
||||
container[audiojs].helpers.addClass(this.wrapper, player.loadingClass);
|
||||
},
|
||||
loadStarted: function () {
|
||||
var player = this.settings.createPlayer,
|
||||
duration = getByClass(player.durationClass, this.wrapper),
|
||||
m = Math.floor(this.duration / 60),
|
||||
s = Math.floor(this.duration % 60);
|
||||
container[audiojs].helpers.removeClass(this.wrapper, player.loadingClass);
|
||||
duration.innerHTML = ((m < 10 ? '0' : '') + m + ':' + (s < 10 ? '0' : '') + s);
|
||||
},
|
||||
loadProgress: function (percent) {
|
||||
var player = this.settings.createPlayer,
|
||||
scrubber = getByClass(player.scrubberClass, this.wrapper),
|
||||
loaded = getByClass(player.loaderClass, this.wrapper);
|
||||
loaded.style.width = (scrubber.offsetWidth * percent) + 'px';
|
||||
|
||||
},
|
||||
playPause: function () {
|
||||
if (this.playing) this.settings.play();
|
||||
else this.settings.pause();
|
||||
},
|
||||
play: function () {
|
||||
var player = this.settings.createPlayer;
|
||||
container[audiojs].helpers.addClass(this.wrapper, player.playingClass);
|
||||
},
|
||||
pause: function () {
|
||||
var player = this.settings.createPlayer;
|
||||
container[audiojs].helpers.removeClass(this.wrapper, player.playingClass);
|
||||
},
|
||||
updatePlayhead: function (percent) {
|
||||
var player = this.settings.createPlayer,
|
||||
scrubber = getByClass(player.scrubberClass, this.wrapper),
|
||||
progress = getByClass(player.progressClass, this.wrapper);
|
||||
progress.style.width = (scrubber.offsetWidth * percent) + 'px';
|
||||
|
||||
var played = getByClass(player.playedClass, this.wrapper),
|
||||
p = this.duration * percent,
|
||||
m = Math.floor(p / 60),
|
||||
s = Math.floor(p % 60);
|
||||
played.innerHTML = ((m < 10 ? '0' : '') + m + ':' + (s < 10 ? '0' : '') + s);
|
||||
}
|
||||
},
|
||||
|
||||
// ### Contructor functions
|
||||
|
||||
// `create()`
|
||||
// Used to create a single `audiojs` instance.
|
||||
// If an array is passed then it calls back to `createAll()`.
|
||||
// Otherwise, it creates a single instance and returns it.
|
||||
create: function (element, options) {
|
||||
var options = options || {}
|
||||
if (element.length) {
|
||||
return this.createAll(options, element);
|
||||
} else {
|
||||
return this.newInstance(element, options);
|
||||
}
|
||||
},
|
||||
|
||||
// `createAll()`
|
||||
// Creates multiple `audiojs` instances.
|
||||
// If `elements` is `null`, then automatically find any `<audio>` tags on the page and create `audiojs` instances for them.
|
||||
createAll: function (options, elements) {
|
||||
var audioElements = elements || document.getElementsByTagName('audio'),
|
||||
instances = []
|
||||
options = options || {};
|
||||
for (var i = 0, ii = audioElements.length; i < ii; i++) {
|
||||
instances.push(this.newInstance(audioElements[i], options));
|
||||
}
|
||||
return instances;
|
||||
},
|
||||
|
||||
// ### Creating and returning a new instance
|
||||
// This goes through all the steps required to build out a usable `audiojs` instance.
|
||||
newInstance: function (element, options) {
|
||||
var element = element,
|
||||
s = this.helpers.clone(this.settings),
|
||||
id = 'audiojs' + this.instanceCount,
|
||||
wrapperId = 'audiojs_wrapper' + this.instanceCount,
|
||||
instanceCount = this.instanceCount++;
|
||||
|
||||
// Check for `autoplay`, `loop` and `preload` attributes and write them into the settings.
|
||||
if (element.getAttribute('autoplay') != null) s.autoplay = true;
|
||||
if (element.getAttribute('loop') != null) s.loop = true;
|
||||
if (element.getAttribute('preload') == 'none') s.preload = false;
|
||||
// Merge the default settings with the user-defined `options`.
|
||||
if (options) this.helpers.merge(s, options);
|
||||
|
||||
// Inject the player html if required.
|
||||
if (s.createPlayer.markup) element = this.createPlayer(element, s.createPlayer, wrapperId);
|
||||
else element.parentNode.setAttribute('id', wrapperId);
|
||||
|
||||
// Return a new `audiojs` instance.
|
||||
var audio = new container[audiojsInstance](element, s);
|
||||
|
||||
// If css has been passed in, dynamically inject it into the `<head>`.
|
||||
if (s.css) this.helpers.injectCss(audio, s.css);
|
||||
|
||||
// If `<audio>` or mp3 playback isn't supported, insert the swf & attach the required events for it.
|
||||
if (s.useFlash && s.hasFlash) {
|
||||
this.injectFlash(audio, id);
|
||||
this.attachFlashEvents(audio.wrapper, audio);
|
||||
} else if (s.useFlash && !s.hasFlash) {
|
||||
this.settings.flashError.apply(audio);
|
||||
}
|
||||
|
||||
// Attach event callbacks to the new audiojs instance.
|
||||
if (!s.useFlash || (s.useFlash && s.hasFlash)) this.attachEvents(audio.wrapper, audio);
|
||||
|
||||
// Store the newly-created `audiojs` instance.
|
||||
this.instances[id] = audio;
|
||||
return audio;
|
||||
},
|
||||
|
||||
// ### Helper methods for constructing a working player
|
||||
// Inject a wrapping div and the markup for the html player.
|
||||
createPlayer: function (element, player, id) {
|
||||
var wrapper = document.createElement('div'),
|
||||
newElement = element.cloneNode(true);
|
||||
wrapper.setAttribute('class', 'audiojs');
|
||||
wrapper.setAttribute('className', 'audiojs');
|
||||
wrapper.setAttribute('id', id);
|
||||
|
||||
// Fix IE's broken implementation of `innerHTML` & `cloneNode` for HTML5 elements.
|
||||
if (newElement.outerHTML && !document.createElement('audio').canPlayType) {
|
||||
newElement = this.helpers.cloneHtml5Node(element);
|
||||
wrapper.innerHTML = player.markup;
|
||||
wrapper.appendChild(newElement);
|
||||
element.outerHTML = wrapper.outerHTML;
|
||||
wrapper = document.getElementById(id);
|
||||
} else {
|
||||
wrapper.appendChild(newElement);
|
||||
wrapper.innerHTML = wrapper.innerHTML + player.markup;
|
||||
element.parentNode.replaceChild(wrapper, element);
|
||||
}
|
||||
return wrapper.getElementsByTagName('audio')[0];
|
||||
},
|
||||
|
||||
// Attaches useful event callbacks to an `audiojs` instance.
|
||||
attachEvents: function (wrapper, audio) {
|
||||
if (!audio.settings.createPlayer) return;
|
||||
var player = audio.settings.createPlayer,
|
||||
playPause = getByClass(player.playPauseClass, wrapper),
|
||||
scrubber = getByClass(player.scrubberClass, wrapper),
|
||||
leftPos = function (elem) {
|
||||
var curleft = 0;
|
||||
if (elem.offsetParent) {
|
||||
do { curleft += elem.offsetLeft; } while (elem = elem.offsetParent);
|
||||
}
|
||||
return curleft;
|
||||
};
|
||||
|
||||
container[audiojs].events.addListener(playPause, 'click', function (e) {
|
||||
audio.playPause.apply(audio);
|
||||
});
|
||||
|
||||
container[audiojs].events.addListener(scrubber, 'click', function (e) {
|
||||
var relativeLeft = e.clientX - leftPos(this);
|
||||
audio.skipTo(relativeLeft / scrubber.offsetWidth);
|
||||
});
|
||||
|
||||
// _If flash is being used, then the following handlers don't need to be registered._
|
||||
if (audio.settings.useFlash) return;
|
||||
|
||||
// Start tracking the load progress of the track.
|
||||
container[audiojs].events.trackLoadProgress(audio);
|
||||
|
||||
container[audiojs].events.addListener(audio.element, 'timeupdate', function (e) {
|
||||
audio.updatePlayhead.apply(audio);
|
||||
});
|
||||
|
||||
container[audiojs].events.addListener(audio.element, 'ended', function (e) {
|
||||
audio.trackEnded.apply(audio);
|
||||
});
|
||||
|
||||
container[audiojs].events.addListener(audio.source, 'error', function (e) {
|
||||
// on error, cancel any load timers that are running.
|
||||
clearInterval(audio.readyTimer);
|
||||
clearInterval(audio.loadTimer);
|
||||
audio.settings.loadError.apply(audio);
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
// Flash requires a slightly different API to the `<audio>` element, so this method is used to overwrite the standard event handlers.
|
||||
attachFlashEvents: function (element, audio) {
|
||||
audio['swfReady'] = false;
|
||||
audio['load'] = function (mp3) {
|
||||
// If the swf isn't ready yet then just set `audio.mp3`. `init()` will load it in once the swf is ready.
|
||||
audio.mp3 = mp3;
|
||||
if (audio.swfReady) audio.element.load(mp3);
|
||||
}
|
||||
audio['loadProgress'] = function (percent, duration) {
|
||||
audio.loadedPercent = percent;
|
||||
audio.duration = duration;
|
||||
audio.settings.loadStarted.apply(audio);
|
||||
audio.settings.loadProgress.apply(audio, [percent]);
|
||||
}
|
||||
audio['skipTo'] = function (percent) {
|
||||
if (percent > audio.loadedPercent) return;
|
||||
audio.updatePlayhead.call(audio, [percent])
|
||||
audio.element.skipTo(percent);
|
||||
}
|
||||
audio['updatePlayhead'] = function (percent) {
|
||||
audio.settings.updatePlayhead.apply(audio, [percent]);
|
||||
}
|
||||
audio['play'] = function () {
|
||||
// If the audio hasn't started preloading, then start it now.
|
||||
// Then set `preload` to `true`, so that any tracks loaded in subsequently are loaded straight away.
|
||||
if (!audio.settings.preload) {
|
||||
audio.settings.preload = true;
|
||||
audio.element.init(audio.mp3);
|
||||
}
|
||||
audio.playing = true;
|
||||
// IE doesn't allow a method named `play()` to be exposed through `ExternalInterface`, so lets go with `pplay()`.
|
||||
// <http://dev.nuclearrooster.com/2008/07/27/externalinterfaceaddcallback-can-cause-ie-js-errors-with-certain-keyworkds/>
|
||||
audio.element.pplay();
|
||||
audio.settings.play.apply(audio);
|
||||
}
|
||||
audio['pause'] = function () {
|
||||
audio.playing = false;
|
||||
// Use `ppause()` for consistency with `pplay()`, even though it isn't really required.
|
||||
audio.element.ppause();
|
||||
audio.settings.pause.apply(audio);
|
||||
}
|
||||
audio['setVolume'] = function (v) {
|
||||
audio.element.setVolume(v);
|
||||
}
|
||||
audio['loadStarted'] = function () {
|
||||
// Load the mp3 specified by the audio element into the swf.
|
||||
audio.swfReady = true;
|
||||
if (audio.settings.preload) audio.element.init(audio.mp3);
|
||||
if (audio.settings.autoplay) audio.play.apply(audio);
|
||||
}
|
||||
},
|
||||
|
||||
// ### Injecting an swf from a string
|
||||
// Build up the swf source by replacing the `$keys` and then inject the markup into the page.
|
||||
injectFlash: function (audio, id) {
|
||||
var flashSource = this.flashSource.replace(/\$1/g, id);
|
||||
flashSource = flashSource.replace(/\$2/g, audio.settings.swfLocation);
|
||||
// `(+new Date)` ensures the swf is not pulled out of cache. The fixes an issue with Firefox running multiple players on the same page.
|
||||
flashSource = flashSource.replace(/\$3/g, (+new Date + Math.random()));
|
||||
// Inject the player markup using a more verbose `innerHTML` insertion technique that works with IE.
|
||||
var html = audio.wrapper.innerHTML,
|
||||
div = document.createElement('div');
|
||||
div.innerHTML = flashSource + html;
|
||||
audio.wrapper.innerHTML = div.innerHTML;
|
||||
audio.element = this.helpers.getSwf(id);
|
||||
},
|
||||
|
||||
// ## Helper functions
|
||||
helpers: {
|
||||
// **Merge two objects, with `obj2` overwriting `obj1`**
|
||||
// The merge is shallow, but that's all that is required for our purposes.
|
||||
merge: function (obj1, obj2) {
|
||||
for (attr in obj2) {
|
||||
if (obj1.hasOwnProperty(attr) || obj2.hasOwnProperty(attr)) {
|
||||
obj1[attr] = obj2[attr];
|
||||
}
|
||||
}
|
||||
},
|
||||
// **Clone a javascript object (recursively)**
|
||||
clone: function (obj) {
|
||||
if (obj == null || typeof (obj) !== 'object') return obj;
|
||||
var temp = new obj.constructor();
|
||||
for (var key in obj) temp[key] = arguments.callee(obj[key]);
|
||||
return temp;
|
||||
},
|
||||
// **Adding/removing classnames from elements**
|
||||
addClass: function (element, className) {
|
||||
var re = new RegExp('(\\s|^)' + className + '(\\s|$)');
|
||||
if (re.test(element.className)) return;
|
||||
element.className += ' ' + className;
|
||||
},
|
||||
removeClass: function (element, className) {
|
||||
var re = new RegExp('(\\s|^)' + className + '(\\s|$)');
|
||||
element.className = element.className.replace(re, ' ');
|
||||
},
|
||||
// **Dynamic CSS injection**
|
||||
// Takes a string of css, inserts it into a `<style>`, then injects it in at the very top of the `<head>`. This ensures any user-defined styles will take precedence.
|
||||
injectCss: function (audio, string) {
|
||||
|
||||
// If an `audiojs` `<style>` tag already exists, then append to it rather than creating a whole new `<style>`.
|
||||
var prepend = '',
|
||||
styles = document.getElementsByTagName('style'),
|
||||
css = string.replace(/\$1/g, audio.settings.imageLocation);
|
||||
|
||||
for (var i = 0, ii = styles.length; i < ii; i++) {
|
||||
var title = styles[i].getAttribute('title');
|
||||
if (title && ~title.indexOf('audiojs')) {
|
||||
style = styles[i];
|
||||
if (style.innerHTML === css) return;
|
||||
prepend = style.innerHTML;
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
var head = document.getElementsByTagName('head')[0],
|
||||
firstchild = head.firstChild,
|
||||
style = document.createElement('style');
|
||||
|
||||
if (!head) return;
|
||||
|
||||
style.setAttribute('type', 'text/css');
|
||||
style.setAttribute('title', 'audiojs');
|
||||
|
||||
if (style.styleSheet) style.styleSheet.cssText = prepend + css;
|
||||
else style.appendChild(document.createTextNode(prepend + css));
|
||||
|
||||
if (firstchild) head.insertBefore(style, firstchild);
|
||||
else head.appendChild(styleElement);
|
||||
},
|
||||
// **Handle all the IE6+7 requirements for cloning `<audio>` nodes**
|
||||
// Create a html5-safe document fragment by injecting an `<audio>` element into the document fragment.
|
||||
cloneHtml5Node: function (audioTag) {
|
||||
var fragment = document.createDocumentFragment();
|
||||
fragment.createElement('audio');
|
||||
var div = fragment.createElement('div');
|
||||
fragment.appendChild(div);
|
||||
div.innerHTML = audioTag.outerHTML;
|
||||
return div.firstChild;
|
||||
},
|
||||
// **Cross-browser `<object>` / `<embed>` element selection**
|
||||
getSwf: function (name) {
|
||||
var swf = document[name] || window[name];
|
||||
return swf.length > 1 ? swf[swf.length - 1] : swf;
|
||||
}
|
||||
},
|
||||
// ## Event-handling
|
||||
events: {
|
||||
memoryLeaking: false,
|
||||
listeners: [],
|
||||
// **A simple cross-browser event handler abstraction**
|
||||
addListener: function (element, eventName, func) {
|
||||
// For modern browsers use the standard DOM-compliant `addEventListener`.
|
||||
if (element.addEventListener) {
|
||||
element.addEventListener(eventName, func, false);
|
||||
// For older versions of Internet Explorer, use `attachEvent`.
|
||||
// Also provide a fix for scoping `this` to the calling element and register each listener so the containing elements can be purged on page unload.
|
||||
} else if (element.attachEvent) {
|
||||
this.listeners.push(element);
|
||||
if (!this.memoryLeaking) {
|
||||
window.attachEvent('onunload', function () {
|
||||
if (this.listeners) {
|
||||
for (var i = 0, ii = this.listeners.length; i < ii; i++) {
|
||||
container[audiojs].events.purge(this.listeners[i]);
|
||||
}
|
||||
}
|
||||
});
|
||||
this.memoryLeaking = true;
|
||||
}
|
||||
element.attachEvent('on' + eventName, function () {
|
||||
func.call(element, window.event);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
trackLoadProgress: function (audio) {
|
||||
// If `preload` has been set to `none`, then we don't want to start loading the track yet.
|
||||
if (!audio.settings.preload) return;
|
||||
|
||||
var readyTimer,
|
||||
loadTimer,
|
||||
audio = audio,
|
||||
ios = (/(ipod|iphone|ipad)/i).test(navigator.userAgent);
|
||||
|
||||
// Use timers here rather than the official `progress` event, as Chrome has issues calling `progress` when loading mp3 files from cache.
|
||||
readyTimer = setInterval(function () {
|
||||
if (audio.element.readyState > -1) {
|
||||
// iOS doesn't start preloading the mp3 until the user interacts manually, so this stops the loader being displayed prematurely.
|
||||
if (!ios) audio.init.apply(audio);
|
||||
}
|
||||
if (audio.element.readyState > 1) {
|
||||
if (audio.settings.autoplay) audio.play.apply(audio);
|
||||
clearInterval(readyTimer);
|
||||
// Once we have data, start tracking the load progress.
|
||||
loadTimer = setInterval(function () {
|
||||
audio.loadProgress.apply(audio);
|
||||
if (audio.loadedPercent >= 1) clearInterval(loadTimer);
|
||||
});
|
||||
}
|
||||
}, 10);
|
||||
audio.readyTimer = readyTimer;
|
||||
audio.loadTimer = loadTimer;
|
||||
},
|
||||
|
||||
// **Douglas Crockford's IE6 memory leak fix**
|
||||
// <http://javascript.crockford.com/memory/leak.html>
|
||||
// This is used to release the memory leak created by the circular references created when fixing `this` scoping for IE. It is called on page unload.
|
||||
purge: function (d) {
|
||||
var a = d.attributes, i;
|
||||
if (a) {
|
||||
for (i = 0; i < a.length; i += 1) {
|
||||
if (typeof d[a[i].name] === 'function') d[a[i].name] = null;
|
||||
}
|
||||
}
|
||||
a = d.childNodes;
|
||||
if (a) {
|
||||
for (i = 0; i < a.length; i += 1) purge(d.childNodes[i]);
|
||||
}
|
||||
},
|
||||
|
||||
// **DOMready function**
|
||||
// As seen here: <https://github.com/dperini/ContentLoaded/>.
|
||||
ready: (function () {
|
||||
return function (fn) {
|
||||
var win = window, done = false, top = true,
|
||||
doc = win.document, root = doc.documentElement,
|
||||
add = doc.addEventListener ? 'addEventListener' : 'attachEvent',
|
||||
rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent',
|
||||
pre = doc.addEventListener ? '' : 'on',
|
||||
init = function (e) {
|
||||
if (e.type == 'readystatechange' && doc.readyState != 'complete') return;
|
||||
(e.type == 'load' ? win : doc)[rem](pre + e.type, init, false);
|
||||
if (!done && (done = true)) fn.call(win, e.type || e);
|
||||
},
|
||||
poll = function () {
|
||||
try { root.doScroll('left'); } catch (e) { setTimeout(poll, 50); return; }
|
||||
init('poll');
|
||||
};
|
||||
if (doc.readyState == 'complete') fn.call(win, 'lazy');
|
||||
else {
|
||||
if (doc.createEventObject && root.doScroll) {
|
||||
try { top = !win.frameElement; } catch (e) { }
|
||||
if (top) poll();
|
||||
}
|
||||
doc[add](pre + 'DOMContentLoaded', init, false);
|
||||
doc[add](pre + 'readystatechange', init, false);
|
||||
win[add](pre + 'load', init, false);
|
||||
}
|
||||
}
|
||||
})()
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// ## The audiojs class
|
||||
// We create one of these per `<audio>` and then push them into `audiojs['instances']`.
|
||||
container[audiojsInstance] = function (element, settings) {
|
||||
// Each audio instance returns an object which contains an API back into the `<audio>` element.
|
||||
this.element = element;
|
||||
this.wrapper = element.parentNode;
|
||||
this.source = element.getElementsByTagName('source')[0] || element;
|
||||
// First check the `<audio>` element directly for a src and if one is not found, look for a `<source>` element.
|
||||
this.mp3 = (function (element) {
|
||||
var source = element.getElementsByTagName('source')[0];
|
||||
return element.getAttribute('src') || (source ? source.getAttribute('src') : null);
|
||||
})(element);
|
||||
this.settings = settings;
|
||||
this.loadStartedCalled = false;
|
||||
this.loadedPercent = 0;
|
||||
this.duration = 1;
|
||||
this.playing = false;
|
||||
}
|
||||
|
||||
container[audiojsInstance].prototype = {
|
||||
// API access events:
|
||||
// Each of these do what they need do and then call the matching methods defined in the settings object.
|
||||
updatePlayhead: function () {
|
||||
var percent = this.element.currentTime / this.duration;
|
||||
this.settings.updatePlayhead.apply(this, [percent]);
|
||||
},
|
||||
skipTo: function (percent) {
|
||||
if (percent > this.loadedPercent) return;
|
||||
this.element.currentTime = this.duration * percent;
|
||||
this.updatePlayhead();
|
||||
},
|
||||
load: function (mp3) {
|
||||
this.loadStartedCalled = false;
|
||||
this.source.setAttribute('src', mp3);
|
||||
// The now outdated `load()` method is required for Safari 4
|
||||
this.element.load();
|
||||
this.mp3 = mp3;
|
||||
container[audiojs].events.trackLoadProgress(this);
|
||||
},
|
||||
loadError: function () {
|
||||
this.settings.loadError.apply(this);
|
||||
},
|
||||
init: function () {
|
||||
this.settings.init.apply(this);
|
||||
},
|
||||
loadStarted: function () {
|
||||
// Wait until `element.duration` exists before setting up the audio player.
|
||||
if (!this.element.duration) return false;
|
||||
|
||||
this.duration = this.element.duration;
|
||||
this.updatePlayhead();
|
||||
this.settings.loadStarted.apply(this);
|
||||
},
|
||||
loadProgress: function () {
|
||||
if (this.element.buffered != null && this.element.buffered.length) {
|
||||
// Ensure `loadStarted()` is only called once.
|
||||
if (!this.loadStartedCalled) {
|
||||
this.loadStartedCalled = this.loadStarted();
|
||||
}
|
||||
var durationLoaded = this.element.buffered.end(this.element.buffered.length - 1);
|
||||
this.loadedPercent = durationLoaded / this.duration;
|
||||
|
||||
this.settings.loadProgress.apply(this, [this.loadedPercent]);
|
||||
}
|
||||
},
|
||||
playPause: function () {
|
||||
if (this.playing) this.pause();
|
||||
else this.play();
|
||||
},
|
||||
play: function () {
|
||||
var ios = (/(ipod|iphone|ipad)/i).test(navigator.userAgent);
|
||||
// On iOS this interaction will trigger loading the mp3, so run `init()`.
|
||||
if (ios && this.element.readyState == 0) this.init.apply(this);
|
||||
// If the audio hasn't started preloading, then start it now.
|
||||
// Then set `preload` to `true`, so that any tracks loaded in subsequently are loaded straight away.
|
||||
if (!this.settings.preload) {
|
||||
this.settings.preload = true;
|
||||
this.element.setAttribute('preload', 'auto');
|
||||
container[audiojs].events.trackLoadProgress(this);
|
||||
}
|
||||
this.playing = true;
|
||||
this.element.play();
|
||||
this.settings.play.apply(this);
|
||||
},
|
||||
pause: function () {
|
||||
this.playing = false;
|
||||
this.element.pause();
|
||||
this.settings.pause.apply(this);
|
||||
},
|
||||
setVolume: function (v) {
|
||||
this.element.volume = v;
|
||||
},
|
||||
trackEnded: function (e) {
|
||||
this.skipTo.apply(this, [0]);
|
||||
if (!this.settings.loop) this.pause.apply(this);
|
||||
this.settings.trackEnded.apply(this);
|
||||
}
|
||||
}
|
||||
|
||||
// **getElementsByClassName**
|
||||
// Having to rely on `getElementsByTagName` is pretty inflexible internally, so a modified version of Dustin Diaz's `getElementsByClassName` has been included.
|
||||
// This version cleans things up and prefers the native DOM method if it's available.
|
||||
var getByClass = function (searchClass, node, tag) {
|
||||
var matches = [];
|
||||
if (document.getElementsByClassName) {
|
||||
matches = node.getElementsByClassName(searchClass);
|
||||
} else {
|
||||
var node = node || document,
|
||||
tag = tag || '*',
|
||||
els = node.getElementsByTagName(tag),
|
||||
pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");
|
||||
|
||||
for (i = 0, j = 0, l = els.length; i < l; i++) {
|
||||
if (pattern.test(els[i].className)) {
|
||||
matches[j] = els[i];
|
||||
j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return matches.length > 1 ? matches : matches[0];
|
||||
}
|
||||
// The global variable names are passed in here and can be changed if they conflict with anything else.
|
||||
})('audiojs', 'audiojsInstance', this);
|
24
js/audiojs/audio.min.js
vendored
24
js/audiojs/audio.min.js
vendored
|
@ -1,24 +0,0 @@
|
|||
(function(g,r,f){var s=function(){for(var b=/audio(.min)?.js.*/,a=document.getElementsByTagName("script"),c=0,d=a.length;c<d;c++){var e=a[c].getAttribute("src");if(b.test(e))return e.replace(b,"")}}();f[g]={instanceCount:0,instances:{},flashSource:' <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="$1" width="1" height="1" name="$1" style="position: absolute; left: -1px;"> <param name="movie" value="$2?playerInstance='+g+'.instances[\'$1\']&datetime=$3"> <param name="allowscriptaccess" value="always"> <embed name="$1" src="$2?playerInstance='+
|
||||
g+'.instances[\'$1\']&datetime=$3" width="1" height="1" allowscriptaccess="always"> </object>',settings:{autoplay:false,loop:false,preload:true,imageLocation:s+"player-graphics.gif",swfLocation:s+"audiojs.swf",useFlash:function(){var b=document.createElement("audio");return!(b.canPlayType&&b.canPlayType("audio/mpeg;").replace(/no/,""))}(),hasFlash:function(){if(navigator.plugins&&navigator.plugins.length&&navigator.plugins["Shockwave Flash"])return true;else if(navigator.mimeTypes&&navigator.mimeTypes.length){var b=
|
||||
navigator.mimeTypes["application/x-shockwave-flash"];return b&&b.enabledPlugin}else try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash");return true}catch(a){}return false}(),createPlayer:{markup:' <div class="play-pause"> <p class="play"></p> <p class="pause"></p> <p class="loading"></p> <p class="error"></p> </div> <div class="scrubber"> <div class="progress"></div> <div class="loaded"></div> </div> <div class="time"> <em class="played">00:00</em>/<strong class="duration">00:00</strong> </div> <div class="error-message"></div>',
|
||||
playPauseClass:"play-pause",scrubberClass:"scrubber",progressClass:"progress",loaderClass:"loaded",timeClass:"time",durationClass:"duration",playedClass:"played",errorMessageClass:"error-message",playingClass:"playing",loadingClass:"loading",errorClass:"error"},css:' .audiojs audio { position: absolute; left: -1px; } .audiojs { width: 460px; height: 36px; background: #404040; overflow: hidden; font-family: monospace; font-size: 12px; background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #444), color-stop(0.5, #555), color-stop(0.51, #444), color-stop(1, #444)); background-image: -moz-linear-gradient(center top, #444 0%, #555 50%, #444 51%, #444 100%); -webkit-box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.3); -moz-box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.3); -o-box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.3); box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.3); } .audiojs .play-pause { width: 25px; height: 40px; padding: 4px 6px; margin: 0px; float: left; overflow: hidden; border-right: 1px solid #000; } .audiojs p { display: none; width: 25px; height: 40px; margin: 0px; cursor: pointer; } .audiojs .play { display: block; } .audiojs .scrubber { position: relative; float: left; width: 280px; background: #5a5a5a; height: 14px; margin: 10px; border-top: 1px solid #3f3f3f; border-left: 0px; border-bottom: 0px; overflow: hidden; } .audiojs .progress { position: absolute; top: 0px; left: 0px; height: 14px; width: 0px; background: #ccc; z-index: 1; background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #ccc), color-stop(0.5, #ddd), color-stop(0.51, #ccc), color-stop(1, #ccc)); background-image: -moz-linear-gradient(center top, #ccc 0%, #ddd 50%, #ccc 51%, #ccc 100%); } .audiojs .loaded { position: absolute; top: 0px; left: 0px; height: 14px; width: 0px; background: #000; background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #222), color-stop(0.5, #333), color-stop(0.51, #222), color-stop(1, #222)); background-image: -moz-linear-gradient(center top, #222 0%, #333 50%, #222 51%, #222 100%); } .audiojs .time { float: left; height: 36px; line-height: 36px; margin: 0px 0px 0px 6px; padding: 0px 6px 0px 12px; border-left: 1px solid #000; color: #ddd; text-shadow: 1px 1px 0px rgba(0, 0, 0, 0.5); } .audiojs .time em { padding: 0px 2px 0px 0px; color: #f9f9f9; font-style: normal; } .audiojs .time strong { padding: 0px 0px 0px 2px; font-weight: normal; } .audiojs .error-message { float: left; display: none; margin: 0px 10px; height: 36px; width: 400px; overflow: hidden; line-height: 36px; white-space: nowrap; color: #fff; text-overflow: ellipsis; -o-text-overflow: ellipsis; -icab-text-overflow: ellipsis; -khtml-text-overflow: ellipsis; -moz-text-overflow: ellipsis; -webkit-text-overflow: ellipsis; } .audiojs .error-message a { color: #eee; text-decoration: none; padding-bottom: 1px; border-bottom: 1px solid #999; white-space: wrap; } .audiojs .play { background: url("$1") -2px -1px no-repeat; } .audiojs .loading { background: url("$1") -2px -31px no-repeat; } .audiojs .error { background: url("$1") -2px -61px no-repeat; } .audiojs .pause { background: url("$1") -2px -91px no-repeat; } .playing .play, .playing .loading, .playing .error { display: none; } .playing .pause { display: block; } .loading .play, .loading .pause, .loading .error { display: none; } .loading .loading { display: block; } .error .time, .error .play, .error .pause, .error .scrubber, .error .loading { display: none; } .error .error { display: block; } .error .play-pause p { cursor: auto; } .error .error-message { display: block; }',
|
||||
trackEnded:function(){},flashError:function(){var b=this.settings.createPlayer,a=m(b.errorMessageClass,this.wrapper),c='Missing <a href="http://get.adobe.com/flashplayer/">flash player</a> plugin.';if(this.mp3)c+=' <a href="'+this.mp3+'">Download audio file</a>.';f[g].helpers.removeClass(this.wrapper,b.loadingClass);f[g].helpers.addClass(this.wrapper,b.errorClass);a.innerHTML=c},loadError:function(){var b=this.settings.createPlayer,a=m(b.errorMessageClass,this.wrapper);f[g].helpers.removeClass(this.wrapper,
|
||||
b.loadingClass);f[g].helpers.addClass(this.wrapper,b.errorClass);a.innerHTML='Error loading: "'+this.mp3+'"'},init:function(){f[g].helpers.addClass(this.wrapper,this.settings.createPlayer.loadingClass)},loadStarted:function(){var b=this.settings.createPlayer,a=m(b.durationClass,this.wrapper),c=Math.floor(this.duration/60),d=Math.floor(this.duration%60);f[g].helpers.removeClass(this.wrapper,b.loadingClass);a.innerHTML=(c<10?"0":"")+c+":"+(d<10?"0":"")+d},loadProgress:function(b){var a=this.settings.createPlayer,
|
||||
c=m(a.scrubberClass,this.wrapper);m(a.loaderClass,this.wrapper).style.width=c.offsetWidth*b+"px"},playPause:function(){this.playing?this.settings.play():this.settings.pause()},play:function(){f[g].helpers.addClass(this.wrapper,this.settings.createPlayer.playingClass)},pause:function(){f[g].helpers.removeClass(this.wrapper,this.settings.createPlayer.playingClass)},updatePlayhead:function(b){var a=this.settings.createPlayer,c=m(a.scrubberClass,this.wrapper);m(a.progressClass,this.wrapper).style.width=
|
||||
c.offsetWidth*b+"px";a=m(a.playedClass,this.wrapper);c=this.duration*b;b=Math.floor(c/60);c=Math.floor(c%60);a.innerHTML=(b<10?"0":"")+b+":"+(c<10?"0":"")+c}},create:function(b,a){a=a||{};return b.length?this.createAll(a,b):this.newInstance(b,a)},createAll:function(b,a){var c=a||document.getElementsByTagName("audio"),d=[];b=b||{};for(var e=0,k=c.length;e<k;e++)d.push(this.newInstance(c[e],b));return d},newInstance:function(b,a){var c=this.helpers.clone(this.settings),d="audiojs"+this.instanceCount,
|
||||
e="audiojs_wrapper"+this.instanceCount;this.instanceCount++;if(b.getAttribute("autoplay")!=null)c.autoplay=true;if(b.getAttribute("loop")!=null)c.loop=true;if(b.getAttribute("preload")=="none")c.preload=false;a&&this.helpers.merge(c,a);if(c.createPlayer.markup)b=this.createPlayer(b,c.createPlayer,e);else b.parentNode.setAttribute("id",e);e=new f[r](b,c);c.css&&this.helpers.injectCss(e,c.css);if(c.useFlash&&c.hasFlash){this.injectFlash(e,d);this.attachFlashEvents(e.wrapper,e)}else c.useFlash&&!c.hasFlash&&
|
||||
this.settings.flashError.apply(e);if(!c.useFlash||c.useFlash&&c.hasFlash)this.attachEvents(e.wrapper,e);return this.instances[d]=e},createPlayer:function(b,a,c){var d=document.createElement("div"),e=b.cloneNode(true);d.setAttribute("class","audiojs");d.setAttribute("className","audiojs");d.setAttribute("id",c);if(e.outerHTML&&~e.outerHTML.indexOf("<:audio")){e=this.helpers.cloneHtml5Node(b);d.innerHTML=a.markup;d.appendChild(e);b.outerHTML=d.outerHTML;d=document.getElementById(c)}else{d.appendChild(e);
|
||||
d.innerHTML+=a.markup;b.parentNode.replaceChild(d,b)}return d.getElementsByTagName("audio")[0]},attachEvents:function(b,a){if(a.settings.createPlayer){var c=a.settings.createPlayer,d=m(c.playPauseClass,b),e=m(c.scrubberClass,b);f[g].events.addListener(d,"click",function(){a.playPause.apply(a)});f[g].events.addListener(e,"click",function(k){k=k.clientX;var h=this,n=0;if(h.offsetParent){do n+=h.offsetLeft;while(h=h.offsetParent)}a.skipTo((k-n)/e.offsetWidth)});if(!a.settings.useFlash){f[g].events.trackLoadProgress(a);
|
||||
f[g].events.addListener(a.element,"timeupdate",function(){a.updatePlayhead.apply(a)});f[g].events.addListener(a.element,"ended",function(){a.trackEnded.apply(a)});f[g].events.addListener(a.source,"error",function(){clearInterval(a.readyTimer);clearInterval(a.loadTimer);a.settings.loadError.apply(a)})}}},attachFlashEvents:function(b,a){a.swfReady=false;a.load=function(c){a.mp3=c;a.swfReady&&a.element.load(c)};a.loadProgress=function(c,d){a.loadedPercent=c;a.duration=d;a.settings.loadStarted.apply(a);
|
||||
a.settings.loadProgress.apply(a,[c])};a.skipTo=function(c){if(!(c>a.loadedPercent)){a.updatePlayhead.call(a,[c]);a.element.skipTo(c)}};a.updatePlayhead=function(c){a.settings.updatePlayhead.apply(a,[c])};a.play=function(){if(!a.settings.preload){a.settings.preload=true;a.element.init(a.mp3)}a.playing=true;a.element.pplay();a.settings.play.apply(a)};a.pause=function(){a.playing=false;a.element.ppause();a.settings.pause.apply(a)};a.loadStarted=function(){a.swfReady=true;a.settings.preload&&a.element.init(a.mp3);
|
||||
a.settings.autoplay&&a.play.apply(a)}},injectFlash:function(b,a){var c=this.flashSource.replace(/\$1/g,a);c=c.replace(/\$2/g,b.settings.swfLocation);c=c.replace(/\$3/g,+new Date+Math.random());var d=b.wrapper.innerHTML,e=document.createElement("div");e.innerHTML=c+d;b.wrapper.innerHTML=e.innerHTML;b.element=this.helpers.getSwf(a)},helpers:{merge:function(b,a){for(attr in a)if(b.hasOwnProperty(attr)||a.hasOwnProperty(attr))b[attr]=a[attr]},clone:function(b){if(b==null||typeof b!=="object")return b;
|
||||
var a=new b.constructor,c;for(c in b)a[c]=arguments.callee(b[c]);return a},addClass:function(b,a){RegExp("(\\s|^)"+a+"(\\s|$)").test(b.className)||(b.className+=" "+a)},removeClass:function(b,a){b.className=b.className.replace(RegExp("(\\s|^)"+a+"(\\s|$)")," ")},injectCss:function(b,a){for(var c="",d=document.getElementsByTagName("style"),e=a.replace(/\$1/g,b.settings.imageLocation),k=0,h=d.length;k<h;k++){var n=d[k].getAttribute("title");if(n&&~n.indexOf("audiojs")){h=d[k];if(h.innerHTML===e)return;
|
||||
c=h.innerHTML;break}}d=document.getElementsByTagName("head")[0];k=d.firstChild;h=document.createElement("style");if(d){h.setAttribute("type","text/css");h.setAttribute("title","audiojs");if(h.styleSheet)h.styleSheet.cssText=c+e;else h.appendChild(document.createTextNode(c+e));k?d.insertBefore(h,k):d.appendChild(styleElement)}},cloneHtml5Node:function(b){var a=document.createDocumentFragment();a.createElement("audio");var c=a.createElement("div");a.appendChild(c);c.innerHTML=b.outerHTML;return c.firstChild},
|
||||
getSwf:function(b){b=document[b]||window[b];return b.length>1?b[b.length-1]:b}},events:{memoryLeaking:false,listeners:[],addListener:function(b,a,c){if(b.addEventListener)b.addEventListener(a,c,false);else if(b.attachEvent){this.listeners.push(b);if(!this.memoryLeaking){window.attachEvent("onunload",function(){for(var d=0,e=this.listeners.length;d<e;d++)f[g].events.purge(this.listeners[d])});this.memoryLeaking=true}b.attachEvent("on"+a,function(){c.call(b,window.event)})}},trackLoadProgress:function(b){if(b.settings.preload){var a,
|
||||
c;b=b;var d=/(ipod|iphone|ipad)/i.test(navigator.userAgent);a=setInterval(function(){if(b.element.readyState>-1)d||b.init.apply(b);if(b.element.readyState>1){b.settings.autoplay&&b.play.apply(b);clearInterval(a);c=setInterval(function(){b.loadProgress.apply(b);b.loadedPercent>=1&&clearInterval(c)})}},10);b.readyTimer=a;b.loadTimer=c}},purge:function(b){var a=b.attributes,c;if(a)for(c=0;c<a.length;c+=1)if(typeof b[a[c].name]==="function")b[a[c].name]=null;if(a=b.childNodes)for(c=0;c<a.length;c+=1)purge(b.childNodes[c])},
|
||||
ready:function(){return function(b){var a=window,c=false,d=true,e=a.document,k=e.documentElement,h=e.addEventListener?"addEventListener":"attachEvent",n=e.addEventListener?"removeEventListener":"detachEvent",q=e.addEventListener?"":"on",p=function(o){if(!(o.type=="readystatechange"&&e.readyState!="complete")){(o.type=="load"?a:e)[n](q+o.type,p,false);if(!c&&(c=true))b.call(a,o.type||o)}},t=function(){try{k.doScroll("left")}catch(o){setTimeout(t,50);return}p("poll")};if(e.readyState=="complete")b.call(a,
|
||||
"lazy");else{if(e.createEventObject&&k.doScroll){try{d=!a.frameElement}catch(u){}d&&t()}e[h](q+"DOMContentLoaded",p,false);e[h](q+"readystatechange",p,false);a[h](q+"load",p,false)}}}()}};f[r]=function(b,a){this.element=b;this.wrapper=b.parentNode;this.source=b.getElementsByTagName("source")[0]||b;this.mp3=function(c){var d=c.getElementsByTagName("source")[0];return c.getAttribute("src")||(d?d.getAttribute("src"):null)}(b);this.settings=a;this.loadStartedCalled=false;this.loadedPercent=0;this.duration=
|
||||
1;this.playing=false};f[r].prototype={updatePlayhead:function(){this.settings.updatePlayhead.apply(this,[this.element.currentTime/this.duration])},skipTo:function(b){if(!(b>this.loadedPercent)){this.element.currentTime=this.duration*b;this.updatePlayhead()}},load:function(b){this.loadStartedCalled=false;this.source.setAttribute("src",b);this.element.load();this.mp3=b;f[g].events.trackLoadProgress(this)},loadError:function(){this.settings.loadError.apply(this)},init:function(){this.settings.init.apply(this)},
|
||||
loadStarted:function(){if(!this.element.duration)return false;this.duration=this.element.duration;this.updatePlayhead();this.settings.loadStarted.apply(this)},loadProgress:function(){if(this.element.buffered!=null&&this.element.buffered.length){if(!this.loadStartedCalled)this.loadStartedCalled=this.loadStarted();this.loadedPercent=this.element.buffered.end(this.element.buffered.length-1)/this.duration;this.settings.loadProgress.apply(this,[this.loadedPercent])}},playPause:function(){this.playing?
|
||||
this.pause():this.play()},play:function(){/(ipod|iphone|ipad)/i.test(navigator.userAgent)&&this.element.readyState==0&&this.init.apply(this);if(!this.settings.preload){this.settings.preload=true;this.element.setAttribute("preload","auto");f[g].events.trackLoadProgress(this)}this.playing=true;this.element.play();this.settings.play.apply(this)},pause:function(){this.playing=false;this.element.pause();this.settings.pause.apply(this)},trackEnded:function(){this.skipTo.apply(this,[0]);this.settings.loop||
|
||||
this.pause.apply(this);this.settings.trackEnded.apply(this)}};var m=function(b,a,c){var d=[];if(document.getElementsByClassName)d=a.getElementsByClassName(b);else{a=a||document;c=c||"*";a=a.getElementsByTagName(c);b=RegExp("(^|\\s)"+b+"(\\s|$)");j=i=0;for(l=a.length;i<l;i++)if(b.test(a[i].className)){d[j]=a[i];j++}}return d.length>1?d:d[0]}})("audiojs","audiojsInstance",this);
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 4.4 KiB |
4
js/jquery-1.7.2.min.js
vendored
Normal file
4
js/jquery-1.7.2.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
105
js/sm/soundmanager2-jsmin.js
Normal file
105
js/sm/soundmanager2-jsmin.js
Normal file
|
@ -0,0 +1,105 @@
|
|||
/** @license
|
||||
|
||||
|
||||
SoundManager 2: JavaScript Sound for the Web
|
||||
----------------------------------------------
|
||||
http://schillmania.com/projects/soundmanager2/
|
||||
|
||||
Copyright (c) 2007, Scott Schiller. All rights reserved.
|
||||
Code provided under the BSD License:
|
||||
http://schillmania.com/projects/soundmanager2/license.txt
|
||||
|
||||
V2.97a.20120318
|
||||
*/
|
||||
(function(F){function W(W,la){function n(a){return function(d){var e=this._t;return!e||!e._a?(e&&e.sID?c._wD(m+"ignoring "+d.type+": "+e.sID):c._wD(m+"ignoring "+d.type),null):a.call(this,d)}}this.flashVersion=8;this.debugMode=!0;this.debugFlash=!1;this.consoleOnly=this.useConsole=!0;this.waitForWindowLoad=!1;this.bgColor="#ffffff";this.useHighPerformance=!1;this.html5PollingInterval=this.flashPollingInterval=null;this.flashLoadTimeout=1E3;this.wmode=null;this.allowScriptAccess="always";this.useFlashBlock=
|
||||
!1;this.useHTML5Audio=!0;this.html5Test=/^(probably|maybe)$/i;this.preferFlash=!0;this.noSWFCache=!1;this.audioFormats={mp3:{type:['audio/mpeg; codecs="mp3"',"audio/mpeg","audio/mp3","audio/MPA","audio/mpa-robust"],required:!0},mp4:{related:["aac","m4a"],type:['audio/mp4; codecs="mp4a.40.2"',"audio/aac","audio/x-m4a","audio/MP4A-LATM","audio/mpeg4-generic"],required:!1},ogg:{type:["audio/ogg; codecs=vorbis"],required:!1},wav:{type:['audio/wav; codecs="1"',"audio/wav","audio/wave","audio/x-wav"],required:!1}};
|
||||
this.defaultOptions={autoLoad:!1,autoPlay:!1,from:null,loops:1,onid3:null,onload:null,whileloading:null,onplay:null,onpause:null,onresume:null,whileplaying:null,onposition:null,onstop:null,onfailure:null,onfinish:null,multiShot:!0,multiShotEvents:!1,position:null,pan:0,stream:!0,to:null,type:null,usePolicyFile:!1,volume:100};this.flash9Options={isMovieStar:null,usePeakData:!1,useWaveformData:!1,useEQData:!1,onbufferchange:null,ondataerror:null};this.movieStarOptions={bufferTime:3,serverURL:null,onconnect:null,
|
||||
duration:null};this.movieID="sm2-container";this.id=la||"sm2movie";this.debugID="soundmanager-debug";this.debugURLParam=/([#?&])debug=1/i;this.versionNumber="V2.97a.20120318";this.movieURL=this.version=null;this.url=W||null;this.altURL=null;this.enabled=this.swfLoaded=!1;this.oMC=null;this.sounds={};this.soundIDs=[];this.didFlashBlock=this.muted=!1;this.filePattern=null;this.filePatterns={flash8:/\.mp3(\?.*)?$/i,flash9:/\.mp3(\?.*)?$/i};this.features={buffering:!1,peakData:!1,waveformData:!1,eqData:!1,
|
||||
movieStar:!1};this.sandbox={type:null,types:{remote:"remote (domain-based) rules",localWithFile:"local with file access (no internet access)",localWithNetwork:"local with network (internet access only, no local access)",localTrusted:"local, trusted (local+internet access)"},description:null,noRemote:null,noLocal:null};var ma;try{ma="undefined"!==typeof Audio&&"undefined"!==typeof(new Audio).canPlayType}catch(fb){ma=!1}this.hasHTML5=ma;this.html5={usingFlash:null};this.flash={};this.ignoreFlash=this.html5Only=
|
||||
!1;var Ea,c=this,g=null,m="HTML5::",r,t=navigator.userAgent,i=F,O=i.location.href.toString(),k=document,na,X,j,A=[],oa=!0,w,P=!1,Q=!1,p=!1,x=!1,Y=!1,o,Za=0,R,v,pa,G,H,Z,Fa,qa,D,$,aa,I,ra,sa,ba,ca,J,Ga,ta,$a=["log","info","warn","error"],Ha,da,Ia,S=null,ua=null,q,va,K,Ja,ea,fa,wa,s,ga=!1,xa=!1,Ka,La,Ma,ha=0,T=null,ia,y=null,Na,ja,U,B,ya,za,Oa,l,Pa=Array.prototype.slice,E=!1,u,ka,Qa,z,Ra,Aa=t.match(/(ipad|iphone|ipod)/i),ab=t.match(/firefox/i),bb=t.match(/droid/i),C=t.match(/msie/i),cb=t.match(/webkit/i),
|
||||
V=t.match(/safari/i)&&!t.match(/chrome/i),db=t.match(/opera/i),Ba=t.match(/(mobile|pre\/|xoom)/i)||Aa,Ca=!O.match(/usehtml5audio/i)&&!O.match(/sm2\-ignorebadua/i)&&V&&!t.match(/silk/i)&&t.match(/OS X 10_6_([3-7])/i),Sa="undefined"!==typeof console&&"undefined"!==typeof console.log,Da="undefined"!==typeof k.hasFocus?k.hasFocus():null,L=V&&"undefined"===typeof k.hasFocus,Ta=!L,Ua=/(mp3|mp4|mpa)/i,M=k.location?k.location.protocol.match(/http/i):null,Va=!M?"http://":"",Wa=/^\s*audio\/(?:x-)?(?:mpeg4|aac|flv|mov|mp4||m4v|m4a|mp4v|3gp|3g2)\s*(?:$|;)/i,
|
||||
Xa="mpeg4,aac,flv,mov,mp4,m4v,f4v,m4a,mp4v,3gp,3g2".split(","),eb=RegExp("\\.("+Xa.join("|")+")(\\?.*)?$","i");this.mimePattern=/^\s*audio\/(?:x-)?(?:mp(?:eg|3))\s*(?:$|;)/i;this.useAltURL=!M;this._global_a=null;if(Ba&&(c.useHTML5Audio=!0,c.preferFlash=!1,Aa))E=c.ignoreFlash=!0;this.supported=this.ok=function(){return y?p&&!x:c.useHTML5Audio&&c.hasHTML5};this.getMovie=function(c){return r(c)||k[c]||i[c]};this.createSound=function(a){function d(){b=ea(b);c.sounds[f.id]=new Ea(f);c.soundIDs.push(f.id);
|
||||
return c.sounds[f.id]}var e,b=null,f=e=null;e="soundManager.createSound(): "+q(!p?"notReady":"notOK");if(!p||!c.ok())return wa(e),!1;2===arguments.length&&(a={id:arguments[0],url:arguments[1]});b=v(a);b.url=ia(b.url);f=b;f.id.toString().charAt(0).match(/^[0-9]$/)&&c._wD("soundManager.createSound(): "+q("badID",f.id),2);c._wD("soundManager.createSound(): "+f.id+" ("+f.url+")",1);if(s(f.id,!0))return c._wD("soundManager.createSound(): "+f.id+" exists",1),c.sounds[f.id];if(ja(f))e=d(),c._wD("Loading sound "+
|
||||
f.id+" via HTML5"),e._setup_html5(f);else{if(8<j){if(null===f.isMovieStar)f.isMovieStar=f.serverURL||(f.type?f.type.match(Wa):!1)||f.url.match(eb);f.isMovieStar&&c._wD("soundManager.createSound(): using MovieStar handling");if(f.isMovieStar){if(f.usePeakData)o("noPeak"),f.usePeakData=!1;1<f.loops&&o("noNSLoop")}}f=fa(f,"soundManager.createSound(): ");e=d();if(8===j)g._createSound(f.id,f.loops||1,f.usePolicyFile);else if(g._createSound(f.id,f.url,f.usePeakData,f.useWaveformData,f.useEQData,f.isMovieStar,
|
||||
f.isMovieStar?f.bufferTime:!1,f.loops||1,f.serverURL,f.duration||null,f.autoPlay,!0,f.autoLoad,f.usePolicyFile),!f.serverURL)e.connected=!0,f.onconnect&&f.onconnect.apply(e);!f.serverURL&&(f.autoLoad||f.autoPlay)&&e.load(f)}!f.serverURL&&f.autoPlay&&e.play();return e};this.destroySound=function(a,d){if(!s(a))return!1;var e=c.sounds[a],b;e._iO={};e.stop();e.unload();for(b=0;b<c.soundIDs.length;b++)if(c.soundIDs[b]===a){c.soundIDs.splice(b,1);break}d||e.destruct(!0);delete c.sounds[a];return!0};this.load=
|
||||
function(a,d){return!s(a)?!1:c.sounds[a].load(d)};this.unload=function(a){return!s(a)?!1:c.sounds[a].unload()};this.onposition=this.onPosition=function(a,d,e,b){return!s(a)?!1:c.sounds[a].onposition(d,e,b)};this.clearOnPosition=function(a,d,e){return!s(a)?!1:c.sounds[a].clearOnPosition(d,e)};this.start=this.play=function(a,d){if(!p||!c.ok())return wa("soundManager.play(): "+q(!p?"notReady":"notOK")),!1;if(!s(a)){d instanceof Object||(d={url:d});return d&&d.url?(c._wD('soundManager.play(): attempting to create "'+
|
||||
a+'"',1),d.id=a,c.createSound(d).play()):!1}return c.sounds[a].play(d)};this.setPosition=function(a,d){return!s(a)?!1:c.sounds[a].setPosition(d)};this.stop=function(a){if(!s(a))return!1;c._wD("soundManager.stop("+a+")",1);return c.sounds[a].stop()};this.stopAll=function(){var a;c._wD("soundManager.stopAll()",1);for(a in c.sounds)c.sounds.hasOwnProperty(a)&&c.sounds[a].stop()};this.pause=function(a){return!s(a)?!1:c.sounds[a].pause()};this.pauseAll=function(){var a;for(a=c.soundIDs.length-1;0<=a;a--)c.sounds[c.soundIDs[a]].pause()};
|
||||
this.resume=function(a){return!s(a)?!1:c.sounds[a].resume()};this.resumeAll=function(){var a;for(a=c.soundIDs.length-1;0<=a;a--)c.sounds[c.soundIDs[a]].resume()};this.togglePause=function(a){return!s(a)?!1:c.sounds[a].togglePause()};this.setPan=function(a,d){return!s(a)?!1:c.sounds[a].setPan(d)};this.setVolume=function(a,d){return!s(a)?!1:c.sounds[a].setVolume(d)};this.mute=function(a){var d=0;"string"!==typeof a&&(a=null);if(a){if(!s(a))return!1;c._wD('soundManager.mute(): Muting "'+a+'"');return c.sounds[a].mute()}c._wD("soundManager.mute(): Muting all sounds");
|
||||
for(d=c.soundIDs.length-1;0<=d;d--)c.sounds[c.soundIDs[d]].mute();return c.muted=!0};this.muteAll=function(){c.mute()};this.unmute=function(a){"string"!==typeof a&&(a=null);if(a){if(!s(a))return!1;c._wD('soundManager.unmute(): Unmuting "'+a+'"');return c.sounds[a].unmute()}c._wD("soundManager.unmute(): Unmuting all sounds");for(a=c.soundIDs.length-1;0<=a;a--)c.sounds[c.soundIDs[a]].unmute();c.muted=!1;return!0};this.unmuteAll=function(){c.unmute()};this.toggleMute=function(a){return!s(a)?!1:c.sounds[a].toggleMute()};
|
||||
this.getMemoryUse=function(){var c=0;g&&8!==j&&(c=parseInt(g._getMemoryUse(),10));return c};this.disable=function(a){var d;"undefined"===typeof a&&(a=!1);if(x)return!1;x=!0;o("shutdown",1);for(d=c.soundIDs.length-1;0<=d;d--)Ha(c.sounds[c.soundIDs[d]]);R(a);l.remove(i,"load",H);return!0};this.canPlayMIME=function(a){var d;c.hasHTML5&&(d=U({type:a}));return!y||d?d:a&&c.ok()?!!(8<j&&a.match(Wa)||a.match(c.mimePattern)):null};this.canPlayURL=function(a){var d;c.hasHTML5&&(d=U({url:a}));return!y||d?d:
|
||||
a&&c.ok()?!!a.match(c.filePattern):null};this.canPlayLink=function(a){return"undefined"!==typeof a.type&&a.type&&c.canPlayMIME(a.type)?!0:c.canPlayURL(a.href)};this.getSoundById=function(a,d){if(!a)throw Error("soundManager.getSoundById(): sID is null/undefined");var e=c.sounds[a];!e&&!d&&c._wD('"'+a+'" is an invalid sound ID.',2);return e};this.onready=function(a,d){if(a&&a instanceof Function)return p&&c._wD(q("queue","onready")),d||(d=i),pa("onready",a,d),G(),!0;throw q("needFunction","onready");
|
||||
};this.ontimeout=function(a,d){if(a&&a instanceof Function)return p&&c._wD(q("queue","ontimeout")),d||(d=i),pa("ontimeout",a,d),G({type:"ontimeout"}),!0;throw q("needFunction","ontimeout");};this._wD=this._writeDebug=function(a,d,e){var b,f;if(!c.debugMode)return!1;"undefined"!==typeof e&&e&&(a=a+" | "+(new Date).getTime());if(Sa&&c.useConsole){e=$a[d];if("undefined"!==typeof console[e])console[e](a);else console.log(a);if(c.consoleOnly)return!0}try{b=r("soundmanager-debug");if(!b)return!1;f=k.createElement("div");
|
||||
if(0===++Za%2)f.className="sm2-alt";d="undefined"===typeof d?0:parseInt(d,10);f.appendChild(k.createTextNode(a));if(d){if(2<=d)f.style.fontWeight="bold";if(3===d)f.style.color="#ff3333"}b.insertBefore(f,b.firstChild)}catch(g){}return!0};this._debug=function(){var a,d;o("currentObj",1);for(a=0,d=c.soundIDs.length;a<d;a++)c.sounds[c.soundIDs[a]]._debug()};this.reboot=function(){c._wD("soundManager.reboot()");c.soundIDs.length&&c._wD("Destroying "+c.soundIDs.length+" SMSound objects...");var a,d;for(a=
|
||||
c.soundIDs.length-1;0<=a;a--)c.sounds[c.soundIDs[a]].destruct();try{if(C)ua=g.innerHTML;S=g.parentNode.removeChild(g);c._wD("Flash movie removed.")}catch(e){o("badRemove",2)}ua=S=y=null;c.enabled=sa=p=ga=xa=P=Q=x=c.swfLoaded=!1;c.soundIDs=[];c.sounds={};g=null;for(a in A)if(A.hasOwnProperty(a))for(d=A[a].length-1;0<=d;d--)A[a][d].fired=!1;c._wD("soundManager: Rebooting...");i.setTimeout(c.beginDelayedInit,20)};this.getMoviePercent=function(){return g&&"undefined"!==typeof g.PercentLoaded?g.PercentLoaded():
|
||||
null};this.beginDelayedInit=function(){Y=!0;I();setTimeout(function(){if(xa)return!1;ca();aa();return xa=!0},20);Z()};this.destruct=function(){c._wD("soundManager.destruct()");c.disable(!0)};Ea=function(a){var d,e,b=this,f,k,h,N,i,Ya,p=!1,l=[],n=0,t,u,r=null;d=null;e=null;this.sID=a.id;this.url=a.url;this._iO=this.instanceOptions=this.options=v(a);this.pan=this.options.pan;this.volume=this.options.volume;this.isHTML5=!1;this._a=null;this.id3={};this._debug=function(){if(c.debugMode){var a=null,d=
|
||||
[],f,e;for(a in b.options)null!==b.options[a]&&(b.options[a]instanceof Function?(f=b.options[a].toString(),f=f.replace(/\s\s+/g," "),e=f.indexOf("{"),d.push(" "+a+": {"+f.substr(e+1,Math.min(Math.max(f.indexOf("\n")-1,64),64)).replace(/\n/g,"")+"... }")):d.push(" "+a+": "+b.options[a]));c._wD("SMSound() merged options: {\n"+d.join(", \n")+"\n}")}};this._debug();this.load=function(a){var d=null;if("undefined"!==typeof a)b._iO=v(a,b.options),b.instanceOptions=b._iO;else if(a=b.options,b._iO=a,b.instanceOptions=
|
||||
b._iO,r&&r!==b.url)o("manURL"),b._iO.url=b.url,b.url=null;if(!b._iO.url)b._iO.url=b.url;b._iO.url=ia(b._iO.url);c._wD("SMSound.load(): "+b._iO.url,1);if(b._iO.url===b.url&&0!==b.readyState&&2!==b.readyState)return o("onURL",1),3===b.readyState&&b._iO.onload&&b._iO.onload.apply(b,[!!b.duration]),b;a=b._iO;r=b.url;b.loaded=!1;b.readyState=1;b.playState=0;if(ja(a))d=b._setup_html5(a),d._called_load?c._wD(m+"ignoring request to load again: "+b.sID):(c._wD(m+"load: "+b.sID),b._html5_canplay=!1,b._a.autobuffer=
|
||||
"auto",b._a.preload="auto",d.load(),d._called_load=!0,a.autoPlay&&b.play());else try{b.isHTML5=!1,b._iO=fa(ea(a)),a=b._iO,8===j?g._load(b.sID,a.url,a.stream,a.autoPlay,a.whileloading?1:0,a.loops||1,a.usePolicyFile):g._load(b.sID,a.url,!!a.stream,!!a.autoPlay,a.loops||1,!!a.autoLoad,a.usePolicyFile)}catch(f){o("smError",2),w("onload",!1),J({type:"SMSOUND_LOAD_JS_EXCEPTION",fatal:!0})}return b};this.unload=function(){0!==b.readyState&&(c._wD('SMSound.unload(): "'+b.sID+'"'),b.isHTML5?(N(),b._a&&(b._a.pause(),
|
||||
ya(b._a))):8===j?g._unload(b.sID,"about:blank"):g._unload(b.sID),f());return b};this.destruct=function(a){c._wD('SMSound.destruct(): "'+b.sID+'"');if(b.isHTML5){if(N(),b._a)b._a.pause(),ya(b._a),E||h(),b._a._t=null,b._a=null}else b._iO.onfailure=null,g._destroySound(b.sID);a||c.destroySound(b.sID,!0)};this.start=this.play=function(a,d){var f,d=void 0===d?!0:d;a||(a={});b._iO=v(a,b._iO);b._iO=v(b._iO,b.options);b._iO.url=ia(b._iO.url);b.instanceOptions=b._iO;if(b._iO.serverURL&&!b.connected)return b.getAutoPlay()||
|
||||
(c._wD("SMSound.play(): Netstream not connected yet - setting autoPlay"),b.setAutoPlay(!0)),b;ja(b._iO)&&(b._setup_html5(b._iO),i());if(1===b.playState&&!b.paused)if(f=b._iO.multiShot)c._wD('SMSound.play(): "'+b.sID+'" already playing (multi-shot)',1);else return c._wD('SMSound.play(): "'+b.sID+'" already playing (one-shot)',1),b;if(b.loaded)c._wD('SMSound.play(): "'+b.sID+'"');else if(0===b.readyState){c._wD('SMSound.play(): Attempting to load "'+b.sID+'"',1);if(!b.isHTML5)b._iO.autoPlay=!0;b.load(b._iO)}else{if(2===
|
||||
b.readyState)return c._wD('SMSound.play(): Could not load "'+b.sID+'" - exiting',2),b;c._wD('SMSound.play(): "'+b.sID+'" is loading - attempting to play..',1)}if(!b.isHTML5&&9===j&&0<b.position&&b.position===b.duration)c._wD('SMSound.play(): "'+b.sID+'": Sound at end, resetting to position:0'),a.position=0;if(b.paused&&b.position&&0<b.position)c._wD('SMSound.play(): "'+b.sID+'" is resuming from paused state',1),b.resume();else{b._iO=v(a,b._iO);if(null!==b._iO.from&&null!==b._iO.to&&0===b.instanceCount&&
|
||||
0===b.playState&&!b._iO.serverURL){f=function(){b._iO=v(a,b._iO);b.play(b._iO)};if(b.isHTML5&&!b._html5_canplay)return c._wD('SMSound.play(): Beginning load of "'+b.sID+'" for from/to case'),b.load({_oncanplay:f}),!1;if(!b.isHTML5&&!b.loaded&&(!b.readyState||2!==b.readyState))return c._wD('SMSound.play(): Preloading "'+b.sID+'" for from/to case'),b.load({onload:f}),!1;b._iO=u()}c._wD('SMSound.play(): "'+b.sID+'" is starting to play');(!b.instanceCount||b._iO.multiShotEvents||!b.isHTML5&&8<j&&!b.getAutoPlay())&&
|
||||
b.instanceCount++;0===b.playState&&b._iO.onposition&&Ya(b);b.playState=1;b.paused=!1;b.position="undefined"!==typeof b._iO.position&&!isNaN(b._iO.position)?b._iO.position:0;if(!b.isHTML5)b._iO=fa(ea(b._iO));b._iO.onplay&&d&&(b._iO.onplay.apply(b),p=!0);b.setVolume(b._iO.volume,!0);b.setPan(b._iO.pan,!0);b.isHTML5?(i(),f=b._setup_html5(),b.setPosition(b._iO.position),f.play()):g._start(b.sID,b._iO.loops||1,9===j?b._iO.position:b._iO.position/1E3)}return b};this.stop=function(c){var a=b._iO;if(1===
|
||||
b.playState){b._onbufferchange(0);b._resetOnPosition(0);b.paused=!1;if(!b.isHTML5)b.playState=0;t();a.to&&b.clearOnPosition(a.to);if(b.isHTML5){if(b._a)c=b.position,b.setPosition(0),b.position=c,b._a.pause(),b.playState=0,b._onTimer(),N()}else g._stop(b.sID,c),a.serverURL&&b.unload();b.instanceCount=0;b._iO={};a.onstop&&a.onstop.apply(b)}return b};this.setAutoPlay=function(a){c._wD("sound "+b.sID+" turned autoplay "+(a?"on":"off"));b._iO.autoPlay=a;b.isHTML5||(g._setAutoPlay(b.sID,a),a&&!b.instanceCount&&
|
||||
1===b.readyState&&(b.instanceCount++,c._wD("sound "+b.sID+" incremented instance count to "+b.instanceCount)))};this.getAutoPlay=function(){return b._iO.autoPlay};this.setPosition=function(a){void 0===a&&(a=0);var d=b.isHTML5?Math.max(a,0):Math.min(b.duration||b._iO.duration,Math.max(a,0));b.position=d;a=b.position/1E3;b._resetOnPosition(b.position);b._iO.position=d;if(b.isHTML5){if(b._a)if(b._html5_canplay){if(b._a.currentTime!==a){c._wD("setPosition("+a+"): setting position");try{b._a.currentTime=
|
||||
a,(0===b.playState||b.paused)&&b._a.pause()}catch(f){c._wD("setPosition("+a+"): setting position failed: "+f.message,2)}}}else c._wD("setPosition("+a+"): delaying, sound not ready")}else a=9===j?b.position:a,b.readyState&&2!==b.readyState&&g._setPosition(b.sID,a,b.paused||!b.playState);b.isHTML5&&b.paused&&b._onTimer(!0);return b};this.pause=function(a){if(b.paused||0===b.playState&&1!==b.readyState)return b;c._wD("SMSound.pause()");b.paused=!0;b.isHTML5?(b._setup_html5().pause(),N()):(a||void 0===
|
||||
a)&&g._pause(b.sID);b._iO.onpause&&b._iO.onpause.apply(b);return b};this.resume=function(){var a=b._iO;if(!b.paused)return b;c._wD("SMSound.resume()");b.paused=!1;b.playState=1;b.isHTML5?(b._setup_html5().play(),i()):(a.isMovieStar&&!a.serverURL&&b.setPosition(b.position),g._pause(b.sID));!p&&a.onplay?(a.onplay.apply(b),p=!0):a.onresume&&a.onresume.apply(b);return b};this.togglePause=function(){c._wD("SMSound.togglePause()");if(0===b.playState)return b.play({position:9===j&&!b.isHTML5?b.position:
|
||||
b.position/1E3}),b;b.paused?b.resume():b.pause();return b};this.setPan=function(a,c){"undefined"===typeof a&&(a=0);"undefined"===typeof c&&(c=!1);b.isHTML5||g._setPan(b.sID,a);b._iO.pan=a;if(!c)b.pan=a,b.options.pan=a;return b};this.setVolume=function(a,d){"undefined"===typeof a&&(a=100);"undefined"===typeof d&&(d=!1);if(b.isHTML5){if(b._a)b._a.volume=Math.max(0,Math.min(1,a/100))}else g._setVolume(b.sID,c.muted&&!b.muted||b.muted?0:a);b._iO.volume=a;if(!d)b.volume=a,b.options.volume=a;return b};
|
||||
this.mute=function(){b.muted=!0;if(b.isHTML5){if(b._a)b._a.muted=!0}else g._setVolume(b.sID,0);return b};this.unmute=function(){b.muted=!1;var a="undefined"!==typeof b._iO.volume;if(b.isHTML5){if(b._a)b._a.muted=!1}else g._setVolume(b.sID,a?b._iO.volume:b.options.volume);return b};this.toggleMute=function(){return b.muted?b.unmute():b.mute()};this.onposition=this.onPosition=function(a,c,d){l.push({position:parseInt(a,10),method:c,scope:"undefined"!==typeof d?d:b,fired:!1});return b};this.clearOnPosition=
|
||||
function(b,a){var c,b=parseInt(b,10);if(isNaN(b))return!1;for(c=0;c<l.length;c++)if(b===l[c].position&&(!a||a===l[c].method))l[c].fired&&n--,l.splice(c,1)};this._processOnPosition=function(){var a,c;a=l.length;if(!a||!b.playState||n>=a)return!1;for(a-=1;0<=a;a--)if(c=l[a],!c.fired&&b.position>=c.position)c.fired=!0,n++,c.method.apply(c.scope,[c.position]);return!0};this._resetOnPosition=function(b){var a,c;a=l.length;if(!a)return!1;for(a-=1;0<=a;a--)if(c=l[a],c.fired&&b<=c.position)c.fired=!1,n--;
|
||||
return!0};u=function(){var a=b._iO,d=a.from,f=a.to,e,h;h=function(){c._wD(b.sID+': "to" time of '+f+" reached.");b.clearOnPosition(f,h);b.stop()};e=function(){c._wD(b.sID+': playing "from" '+d);if(null!==f&&!isNaN(f))b.onPosition(f,h)};if(null!==d&&!isNaN(d))a.position=d,a.multiShot=!1,e();return a};Ya=function(){var a,c=b._iO.onposition;if(c)for(a in c)if(c.hasOwnProperty(a))b.onPosition(parseInt(a,10),c[a])};t=function(){var a,c=b._iO.onposition;if(c)for(a in c)c.hasOwnProperty(a)&&b.clearOnPosition(parseInt(a,
|
||||
10))};i=function(){b.isHTML5&&Ka(b)};N=function(){b.isHTML5&&La(b)};f=function(){l=[];n=0;p=!1;b._hasTimer=null;b._a=null;b._html5_canplay=!1;b.bytesLoaded=null;b.bytesTotal=null;b.duration=b._iO&&b._iO.duration?b._iO.duration:null;b.durationEstimate=null;b.eqData=[];b.eqData.left=[];b.eqData.right=[];b.failures=0;b.isBuffering=!1;b.instanceOptions={};b.instanceCount=0;b.loaded=!1;b.metadata={};b.readyState=0;b.muted=!1;b.paused=!1;b.peakData={left:0,right:0};b.waveformData={left:[],right:[]};b.playState=
|
||||
0;b.position=null};f();this._onTimer=function(a){var c,f=!1,h={};if(b._hasTimer||a){if(b._a&&(a||(0<b.playState||1===b.readyState)&&!b.paused)){c=b._get_html5_duration();if(c!==d)d=c,b.duration=c,f=!0;b.durationEstimate=b.duration;c=1E3*b._a.currentTime||0;c!==e&&(e=c,f=!0);(f||a)&&b._whileplaying(c,h,h,h,h);return f}return!1}};this._get_html5_duration=function(){var a=b._iO,c=b._a?1E3*b._a.duration:a?a.duration:void 0;return c&&!isNaN(c)&&Infinity!==c?c:a?a.duration:null};this._setup_html5=function(a){var a=
|
||||
v(b._iO,a),d=decodeURI,e=E?c._global_a:b._a,h=d(a.url),g=e&&e._t?e._t.instanceOptions:null;if(e){if(e._t&&(!E&&h===d(r)||E&&g.url===a.url&&(!r||r===g.url)))return e;c._wD("setting new URL on existing object: "+h+(r?", old URL: "+r:""));E&&e._t&&e._t.playState&&a.url!==g.url&&e._t.stop();f();e.src=a.url;r=b.url=a.url;e._called_load=!1}else{c._wD("creating HTML5 Audio() element with URL: "+h);e=new Audio(a.url);e._called_load=!1;if(bb)e._called_load=!0;if(E)c._global_a=e}b.isHTML5=!0;b._a=e;e._t=b;
|
||||
k();e.loop=1<a.loops?"loop":"";a.autoLoad||a.autoPlay?b.load():(e.autobuffer=!1,e.preload="none");e.loop=1<a.loops?"loop":"";return e};k=function(){if(b._a._added_events)return!1;var a;c._wD(m+"adding event listeners: "+b.sID);b._a._added_events=!0;for(a in z)z.hasOwnProperty(a)&&b._a&&b._a.addEventListener(a,z[a],!1);return!0};h=function(){var a;c._wD(m+"removing event listeners: "+b.sID);b._a._added_events=!1;for(a in z)z.hasOwnProperty(a)&&b._a&&b._a.removeEventListener(a,z[a],!1)};this._onload=
|
||||
function(a){a=!!a;c._wD('SMSound._onload(): "'+b.sID+'"'+(a?" loaded.":" failed to load? - "+b.url),a?1:2);!a&&!b.isHTML5&&(!0===c.sandbox.noRemote&&c._wD("SMSound._onload(): "+q("noNet"),1),!0===c.sandbox.noLocal&&c._wD("SMSound._onload(): "+q("noLocal"),1));b.loaded=a;b.readyState=a?3:2;b._onbufferchange(0);b._iO.onload&&b._iO.onload.apply(b,[a]);return!0};this._onbufferchange=function(a){if(0===b.playState||a&&b.isBuffering||!a&&!b.isBuffering)return!1;b.isBuffering=1===a;b._iO.onbufferchange&&
|
||||
(c._wD("SMSound._onbufferchange(): "+a),b._iO.onbufferchange.apply(b));return!0};this._onsuspend=function(){b._iO.onsuspend&&(c._wD("SMSound._onsuspend()"),b._iO.onsuspend.apply(b));return!0};this._onfailure=function(a,d,f){b.failures++;c._wD('SMSound._onfailure(): "'+b.sID+'" count '+b.failures);if(b._iO.onfailure&&1===b.failures)b._iO.onfailure(b,a,d,f);else c._wD("SMSound._onfailure(): ignoring")};this._onfinish=function(){var a=b._iO.onfinish;b._onbufferchange(0);b._resetOnPosition(0);if(b.instanceCount){b.instanceCount--;
|
||||
if(!b.instanceCount)t(),b.playState=0,b.paused=!1,b.instanceCount=0,b.instanceOptions={},b._iO={},N();if((!b.instanceCount||b._iO.multiShotEvents)&&a)c._wD('SMSound._onfinish(): "'+b.sID+'"'),a.apply(b)}};this._whileloading=function(a,c,d,f){var e=b._iO;b.bytesLoaded=a;b.bytesTotal=c;b.duration=Math.floor(d);b.bufferLength=f;if(e.isMovieStar)b.durationEstimate=b.duration;else if(b.durationEstimate=e.duration?b.duration>e.duration?b.duration:e.duration:parseInt(b.bytesTotal/b.bytesLoaded*b.duration,
|
||||
10),void 0===b.durationEstimate)b.durationEstimate=b.duration;3!==b.readyState&&e.whileloading&&e.whileloading.apply(b)};this._whileplaying=function(a,c,d,f,e){var h=b._iO;if(isNaN(a)||null===a)return!1;b.position=a;b._processOnPosition();if(!b.isHTML5&&8<j){if(h.usePeakData&&"undefined"!==typeof c&&c)b.peakData={left:c.leftPeak,right:c.rightPeak};if(h.useWaveformData&&"undefined"!==typeof d&&d)b.waveformData={left:d.split(","),right:f.split(",")};if(h.useEQData&&"undefined"!==typeof e&&e&&e.leftEQ&&
|
||||
(a=e.leftEQ.split(","),b.eqData=a,b.eqData.left=a,"undefined"!==typeof e.rightEQ&&e.rightEQ))b.eqData.right=e.rightEQ.split(",")}1===b.playState&&(!b.isHTML5&&8===j&&!b.position&&b.isBuffering&&b._onbufferchange(0),h.whileplaying&&h.whileplaying.apply(b));return!0};this._onmetadata=function(a,d){c._wD('SMSound._onmetadata(): "'+this.sID+'" metadata received.');var e={},f,h;for(f=0,h=a.length;f<h;f++)e[a[f]]=d[f];b.metadata=e;b._iO.onmetadata&&b._iO.onmetadata.apply(b)};this._onid3=function(a,d){c._wD('SMSound._onid3(): "'+
|
||||
this.sID+'" ID3 data received.');var e=[],f,h;for(f=0,h=a.length;f<h;f++)e[a[f]]=d[f];b.id3=v(b.id3,e);b._iO.onid3&&b._iO.onid3.apply(b)};this._onconnect=function(a){a=1===a;c._wD('SMSound._onconnect(): "'+b.sID+'"'+(a?" connected.":" failed to connect? - "+b.url),a?1:2);if(b.connected=a)b.failures=0,s(b.sID)&&(b.getAutoPlay()?b.play(void 0,b.getAutoPlay()):b._iO.autoLoad&&b.load()),b._iO.onconnect&&b._iO.onconnect.apply(b,[a])};this._ondataerror=function(a){0<b.playState&&(c._wD("SMSound._ondataerror(): "+
|
||||
a),b._iO.ondataerror&&b._iO.ondataerror.apply(b))}};ba=function(){return k.body||k._docElement||k.getElementsByTagName("div")[0]};r=function(a){return k.getElementById(a)};v=function(a,d){var e={},b,f;for(b in a)a.hasOwnProperty(b)&&(e[b]=a[b]);b="undefined"===typeof d?c.defaultOptions:d;for(f in b)b.hasOwnProperty(f)&&"undefined"===typeof e[f]&&(e[f]=b[f]);return e};l=function(){function a(a){var a=Pa.call(a),b=a.length;e?(a[1]="on"+a[1],3<b&&a.pop()):3===b&&a.push(!1);return a}function c(a,d){var h=
|
||||
a.shift(),g=[b[d]];if(e)h[g](a[0],a[1]);else h[g].apply(h,a)}var e=i.attachEvent,b={add:e?"attachEvent":"addEventListener",remove:e?"detachEvent":"removeEventListener"};return{add:function(){c(a(arguments),"add")},remove:function(){c(a(arguments),"remove")}}}();z={abort:n(function(){c._wD(m+"abort: "+this._t.sID)}),canplay:n(function(){var a=this._t,d;if(a._html5_canplay)return!0;a._html5_canplay=!0;c._wD(m+"canplay: "+a.sID+", "+a.url);a._onbufferchange(0);d=!isNaN(a.position)?a.position/1E3:null;
|
||||
if(a.position&&this.currentTime!==d){c._wD(m+"canplay: setting position to "+d);try{this.currentTime=d}catch(e){c._wD(m+"setting position failed: "+e.message,2)}}a._iO._oncanplay&&a._iO._oncanplay()}),load:n(function(){var a=this._t;a.loaded||(a._onbufferchange(0),a._whileloading(a.bytesTotal,a.bytesTotal,a._get_html5_duration()),a._onload(!0))}),ended:n(function(){var a=this._t;c._wD(m+"ended: "+a.sID);a._onfinish()}),error:n(function(){c._wD(m+"error: "+this.error.code);this._t._onload(!1)}),loadeddata:n(function(){var a=
|
||||
this._t,d=a.bytesTotal||1;c._wD(m+"loadeddata: "+this._t.sID);if(!a._loaded&&!V)a.duration=a._get_html5_duration(),a._whileloading(d,d,a._get_html5_duration()),a._onload(!0)}),loadedmetadata:n(function(){c._wD(m+"loadedmetadata: "+this._t.sID)}),loadstart:n(function(){c._wD(m+"loadstart: "+this._t.sID);this._t._onbufferchange(1)}),play:n(function(){c._wD(m+"play: "+this._t.sID+", "+this._t.url);this._t._onbufferchange(0)}),playing:n(function(){c._wD(m+"playing: "+this._t.sID);this._t._onbufferchange(0)}),
|
||||
progress:n(function(a){var d=this._t,e,b,f;f=0;var g="progress"===a.type;b=a.target.buffered;var h=a.loaded||0,k=a.total||1;if(d.loaded)return!1;if(b&&b.length){for(e=b.length-1;0<=e;e--)f=b.end(e)-b.start(e);h=f/a.target.duration;if(g&&1<b.length){f=[];b=b.length;for(e=0;e<b;e++)f.push(a.target.buffered.start(e)+"-"+a.target.buffered.end(e));c._wD(m+"progress: timeRanges: "+f.join(", "))}g&&!isNaN(h)&&c._wD(m+"progress: "+d.sID+": "+Math.floor(100*h)+"% loaded")}isNaN(h)||(d._onbufferchange(0),d._whileloading(h,
|
||||
k,d._get_html5_duration()),h&&k&&h===k&&z.load.call(this,a))}),ratechange:n(function(){c._wD(m+"ratechange: "+this._t.sID)}),suspend:n(function(a){var d=this._t;c._wD(m+"suspend: "+d.sID);z.progress.call(this,a);d._onsuspend()}),stalled:n(function(){c._wD(m+"stalled: "+this._t.sID)}),timeupdate:n(function(){this._t._onTimer()}),waiting:n(function(){var a=this._t;c._wD(m+"waiting: "+a.sID);a._onbufferchange(1)})};ja=function(a){return!a.serverURL&&(a.type?U({type:a.type}):U({url:a.url})||c.html5Only)};
|
||||
ya=function(a){if(a)a.src=ab?"":"about:blank"};U=function(a){function d(a){return c.preferFlash&&u&&!c.ignoreFlash&&"undefined"!==typeof c.flash[a]&&c.flash[a]}if(!c.useHTML5Audio||!c.hasHTML5)return!1;var e=a.url||null,a=a.type||null,b=c.audioFormats,f;if(a&&"undefined"!==typeof c.html5[a])return c.html5[a]&&!d(a);if(!B){B=[];for(f in b)b.hasOwnProperty(f)&&(B.push(f),b[f].related&&(B=B.concat(b[f].related)));B=RegExp("\\.("+B.join("|")+")(\\?.*)?$","i")}f=e?e.toLowerCase().match(B):null;if(!f||
|
||||
!f.length)if(a)e=a.indexOf(";"),f=(-1!==e?a.substr(0,e):a).substr(6);else return!1;else f=f[1];if(f&&"undefined"!==typeof c.html5[f])return c.html5[f]&&!d(f);a="audio/"+f;e=c.html5.canPlayType({type:a});return(c.html5[f]=e)&&c.html5[a]&&!d(a)};Oa=function(){function a(a){var b,e,f=!1;if(!d||"function"!==typeof d.canPlayType)return!1;if(a instanceof Array){for(b=0,e=a.length;b<e&&!f;b++)if(c.html5[a[b]]||d.canPlayType(a[b]).match(c.html5Test))f=!0,c.html5[a[b]]=!0,c.flash[a[b]]=!(!c.preferFlash||!u||
|
||||
!a[b].match(Ua));return f}a=d&&"function"===typeof d.canPlayType?d.canPlayType(a):!1;return!(!a||!a.match(c.html5Test))}if(!c.useHTML5Audio||"undefined"===typeof Audio)return!1;var d="undefined"!==typeof Audio?db?new Audio(null):new Audio:null,e,b={},f,g;f=c.audioFormats;for(e in f)if(f.hasOwnProperty(e)&&(b[e]=a(f[e].type),b["audio/"+e]=b[e],c.flash[e]=c.preferFlash&&!c.ignoreFlash&&e.match(Ua)?!0:!1,f[e]&&f[e].related))for(g=f[e].related.length-1;0<=g;g--)b["audio/"+f[e].related[g]]=b[e],c.html5[f[e].related[g]]=
|
||||
b[e],c.flash[f[e].related[g]]=b[e];b.canPlayType=d?a:null;c.html5=v(c.html5,b);return!0};$={notReady:"Not loaded yet - wait for soundManager.onload()/onready()",notOK:"Audio support is not available.",domError:"soundManager::createMovie(): appendChild/innerHTML call failed. DOM not ready or other error.",spcWmode:"soundManager::createMovie(): Removing wmode, preventing known SWF loading issue(s)",swf404:"soundManager: Verify that %s is a valid path.",tryDebug:"Try soundManager.debugFlash = true for more security details (output goes to SWF.)",
|
||||
checkSWF:"See SWF output for more debug info.",localFail:"soundManager: Non-HTTP page ("+k.location.protocol+" URL?) Review Flash player security settings for this special case:\nhttp://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html\nMay need to add/allow path, eg. c:/sm2/ or /users/me/sm2/",waitFocus:"soundManager: Special case: Waiting for focus-related event..",waitImpatient:"soundManager: Getting impatient, still waiting for Flash%s...",waitForever:"soundManager: Waiting indefinitely for Flash (will recover if unblocked)...",
|
||||
needFunction:"soundManager: Function object expected for %s",badID:'Warning: Sound ID "%s" should be a string, starting with a non-numeric character',currentObj:"--- soundManager._debug(): Current sound objects ---",waitEI:"soundManager::initMovie(): Waiting for ExternalInterface call from Flash..",waitOnload:"soundManager: Waiting for window.onload()",docLoaded:"soundManager: Document already loaded",onload:"soundManager::initComplete(): calling soundManager.onload()",onloadOK:"soundManager.onload() complete",
|
||||
init:"soundManager::init()",didInit:"soundManager::init(): Already called?",flashJS:"soundManager: Attempting to call Flash from JS..",secNote:"Flash security note: Network/internet URLs will not load due to security restrictions. Access can be configured via Flash Player Global Security Settings Page: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html",badRemove:"Warning: Failed to remove flash movie.",noPeak:"Warning: peakData features unsupported for movieStar formats",
|
||||
shutdown:"soundManager.disable(): Shutting down",queue:"soundManager: Queueing %s handler",smFail:"soundManager: Failed to initialise.",smError:"SMSound.load(): Exception: JS-Flash communication failed, or JS error.",fbTimeout:"No flash response, applying .swf_timedout CSS..",fbLoaded:"Flash loaded",fbHandler:"soundManager::flashBlockHandler()",manURL:"SMSound.load(): Using manually-assigned URL",onURL:"soundManager.load(): current URL already assigned.",badFV:'soundManager.flashVersion must be 8 or 9. "%s" is invalid. Reverting to %s.',
|
||||
as2loop:"Note: Setting stream:false so looping can work (flash 8 limitation)",noNSLoop:"Note: Looping not implemented for MovieStar formats",needfl9:"Note: Switching to flash 9, required for MP4 formats.",mfTimeout:"Setting flashLoadTimeout = 0 (infinite) for off-screen, mobile flash case",mfOn:"mobileFlash::enabling on-screen flash repositioning",policy:"Enabling usePolicyFile for data access"};q=function(){var a=Pa.call(arguments),c=a.shift(),c=$&&$[c]?$[c]:"",e,b;if(c&&a&&a.length)for(e=0,b=a.length;e<
|
||||
b;e++)c=c.replace("%s",a[e]);return c};ea=function(a){if(8===j&&1<a.loops&&a.stream)o("as2loop"),a.stream=!1;return a};fa=function(a,d){if(a&&!a.usePolicyFile&&(a.onid3||a.usePeakData||a.useWaveformData||a.useEQData))c._wD((d||"")+q("policy")),a.usePolicyFile=!0;return a};wa=function(a){"undefined"!==typeof console&&"undefined"!==typeof console.warn?console.warn(a):c._wD(a)};na=function(){return!1};Ha=function(a){for(var c in a)a.hasOwnProperty(c)&&"function"===typeof a[c]&&(a[c]=na)};da=function(a){"undefined"===
|
||||
typeof a&&(a=!1);if(x||a)o("smFail",2),c.disable(a)};Ia=function(a){var d=null;if(a)if(a.match(/\.swf(\?.*)?$/i)){if(d=a.substr(a.toLowerCase().lastIndexOf(".swf?")+4))return a}else a.lastIndexOf("/")!==a.length-1&&(a+="/");a=(a&&-1!==a.lastIndexOf("/")?a.substr(0,a.lastIndexOf("/")+1):"./")+c.movieURL;c.noSWFCache&&(a+="?ts="+(new Date).getTime());return a};qa=function(){j=parseInt(c.flashVersion,10);if(8!==j&&9!==j)c._wD(q("badFV",j,8)),c.flashVersion=j=8;var a=c.debugMode||c.debugFlash?"_debug.swf":
|
||||
".swf";if(c.useHTML5Audio&&!c.html5Only&&c.audioFormats.mp4.required&&9>j)c._wD(q("needfl9")),c.flashVersion=j=9;c.version=c.versionNumber+(c.html5Only?" (HTML5-only mode)":9===j?" (AS3/Flash 9)":" (AS2/Flash 8)");8<j?(c.defaultOptions=v(c.defaultOptions,c.flash9Options),c.features.buffering=!0,c.defaultOptions=v(c.defaultOptions,c.movieStarOptions),c.filePatterns.flash9=RegExp("\\.(mp3|"+Xa.join("|")+")(\\?.*)?$","i"),c.features.movieStar=!0):c.features.movieStar=!1;c.filePattern=c.filePatterns[8!==
|
||||
j?"flash9":"flash8"];c.movieURL=(8===j?"soundmanager2.swf":"soundmanager2_flash9.swf").replace(".swf",a);c.features.peakData=c.features.waveformData=c.features.eqData=8<j};Ga=function(a,c){if(!g)return!1;g._setPolling(a,c)};ta=function(){if(c.debugURLParam.test(O))c.debugMode=!0;if(r(c.debugID))return!1;var a,d,e,b;if(c.debugMode&&!r(c.debugID)&&(!Sa||!c.useConsole||!c.consoleOnly)){a=k.createElement("div");a.id=c.debugID+"-toggle";d={position:"fixed",bottom:"0px",right:"0px",width:"1.2em",height:"1.2em",
|
||||
lineHeight:"1.2em",margin:"2px",textAlign:"center",border:"1px solid #999",cursor:"pointer",background:"#fff",color:"#333",zIndex:10001};a.appendChild(k.createTextNode("-"));a.onclick=Ja;a.title="Toggle SM2 debug console";if(t.match(/msie 6/i))a.style.position="absolute",a.style.cursor="hand";for(b in d)d.hasOwnProperty(b)&&(a.style[b]=d[b]);d=k.createElement("div");d.id=c.debugID;d.style.display=c.debugMode?"block":"none";if(c.debugMode&&!r(a.id)){try{e=ba(),e.appendChild(a)}catch(f){throw Error(q("domError")+
|
||||
" \n"+f.toString());}e.appendChild(d)}}};s=this.getSoundById;o=function(a,d){return a?c._wD(q(a),d):""};if(O.indexOf("sm2-debug=alert")+1&&c.debugMode)c._wD=function(a){F.alert(a)};Ja=function(){var a=r(c.debugID),d=r(c.debugID+"-toggle");if(!a)return!1;oa?(d.innerHTML="+",a.style.display="none"):(d.innerHTML="-",a.style.display="block");oa=!oa};w=function(a,c,e){if("undefined"!==typeof sm2Debugger)try{sm2Debugger.handleEvent(a,c,e)}catch(b){}return!0};K=function(){var a=[];c.debugMode&&a.push("sm2_debug");
|
||||
c.debugFlash&&a.push("flash_debug");c.useHighPerformance&&a.push("high_performance");return a.join(" ")};va=function(){var a=q("fbHandler"),d=c.getMoviePercent(),e={type:"FLASHBLOCK"};if(c.html5Only)return!1;if(c.ok()){if(c.didFlashBlock&&c._wD(a+": Unblocked"),c.oMC)c.oMC.className=[K(),"movieContainer","swf_loaded"+(c.didFlashBlock?" swf_unblocked":"")].join(" ")}else{if(y)c.oMC.className=K()+" movieContainer "+(null===d?"swf_timedout":"swf_error"),c._wD(a+": "+q("fbTimeout")+(d?" ("+q("fbLoaded")+
|
||||
")":""));c.didFlashBlock=!0;G({type:"ontimeout",ignoreInit:!0,error:e});J(e)}};pa=function(a,c,e){"undefined"===typeof A[a]&&(A[a]=[]);A[a].push({method:c,scope:e||null,fired:!1})};G=function(a){a||(a={type:"onready"});if(!p&&a&&!a.ignoreInit||"ontimeout"===a.type&&c.ok())return!1;var d={success:a&&a.ignoreInit?c.ok():!x},e=a&&a.type?A[a.type]||[]:[],b=[],f,g=[d],h=y&&c.useFlashBlock&&!c.ok();if(a.error)g[0].error=a.error;for(d=0,f=e.length;d<f;d++)!0!==e[d].fired&&b.push(e[d]);if(b.length){c._wD("soundManager: Firing "+
|
||||
b.length+" "+a.type+"() item"+(1===b.length?"":"s"));for(d=0,f=b.length;d<f;d++)if(b[d].scope?b[d].method.apply(b[d].scope,g):b[d].method.apply(this,g),!h)b[d].fired=!0}return!0};H=function(){i.setTimeout(function(){c.useFlashBlock&&va();G();c.onload instanceof Function&&(o("onload",1),c.onload.apply(i),o("onloadOK",1));c.waitForWindowLoad&&l.add(i,"load",H)},1)};ka=function(){if(void 0!==u)return u;var a=!1,c=navigator,e=c.plugins,b,f=i.ActiveXObject;if(e&&e.length)(c=c.mimeTypes)&&c["application/x-shockwave-flash"]&&
|
||||
c["application/x-shockwave-flash"].enabledPlugin&&c["application/x-shockwave-flash"].enabledPlugin.description&&(a=!0);else if("undefined"!==typeof f){try{b=new f("ShockwaveFlash.ShockwaveFlash")}catch(g){}a=!!b}return u=a};Na=function(){var a,d;if(Aa&&t.match(/os (1|2|3_0|3_1)/i)){c.hasHTML5=!1;c.html5Only=!0;if(c.oMC)c.oMC.style.display="none";return!1}if(c.useHTML5Audio){if(!c.html5||!c.html5.canPlayType)return c._wD("SoundManager: No HTML5 Audio() support detected."),c.hasHTML5=!1,!0;c.hasHTML5=
|
||||
!0;if(Ca&&(c._wD("soundManager::Note: Buggy HTML5 Audio in Safari on this OS X release, see https://bugs.webkit.org/show_bug.cgi?id=32159 - "+(!u?" would use flash fallback for MP3/MP4, but none detected.":"will use flash fallback for MP3/MP4, if available"),1),ka()))return!0}else return!0;for(d in c.audioFormats)if(c.audioFormats.hasOwnProperty(d)&&(c.audioFormats[d].required&&!c.html5.canPlayType(c.audioFormats[d].type)||c.flash[d]||c.flash[c.audioFormats[d].type]))a=!0;c.ignoreFlash&&(a=!1);c.html5Only=
|
||||
c.hasHTML5&&c.useHTML5Audio&&!a;return!c.html5Only};ia=function(a){var d,e,b=0;if(a instanceof Array){for(d=0,e=a.length;d<e;d++)if(a[d]instanceof Object){if(c.canPlayMIME(a[d].type)){b=d;break}}else if(c.canPlayURL(a[d])){b=d;break}if(a[b].url)a[b]=a[b].url;return a[b]}return a};Ka=function(a){if(!a._hasTimer)a._hasTimer=!0,!Ba&&c.html5PollingInterval&&(null===T&&0===ha&&(T=F.setInterval(Ma,c.html5PollingInterval)),ha++)};La=function(a){if(a._hasTimer)a._hasTimer=!1,!Ba&&c.html5PollingInterval&&
|
||||
ha--};Ma=function(){var a;if(null!==T&&!ha)return F.clearInterval(T),T=null,!1;for(a=c.soundIDs.length-1;0<=a;a--)c.sounds[c.soundIDs[a]].isHTML5&&c.sounds[c.soundIDs[a]]._hasTimer&&c.sounds[c.soundIDs[a]]._onTimer()};J=function(a){a="undefined"!==typeof a?a:{};c.onerror instanceof Function&&c.onerror.apply(i,[{type:"undefined"!==typeof a.type?a.type:null}]);"undefined"!==typeof a.fatal&&a.fatal&&c.disable()};Qa=function(){if(!Ca||!ka())return!1;var a=c.audioFormats,d,e;for(e in a)if(a.hasOwnProperty(e)&&
|
||||
("mp3"===e||"mp4"===e))if(c._wD("soundManager: Using flash fallback for "+e+" format"),c.html5[e]=!1,a[e]&&a[e].related)for(d=a[e].related.length-1;0<=d;d--)c.html5[a[e].related[d]]=!1};this._setSandboxType=function(a){var d=c.sandbox;d.type=a;d.description=d.types["undefined"!==typeof d.types[a]?a:"unknown"];c._wD("Flash security sandbox type: "+d.type);if("localWithFile"===d.type)d.noRemote=!0,d.noLocal=!1,o("secNote",2);else if("localWithNetwork"===d.type)d.noRemote=!1,d.noLocal=!0;else if("localTrusted"===
|
||||
d.type)d.noRemote=!1,d.noLocal=!1};this._externalInterfaceOK=function(a,d){if(c.swfLoaded)return!1;var e,b=(new Date).getTime();c._wD("soundManager::externalInterfaceOK()"+(a?" (~"+(b-a)+" ms)":""));w("swf",!0);w("flashtojs",!0);c.swfLoaded=!0;L=!1;Ca&&Qa();if(!d||d.replace(/\+dev/i,"")!==c.versionNumber.replace(/\+dev/i,""))return e='soundManager: Fatal: JavaScript file build "'+c.versionNumber+'" does not match Flash SWF build "'+d+'" at '+c.url+". Ensure both are up-to-date.",setTimeout(function(){throw Error(e);
|
||||
},0),!1;C?setTimeout(X,100):X()};ca=function(a,d){function e(){c._wD("-- SoundManager 2 "+c.version+(!c.html5Only&&c.useHTML5Audio?c.hasHTML5?" + HTML5 audio":", no HTML5 audio support":"")+(!c.html5Only?(c.useHighPerformance?", high performance mode, ":", ")+((c.flashPollingInterval?"custom ("+c.flashPollingInterval+"ms)":"normal")+" polling")+(c.wmode?", wmode: "+c.wmode:"")+(c.debugFlash?", flash debug mode":"")+(c.useFlashBlock?", flashBlock mode":""):"")+" --",1)}function b(a,b){return'<param name="'+
|
||||
a+'" value="'+b+'" />'}if(P&&Q)return!1;if(c.html5Only)return qa(),e(),c.oMC=r(c.movieID),X(),Q=P=!0,!1;var f=d||c.url,g=c.altURL||f,h;h=ba();var i,l,j=K(),m,n=null,n=(n=k.getElementsByTagName("html")[0])&&n.dir&&n.dir.match(/rtl/i),a="undefined"===typeof a?c.id:a;qa();c.url=Ia(M?f:g);d=c.url;c.wmode=!c.wmode&&c.useHighPerformance?"transparent":c.wmode;if(null!==c.wmode&&(t.match(/msie 8/i)||!C&&!c.useHighPerformance)&&navigator.platform.match(/win32|win64/i))o("spcWmode"),c.wmode=null;h={name:a,
|
||||
id:a,src:d,quality:"high",allowScriptAccess:c.allowScriptAccess,bgcolor:c.bgColor,pluginspage:Va+"www.macromedia.com/go/getflashplayer",title:"JS/Flash audio component (SoundManager 2)",type:"application/x-shockwave-flash",wmode:c.wmode,hasPriority:"true"};if(c.debugFlash)h.FlashVars="debug=1";c.wmode||delete h.wmode;if(C)f=k.createElement("div"),l=['<object id="'+a+'" data="'+d+'" type="'+h.type+'" title="'+h.title+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="'+Va+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="'+
|
||||
h.width+'" height="'+h.height+'">',b("movie",d),b("AllowScriptAccess",c.allowScriptAccess),b("quality",h.quality),c.wmode?b("wmode",c.wmode):"",b("bgcolor",c.bgColor),b("hasPriority","true"),c.debugFlash?b("FlashVars",h.FlashVars):"","</object>"].join("");else for(i in f=k.createElement("embed"),h)h.hasOwnProperty(i)&&f.setAttribute(i,h[i]);ta();j=K();if(h=ba())if(c.oMC=r(c.movieID)||k.createElement("div"),c.oMC.id){m=c.oMC.className;c.oMC.className=(m?m+" ":"movieContainer")+(j?" "+j:"");c.oMC.appendChild(f);
|
||||
if(C)i=c.oMC.appendChild(k.createElement("div")),i.className="sm2-object-box",i.innerHTML=l;Q=!0}else{c.oMC.id=c.movieID;c.oMC.className="movieContainer "+j;i=j=null;if(!c.useFlashBlock)if(c.useHighPerformance)j={position:"fixed",width:"8px",height:"8px",bottom:"0px",left:"0px",overflow:"hidden"};else if(j={position:"absolute",width:"6px",height:"6px",top:"-9999px",left:"-9999px"},n)j.left=Math.abs(parseInt(j.left,10))+"px";if(cb)c.oMC.style.zIndex=1E4;if(!c.debugFlash)for(m in j)j.hasOwnProperty(m)&&
|
||||
(c.oMC.style[m]=j[m]);try{C||c.oMC.appendChild(f);h.appendChild(c.oMC);if(C)i=c.oMC.appendChild(k.createElement("div")),i.className="sm2-object-box",i.innerHTML=l;Q=!0}catch(p){throw Error(q("domError")+" \n"+p.toString());}}P=!0;e();c._wD("soundManager::createMovie(): Trying to load "+d+(!M&&c.altURL?" (alternate URL)":""),1);return!0};aa=function(){if(c.html5Only)return ca(),!1;if(g)return!1;g=c.getMovie(c.id);if(!g)S?(C?c.oMC.innerHTML=ua:c.oMC.appendChild(S),S=null,P=!0):ca(c.id,c.url),g=c.getMovie(c.id);
|
||||
g&&o("waitEI");c.oninitmovie instanceof Function&&setTimeout(c.oninitmovie,1);return!0};Z=function(){setTimeout(Fa,1E3)};Fa=function(){if(ga)return!1;ga=!0;l.remove(i,"load",Z);if(L&&!Da)return o("waitFocus"),!1;var a;p||(a=c.getMoviePercent(),c._wD(q("waitImpatient",100===a?" (SWF loaded)":0<a?" (SWF "+a+"% loaded)":"")));setTimeout(function(){a=c.getMoviePercent();p||(c._wD("soundManager: No Flash response within expected time.\nLikely causes: "+(0===a?"Loading "+c.movieURL+" may have failed (and/or Flash "+
|
||||
j+"+ not present?), ":"")+"Flash blocked or JS-Flash security error."+(c.debugFlash?" "+q("checkSWF"):""),2),!M&&a&&(o("localFail",2),c.debugFlash||o("tryDebug",2)),0===a&&c._wD(q("swf404",c.url)),w("flashtojs",!1,": Timed out"+M?" (Check flash security or flash blockers)":" (No plugin/missing SWF?)"));!p&&Ta&&(null===a?c.useFlashBlock||0===c.flashLoadTimeout?(c.useFlashBlock&&va(),o("waitForever")):da(!0):0===c.flashLoadTimeout?o("waitForever"):da(!0))},c.flashLoadTimeout)};D=function(){function a(){l.remove(i,
|
||||
"focus",D);l.remove(i,"load",D)}if(Da||!L)return a(),!0;Da=Ta=!0;c._wD("soundManager::handleFocus()");V&&L&&l.remove(i,"mousemove",D);ga=!1;a();return!0};Ra=function(){var a,d=[];if(c.useHTML5Audio&&c.hasHTML5){for(a in c.audioFormats)c.audioFormats.hasOwnProperty(a)&&d.push(a+": "+c.html5[a]+(!c.html5[a]&&u&&c.flash[a]?" (using flash)":c.preferFlash&&c.flash[a]&&u?" (preferring flash)":!c.html5[a]?" ("+(c.audioFormats[a].required?"required, ":"")+"and no flash support)":""));c._wD("-- SoundManager 2: HTML5 support tests ("+
|
||||
c.html5Test+"): "+d.join(", ")+" --",1)}};R=function(a){if(p)return!1;if(c.html5Only)return c._wD("-- SoundManager 2: loaded --"),p=!0,H(),w("onload",!0),!0;var d;if(!c.useFlashBlock||!c.flashLoadTimeout||c.getMoviePercent())p=!0,x&&(d={type:!u&&y?"NO_FLASH":"INIT_TIMEOUT"});c._wD("-- SoundManager 2 "+(x?"failed to load":"loaded")+" ("+(x?"security/load error":"OK")+") --",1);if(x||a){if(c.useFlashBlock&&c.oMC)c.oMC.className=K()+" "+(null===c.getMoviePercent()?"swf_timedout":"swf_error");G({type:"ontimeout",
|
||||
error:d});w("onload",!1);J(d);return!1}w("onload",!0);if(c.waitForWindowLoad&&!Y)return o("waitOnload"),l.add(i,"load",H),!1;c.waitForWindowLoad&&Y&&o("docLoaded");H();return!0};X=function(){o("init");if(p)return o("didInit"),!1;if(c.html5Only){if(!p)l.remove(i,"load",c.beginDelayedInit),c.enabled=!0,R();return!0}aa();try{o("flashJS"),g._externalInterfaceTest(!1),Ga(!0,c.flashPollingInterval||(c.useHighPerformance?10:50)),c.debugMode||g._disableDebug(),c.enabled=!0,w("jstoflash",!0),c.html5Only||
|
||||
l.add(i,"unload",na)}catch(a){return c._wD("js/flash exception: "+a.toString()),w("jstoflash",!1),J({type:"JS_TO_FLASH_EXCEPTION",fatal:!0}),da(!0),R(),!1}R();l.remove(i,"load",c.beginDelayedInit);return!0};I=function(){if(sa)return!1;sa=!0;ta();var a=O.toLowerCase(),d=null,d=null,e="undefined"!==typeof console&&"undefined"!==typeof console.log;if(-1!==a.indexOf("sm2-usehtml5audio="))d="1"===a.charAt(a.indexOf("sm2-usehtml5audio=")+18),e&&console.log((d?"Enabling ":"Disabling ")+"useHTML5Audio via URL parameter"),
|
||||
c.useHTML5Audio=d;if(-1!==a.indexOf("sm2-preferflash="))d="1"===a.charAt(a.indexOf("sm2-preferflash=")+16),e&&console.log((d?"Enabling ":"Disabling ")+"preferFlash via URL parameter"),c.preferFlash=d;if(!u&&c.hasHTML5)c._wD("SoundManager: No Flash detected"+(!c.useHTML5Audio?", enabling HTML5.":". Trying HTML5-only mode.")),c.useHTML5Audio=!0,c.preferFlash=!1;Oa();c.html5.usingFlash=Na();y=c.html5.usingFlash;Ra();if(!u&&y)c._wD("SoundManager: Fatal error: Flash is needed to play some required formats, but is not available."),
|
||||
c.flashLoadTimeout=1;k.removeEventListener&&k.removeEventListener("DOMContentLoaded",I,!1);aa();return!0};za=function(){"complete"===k.readyState&&(I(),k.detachEvent("onreadystatechange",za));return!0};ra=function(){Y=!0;l.remove(i,"load",ra)};ka();l.add(i,"focus",D);l.add(i,"load",D);l.add(i,"load",Z);l.add(i,"load",ra);V&&L&&l.add(i,"mousemove",D);k.addEventListener?k.addEventListener("DOMContentLoaded",I,!1):k.attachEvent?k.attachEvent("onreadystatechange",za):(w("onload",!1),J({type:"NO_DOM2_EVENTS",
|
||||
fatal:!0}));"complete"===k.readyState&&setTimeout(I,100)}var la=null;if("undefined"===typeof SM2_DEFER||!SM2_DEFER)la=new W;F.SoundManager=W;F.soundManager=la})(window);
|
BIN
js/sm/swf/soundmanager2.swf
Normal file
BIN
js/sm/swf/soundmanager2.swf
Normal file
Binary file not shown.
BIN
js/sm/swf/soundmanager2_debug.swf
Normal file
BIN
js/sm/swf/soundmanager2_debug.swf
Normal file
Binary file not shown.
BIN
js/sm/swf/soundmanager2_flash9.swf
Normal file
BIN
js/sm/swf/soundmanager2_flash9.swf
Normal file
Binary file not shown.
BIN
js/sm/swf/soundmanager2_flash9_debug.swf
Normal file
BIN
js/sm/swf/soundmanager2_flash9_debug.swf
Normal file
Binary file not shown.
BIN
js/sm/swf/soundmanager2_flash_xdomain.zip
Normal file
BIN
js/sm/swf/soundmanager2_flash_xdomain.zip
Normal file
Binary file not shown.
|
@ -441,7 +441,7 @@ table.songlist tr.song td
|
|||
table.songlist tr.song td.itemactions
|
||||
{
|
||||
width: 80px;
|
||||
padding-left: 22px;
|
||||
padding-left: 27px;
|
||||
}
|
||||
table.songlist tr.song td.track
|
||||
{
|
||||
|
@ -525,7 +525,7 @@ table.songlist tr.playing
|
|||
}
|
||||
table.songlist tr.playing td:first-child
|
||||
{
|
||||
background: url('../images/play_alt_16x16.png') 6px 11px no-repeat;
|
||||
background: url('../images/play_alt_gd_16x16.png') 8px 11px no-repeat;
|
||||
}
|
||||
table.songlist tr.selected
|
||||
{
|
||||
|
@ -764,6 +764,7 @@ background-color: #8dbdd8;
|
|||
font-family: inherit;
|
||||
font-size: 10px;
|
||||
box-shadow: none;
|
||||
overflow: hidden;
|
||||
}
|
||||
.audiojs .play-pause
|
||||
{
|
||||
|
@ -775,6 +776,35 @@ background-color: #8dbdd8;
|
|||
margin: 26px 5px 0px 5px;
|
||||
float: none;
|
||||
width: auto;
|
||||
position: relative;
|
||||
background: #5A5A5A;
|
||||
border-top: 1px solid #3F3F3F;
|
||||
border-left: 0px;
|
||||
border-bottom: 0px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.audiojs .progress
|
||||
{
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
height: 14px;
|
||||
width: 0px;
|
||||
background: #CCC;
|
||||
z-index: 1;
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #CCC), color-stop(0.5, #DDD), color-stop(0.51, #CCC), color-stop(1, #CCC));
|
||||
background-image: -moz-linear-gradient(center top, #CCC 0%, #DDD 50%, #CCC 51%, #CCC 100%);
|
||||
}
|
||||
.audiojs .loaded
|
||||
{
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
height: 14px;
|
||||
width: 0px;
|
||||
background: black;
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #222), color-stop(0.5, #333), color-stop(0.51, #222), color-stop(1, #222));
|
||||
background-image: -moz-linear-gradient(center top, #222 0%, #333 50%, #222 51%, #222 100%);
|
||||
}
|
||||
.audiojs .time
|
||||
{
|
||||
|
@ -785,10 +815,14 @@ background-color: #8dbdd8;
|
|||
font-size: 11px;
|
||||
color: #333333;
|
||||
text-shadow: none;
|
||||
height: 36px;
|
||||
margin: 0px 0px 0px 6px;
|
||||
}
|
||||
.audiojs .time em
|
||||
{
|
||||
color: #333333;
|
||||
padding: 0px 2px 0px 0px;
|
||||
font-style: normal;
|
||||
}
|
||||
.playeractions
|
||||
{
|
||||
|
@ -804,7 +838,7 @@ background-color: #8dbdd8;
|
|||
#playermiddle
|
||||
{
|
||||
width: 100%;
|
||||
visibility: hidden;
|
||||
/*visibility: hidden;*/
|
||||
}
|
||||
#coverart
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue