changeset 1013:3a77fed8a32c

Feature #1261: Enabled with new <metricEnabled> flag in specification XML. Returns <event> nodes with <testTime> and <bufferTime>
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Wed, 03 Jun 2015 11:12:29 +0100
parents 4df1b4e7596f
children 4a0bfa7bef24
files ape.js core.js example_eval/project.xml
diffstat 3 files changed, 55 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ape.js	Mon Jun 01 17:00:45 2015 +0100
+++ b/ape.js	Wed Jun 03 11:12:29 2015 +0100
@@ -92,6 +92,9 @@
 		case 'elementTracker':
 			sessionMetrics.prototype.enableElementTracker = true;
 			break;
+		case 'elementListenTracker':
+			sessionMetrics.prototype.enableElementListenTracker = true;
+			break;
 		case 'elementInitalPosition':
 			sessionMetrics.prototype.enableElementInitialPosition = true;
 			break;
@@ -673,6 +676,15 @@
 			}
 			metric.appendChild(elementTrackerFull);
 		}
+		if (audioEngineContext.metric.enableElementListenTracker) {
+			var elementListenTracker = document.createElement('metricResult');
+			elementListenTracker.id = 'elementListenTracker';
+			var obj = elementMetric.listenTracker;
+			for (var k=0; k<obj.length; k++) {
+				elementListenTracker.appendChild(obj[k]);
+			}
+			metric.appendChild(elementListenTracker);
+		}
 		if (audioEngineContext.metric.enableElementInitialPosition) {
 			var elementInitial = document.createElement('metricResult');
 			elementInitial.id = 'elementInitialPosition';
--- a/core.js	Mon Jun 01 17:00:45 2015 +0100
+++ b/core.js	Wed Jun 03 11:12:29 2015 +0100
@@ -562,6 +562,27 @@
 			this.metric.stopListening(audioEngineContext.timer.getTestTime());
 		}
 	};
+	
+	this.getCurrentPosition = function() {
+		var time = audioEngineContext.timer.getTestTime();
+		if (this.bufferNode != undefined) {
+			if (this.bufferNode.loop == true) {
+				if (audioEngineContext.status  == 1) {
+					return time%this.buffer.duration;
+				} else {
+					return 0;
+				}
+			} else {
+				if (this.metric.listenHold) {
+					return time - this.metric.listenStart;
+				} else {
+					return 0;
+				}
+			}
+		} else {
+			return 0;
+		}
+	};
 
 	this.constructTrack = function(url) {
 		var request = new XMLHttpRequest();
@@ -658,6 +679,7 @@
 	this.listenHold = false;
 	this.initialPosition = -1;
 	this.movementTracker = [];
+	this.listenTracker =[];
 	this.wasListenedTo = false;
 	this.wasMoved = false;
 	this.hasComments = false;
@@ -683,6 +705,16 @@
 			this.wasListenedTo = true;
 			this.listenStart = time;
 			this.listenHold = true;
+			
+			var evnt = document.createElement('event');
+			var testTime = document.createElement('testTime');
+			testTime.setAttribute('start',time);
+			var bufferTime = document.createElement('bufferTime');
+			bufferTime.setAttribute('start',this.parent.getCurrentPosition());
+			evnt.appendChild(testTime);
+			evnt.appendChild(bufferTime);
+			this.listenTracker.push(evnt);
+			
 			console.log('slider ' + this.parent.id + ' played (' + time + ')'); // DEBUG/SAFETY: show played slider id
 		}
 	};
@@ -691,9 +723,17 @@
 	{
 		if (this.listenHold == true)
 		{
-			this.listenedTimer += (time - this.listenStart);
+			var diff = time - this.listenStart;
+			this.listenedTimer += (diff);
 			this.listenStart = 0;
 			this.listenHold = false;
+			
+			var evnt = this.listenTracker[this.listenTracker.length-1];
+			var testTime = evnt.getElementsByTagName('testTime')[0];
+			var bufferTime = evnt.getElementsByTagName('bufferTime')[0];
+			testTime.setAttribute('stop',time);
+			bufferTime.setAttribute('stop',this.parent.getCurrentPosition());
+			console.log('slider ' + this.parent.id + ' played for (' + diff + ')'); // DEBUG/SAFETY: show played slider id
 		}
 	};
 }
--- a/example_eval/project.xml	Mon Jun 01 17:00:45 2015 +0100
+++ b/example_eval/project.xml	Wed Jun 03 11:12:29 2015 +0100
@@ -16,9 +16,10 @@
 			<metricEnable>elementTracker</metricEnable>
 			<metricEnable>elementFlagListenedTo</metricEnable>
 			<metricEnable>elementFlagMoved</metricEnable>
+			<metricEnable>elementListenTracker</metricEnable>
 		</Metric>
 	</setup>
-	<audioHolder id='0' hostURL="example_eval/" sampleRate="44100" randomiseOrder='true' repeatCount='0' loop='false' elementComments='true'>
+	<audioHolder id='0' hostURL="example_eval/" sampleRate="44100" randomiseOrder='true' repeatCount='0' loop='true' elementComments='true'>
 		<interface>
 			<title>Example Test Question</title>
 			<scale position="0">Min</scale>