Mercurial > hg > webaudioevaluationtool
changeset 1205:0e49d874ba97
Interfaces report error if audio cannot be loaded/decoded/played
author | Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk> |
---|---|
date | Mon, 22 Feb 2016 15:48:28 +0000 |
parents | 96acb21e1cd5 |
children | 74ce8e3f8dd5 |
files | core.css core.js interfaces/AB.js interfaces/ape.js interfaces/blank.js interfaces/discrete.js interfaces/horizontal-sliders.js interfaces/mushra.js |
diffstat | 8 files changed, 85 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/core.css Mon Feb 22 15:05:39 2016 +0000 +++ b/core.css Mon Feb 22 15:48:28 2016 +0000 @@ -151,4 +151,12 @@ height: 25px; margin-left: 5px; float: left; +} + +div.error-colour { + background-color: #FF8F8F; +} +button.error-colour { + background-color: #FF8F8F; + color: black; } \ No newline at end of file
--- a/core.js Mon Feb 22 15:05:39 2016 +0000 +++ b/core.js Mon Feb 22 15:48:28 2016 +0000 @@ -982,6 +982,7 @@ // Create callback to decode the data asynchronously this.xmlRequest.onloadend = function() { // Use inbuilt WAVE decoder first + if (this.status == -1) {return;} var waveObj = new WAVE(); if (waveObj.open(bufferObj.xmlRequest.response) == 0) { @@ -1011,7 +1012,7 @@ console.log('URL: '+audioObj.url); errorSessionDump('Fragment '+audioObj.id+' 404 error'); } - this.status = -1; + this.parent.status = -1; } }); } @@ -1021,6 +1022,20 @@ calculateLoudness(bufferObj,"I"); } }; + + // Create callback for any error in loading + this.xmlRequest.onerror = function() { + this.parent.status = -1; + for (var i=0; i<this.parent.users.length; i++) + { + this.parent.users[i].state = -1; + if (this.parent.users[i].interfaceDOM != null) + { + this.parent.users[i].bufferLoaded(this); + } + } + } + this.progress = 0; this.progressCallback = function(event){ if (event.lengthComputable) @@ -1052,7 +1067,7 @@ if (audioObject.id == objects.id){return 0;} } this.users.push(audioObject); - if (this.status == 3) + if (this.status == 3 || this.status == -1) { // The buffer is already ready, trigger bufferLoaded audioObject.bufferLoaded(this); @@ -1267,6 +1282,13 @@ { // Called by the associated buffer when it has finished loading, will then 'bind' the buffer to the // audioObject and trigger the interfaceDOM.enable() function for user feedback + if (callee.status == -1) { + // ERROR + this.state = -1; + if (this.interfaceDOM != null) {this.interfaceDOM.error();} + this.buffer = callee; + return; + } if (audioEngineContext.loopPlayback){ // First copy the buffer into this.buffer this.buffer = new audioEngineContext.bufferObj(); @@ -1308,7 +1330,11 @@ if (this.state == 1) { this.interfaceDOM.enable(); - } + } else if (this.state == -1) { + // ERROR + this.interfaceDOM.error(); + return; + } this.storeDOM.setAttribute('presentedId',interfaceObject.getPresentedId()); };
--- a/interfaces/AB.js Mon Feb 22 15:05:39 2016 +0000 +++ b/interfaces/AB.js Mon Feb 22 15:48:28 2016 +0000 @@ -259,6 +259,11 @@ this.playback.textContent = "Play"; } }; + this.error = function() { + // audioObject has an error!! + this.playback.textContent = "Error"; + $(this.playback).addClass("error-colour"); + } this.startPlayback = function() { $('.comparator-button').text('Listen');
--- a/interfaces/ape.js Mon Feb 22 15:05:39 2016 +0000 +++ b/interfaces/ape.js Mon Feb 22 15:48:28 2016 +0000 @@ -644,6 +644,11 @@ { return true; }; + this.error = function() { + // audioObject has an error!! + this.playback.textContent = "Error"; + $(this.playback).addClass("error-colour"); + } } function outsideReferenceDOM(audioObject,index,inject) @@ -713,6 +718,11 @@ { return false; }; + this.error = function() { + // audioObject has an error!! + this.outsideReferenceHolder.textContent = "Error"; + $(this.outsideReferenceHolder).addClass("error-colour"); + } } function buttonSubmitClick()
--- a/interfaces/blank.js Mon Feb 22 15:05:39 2016 +0000 +++ b/interfaces/blank.js Mon Feb 22 15:48:28 2016 +0000 @@ -57,6 +57,9 @@ // Use storage.document.createElement('value'); to generate the XML node. }; + this.error = function() { + // If there is an error with the audioObject, this will be called to indicate a failure + } }; function resizeWindow(event)
--- a/interfaces/discrete.js Mon Feb 22 15:05:39 2016 +0000 +++ b/interfaces/discrete.js Mon Feb 22 15:48:28 2016 +0000 @@ -378,6 +378,11 @@ node.textContent = this.getValue(); return node; }; + this.error = function() { + // audioObject has an error!! + this.playback.textContent = "Error"; + $(this.playback).addClass("error-colour"); + } }; function outsideReferenceDOM(audioObject,index,inject) @@ -446,6 +451,11 @@ { return false; }; + this.error = function() { + // audioObject has an error!! + this.outsideReferenceHolder.textContent = "Error"; + $(this.outsideReferenceHolder).addClass("error-colour"); + } } function resizeWindow(event)
--- a/interfaces/horizontal-sliders.js Mon Feb 22 15:05:39 2016 +0000 +++ b/interfaces/horizontal-sliders.js Mon Feb 22 15:48:28 2016 +0000 @@ -331,6 +331,11 @@ node.textContent = this.slider.value; return node; }; + this.error = function() { + // audioObject has an error!! + this.playback.textContent = "Error"; + $(this.playback).addClass("error-colour"); + } }; function outsideReferenceDOM(audioObject,index,inject) @@ -394,6 +399,11 @@ { return false; }; + this.error = function() { + // audioObject has an error!! + this.outsideReferenceHolder.textContent = "Error"; + $(this.outsideReferenceHolder).addClass("error-colour"); + } } function resizeWindow(event)
--- a/interfaces/mushra.js Mon Feb 22 15:05:39 2016 +0000 +++ b/interfaces/mushra.js Mon Feb 22 15:48:28 2016 +0000 @@ -343,6 +343,11 @@ { return true; }; + this.error = function() { + // audioObject has an error!! + this.playback.textContent = "Error"; + $(this.playback).addClass("error-colour"); + } } function outsideReferenceDOM(audioObject,index,inject) @@ -406,6 +411,11 @@ { return false; }; + this.error = function() { + // audioObject has an error!! + this.outsideReferenceHolder.textContent = "Error"; + $(this.outsideReferenceHolder).addClass("error-colour"); + } } function resizeWindow(event)