changeset 944:23bf5007b552

Bug #1226: Moved check to audioObjects and audioEngine so available for all interfaces. Also interface pop-up now states all outstanding fragments to listen.
author Nicholas Jillings <nicholas.jillings@eecs.qmul.ac.uk>
date Sun, 24 May 2015 09:57:35 +0100
parents 759c2ace3c65
children 17561e292409
files ape.js core.js
diffstat 2 files changed, 49 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/ape.js	Sun May 17 21:37:08 2015 +0100
+++ b/ape.js	Sun May 24 09:57:35 2015 +0100
@@ -11,10 +11,6 @@
 // postTest - End of test, final submission!
 
 
-// Create empty array to log whether different samples have been played
-var hasBeenPlayed = []; // HERE?
-
-
 // Once this is loaded and parsed, begin execution
 loadInterface(projectXML);
 
@@ -501,13 +497,10 @@
                               
             }
             audioEngineContext.play();
-            hasBeenPlayed[index] = true; // mark as played
 		};
 		
 		canvas.appendChild(trackSliderObj);
         
-        // Add corresponding element to array to check whether sound has been played
-        hasBeenPlayed.push(false);
 	});
 	
 	// Append any commentQuestion boxes
@@ -736,6 +729,8 @@
 		// Start the test
 		var testId = currentState.substr(11,currentState.length-10);
 		currentState = 'testRun-'+testId;
+		//audioEngineContext.timer.startTest();
+		audioEngineContext.play();
 	} else if (currentState.substr(0,11) == 'testRunPost')
 	{
 		var testId = currentState.substr(12,currentState.length-11);
@@ -786,29 +781,42 @@
 
 function buttonSubmitClick() // TODO: Only when all songs have been played!
 {
-    if (hasBeenPlayed.indexOf(false)==-1)
-        {
-        if (audioEngineContext.status == 1) {
-            var playback = document.getElementById('playback-button');
-            playback.click();
-        // This function is called when the submit button is clicked. Will check for any further tests to perform, or any post-test options
-        } else
-        {
-            if (audioEngineContext.timer.testStarted == false)
-            {
-                alert('You have not started the test! Please press start to begin the test!');
-                return;
-            }
-        }
-        if (currentState.substr(0,7) == 'testRun')
-        {
-            hasBeenPlayed = []; // clear array to prepare for next test
-            audioEngineContext.timer.stopTest();
-            advanceState();
-        }
+    hasBeenPlayed = audioEngineContext.checkAllPlayed();
+    if (hasBeenPlayed.length == 0) {
+	    if (audioEngineContext.status == 1) {
+	        var playback = document.getElementById('playback-button');
+	        playback.click();
+	    // This function is called when the submit button is clicked. Will check for any further tests to perform, or any post-test options
+	    } else
+	    {
+	        if (audioEngineContext.timer.testStarted == false)
+	        {
+	            alert('You have not started the test! Please press start to begin the test!');
+	            return;
+	        }
+	    }
+	    if (currentState.substr(0,7) == 'testRun')
+	    {
+	        hasBeenPlayed = []; // clear array to prepare for next test
+	        audioEngineContext.timer.stopTest();
+	        advanceState();
+	    }
     } else // if a fragment has not been played yet
     {
-        alert('You have not played fragment ' + hasBeenPlayed.indexOf(false) + ' yet. Please listen, rate and comment all samples before submitting.');
+    	str = "";
+    	if (hasBeenPlayed.length > 1) {
+	    	for (var i=0; i<hasBeenPlayed.length; i++) {
+	    		str = str + hasBeenPlayed[i];
+	    		if (i < hasBeenPlayed.length-2){
+	    			str += ", ";
+	    		} else if (i == hasBeenPlayed.length-2) {
+	    			str += " or ";
+	    		}
+	    	}
+	    	alert('You have not played fragments ' + str + ' yet. Please listen, rate and comment all samples before submitting.');
+       } else {
+       		alert('You have not played fragment ' + hasBeenPlayed[0] + ' yet. Please listen, rate and comment all samples before submitting.');
+       }
         return;
     }
 }
--- a/core.js	Sun May 17 21:37:08 2015 +0100
+++ b/core.js	Sun May 24 09:57:35 2015 +0100
@@ -137,6 +137,16 @@
 		this.audioObjects[audioObjectId].constructTrack(url);
 	};
 	
+	this.checkAllPlayed = function() {
+		arr = [];
+		for (var id=0; id<this.audioObjects.length; id++) {
+			if (this.audioObjects[id].played == false) {
+				arr.push(this.audioObjects[id].id);
+			}
+		}
+		return arr;
+	};
+	
 }
 
 function audioObject(id) {
@@ -147,6 +157,8 @@
 	this.url = null; // Hold the URL given for the output back to the results.
 	this.metric = new metricTracker();
 	
+	this.played = false;
+	
 	// Create a buffer and external gain control to allow internal patching of effects and volume leveling.
 	this.bufferNode = undefined;
 	this.outputGain = audioContext.createGain();
@@ -167,6 +179,7 @@
 		this.bufferNode.buffer = this.buffer;
 		this.bufferNode.loop = audioEngineContext.loopPlayback;
 		this.bufferNode.start(startTime);
+		this.played = true;
 	};
 	
 	this.stop = function() {