summaryrefslogtreecommitdiff
path: root/www/js
diff options
context:
space:
mode:
Diffstat (limited to 'www/js')
-rw-r--r--www/js/api.js103
-rw-r--r--www/js/html5ks.js6
2 files changed, 56 insertions, 53 deletions
diff --git a/www/js/api.js b/www/js/api.js
index 84cc881..74971ae 100644
--- a/www/js/api.js
+++ b/www/js/api.js
@@ -33,6 +33,41 @@ window.html5ks.api = new (function () {
return when.resolve();
},
+ _loadMedia: function (el, src, types) {
+ var deferred = when.defer();
+ var i = 0;
+ var _nextType = function () {
+ for (; i < types.length; i++) {
+ var type = types[i];
+ if (el.canPlayType(type[0])) {
+ el.src = src + "." + type[1];
+ el.load();
+ return true;
+ }
+ }
+ return false;
+ };
+
+ _nextType();
+
+ el.oncanplaythrough = function () {
+ el.play();
+ };
+
+ el.onerror = function (e) {
+ if (e.code === e.MEDIA_ERR_SRC_NOT_SUPPORTED) {
+ if (!_nextType()) {
+ console.log("no audio formats supported");
+ deferred.resolve();
+ }
+ } else {
+ console.error("unknown audio error");
+ deferred.resolve();
+ }
+ };
+ return deferred.promise;
+ },
+
play: function (channel, name, ignore, fade) {
this.stop(channel);
var deferred = when.defer(),
@@ -55,26 +90,6 @@ window.html5ks.api = new (function () {
volume = html5ks.persistent.sfxVolume;
}
- var types = ["opus", "ogg", "m4a", "wav"];
-
- var setNextType = function (i) {
- for (; i < types.length; i++) {
- if (Modernizr.audio[types[i]]) {
- audio.src = src + "." + types[i];
- audio.load();
- audio.volume = fade ? 0 : volume;
- return i;
- }
- }
- return null;
- };
-
- var i;
-
- audio.addEventListener("canplaythrough", function canplaythrough() {
- audio.removeEventListener("canplaythrough", canplaythrough, false);
- audio.play();
- });
audio.addEventListener("playing", function playing() {
audio.removeEventListener("playing", playing, false);
if (fade) {
@@ -82,21 +97,15 @@ window.html5ks.api = new (function () {
}
deferred.resolve();
}, false);
- audio.onerror = function (e) {
- if (e.code === e.MEDIA_ERR_SRC_NOT_SUPPORTED) {
- i = setNextType(++i);
- if (!i) {
- console.error("No media formats appear to be supported.");
- console.error(e);
- deferred.resolve();
- }
- } else {
- console.error(e);
- deferred.resolve();
- }
- };
- i = setNextType(0);
+ audio.volume = fade ? 0 : volume;
+ this._loadMedia(audio, src, [
+ ['audio/ogg; codecs="opus"', "opus"],
+ ['audio/ogg; codecs="vorbis"', "ogg"],
+ ['audio/x-m4a', "m4a"],
+ ['audio/aac', "aac"],
+ ['audio/wav; codecs="1"', "wav"]]).then(function () { deferred.resolve(); });
+ // TODO: fix this garbage -------------------------------^
return deferred.promise;
},
@@ -123,7 +132,7 @@ window.html5ks.api = new (function () {
movie_cutscene: function (vid_src, skippable) {
var deferred = when.defer(),
video = html5ks.elements.video,
- src = "dump/video/" + vid_src + ".";
+ src = "dump/video/" + vid_src;
this.stop("all");
clearInterval(html5ks._nextTimeout);
@@ -132,22 +141,15 @@ window.html5ks.api = new (function () {
return deferred.resolve();
}
- var types = {
- "webm": "webm",
- "ogg": "ogv",
- "h264": "mp4"
- };
- for (var type in types) {
- if (Modernizr.video[type]) {
- video.src = src + types[type];
- break;
- }
- }
-
- video.load();
+ this._loadMedia(video, src, [
+ ['video/webm; codecs="vp9,opus"', "vp9.webm"],
+ ['video/webm; codecs="vp8,vorbis"', "webm"],
+ ['video/ogg; codecs="theora,vorbis"', "ogv"],
+ // TODO: check that this is the right codec
+ ['video/mp4; codecs="avc1.42E01E,mp4a.40.2"']]).then(function () { deferred.resolve(); });
+ // TODO: fix this garbage
video.style.display = "block";
video.volume = html5ks.persistent.musicVolume;
- video.play();
var done = function () {
video.style.display = "none";
video.pause();
@@ -166,9 +168,6 @@ window.html5ks.api = new (function () {
}
};
video.onended = done;
- video.onerror = function () {
- deferred.reject(this.error);
- };
return deferred.promise;
},
diff --git a/www/js/html5ks.js b/www/js/html5ks.js
index e1c0bd7..093505e 100644
--- a/www/js/html5ks.js
+++ b/www/js/html5ks.js
@@ -19,7 +19,11 @@ window.html5ks = {
sfxVolume: 1,
language: "en"
};
- var loaded = localStorage.persistent ? JSON.parse(localStorage.persistent) : {};
+ try {
+ var loaded = localStorage.persistent ? JSON.parse(localStorage.persistent) : {};
+ } catch (e) {
+ var loaded = {};
+ }
var defProp = function (v) {
Object.defineProperty(html5ks.persistent, k, {
get: function () {