comparison ape.js @ 392:feaa33f28221 Dev_main

APE: Separate metric trackers for each scale to differentiate movements.
author Nicholas Jillings <nicholas.jillings@eecs.qmul.ac.uk>
date Fri, 11 Dec 2015 10:21:48 +0000
parents 3b97ee830b48
children d0073ab16551
comparison
equal deleted inserted replaced
391:3b97ee830b48 392:feaa33f28221
16 // The injection point into the HTML page 16 // The injection point into the HTML page
17 interfaceContext.insertPoint = document.getElementById("topLevelBody"); 17 interfaceContext.insertPoint = document.getElementById("topLevelBody");
18 var testContent = document.createElement('div'); 18 var testContent = document.createElement('div');
19 19
20 testContent.id = 'testContent'; 20 testContent.id = 'testContent';
21
22
23 // Create APE specific metric functions
24 audioEngineContext.metric.initialiseTest = function()
25 {
26 };
27
28 audioEngineContext.metric.sliderMoved = function()
29 {
30 var id = this.data;
31 this.data = -1;
32 var position = convSliderPosToRate(id);
33 console.log('slider ' + id + ': '+ position + ' (' + time + ')'); // DEBUG/SAFETY: show position and slider id
34 if (audioEngineContext.timer.testStarted)
35 {
36 audioEngineContext.audioObjects[id].metric.moved(time,position);
37 }
38 };
39
40 audioEngineContext.metric.sliderPlayed = function(id)
41 {
42 var time = audioEngineContext.timer.getTestTime();
43 if (audioEngineContext.timer.testStarted)
44 {
45 if (this.lastClicked >= 0)
46 {
47 audioEngineContext.audioObjects[this.lastClicked].metric.listening(time);
48 }
49 this.lastClicked = id;
50 audioEngineContext.audioObjects[id].metric.listening(time);
51 }
52 console.log('slider ' + id + ' played (' + time + ')'); // DEBUG/SAFETY: show played slider id
53 };
54 21
55 // Bindings for interfaceContext 22 // Bindings for interfaceContext
56 Interface.prototype.checkAllPlayed = function() 23 Interface.prototype.checkAllPlayed = function()
57 { 24 {
58 hasBeenPlayed = audioEngineContext.checkAllPlayed(); 25 hasBeenPlayed = audioEngineContext.checkAllPlayed();
371 338
372 $(document).mouseup(function(event){ 339 $(document).mouseup(function(event){
373 event.preventDefault(); 340 event.preventDefault();
374 var obj = interfaceContext.getSelectedObject(); 341 var obj = interfaceContext.getSelectedObject();
375 if (obj == null) {return;} 342 if (obj == null) {return;}
343 var interfaceID = obj.parentElement.getAttribute("interfaceid");
344 var trackID = obj.getAttribute("trackindex");
376 if (interfaceContext.hasSelectedObjectMoved() == true) 345 if (interfaceContext.hasSelectedObjectMoved() == true)
377 { 346 {
378 var l = $(obj).css("left"); 347 var l = $(obj).css("left");
379 var id = obj.getAttribute('trackIndex'); 348 var id = obj.getAttribute('trackIndex');
380 var time = audioEngineContext.timer.getTestTime(); 349 var time = audioEngineContext.timer.getTestTime();
381 var rate = convSliderPosToRate(obj); 350 var rate = convSliderPosToRate(obj);
382 audioEngineContext.audioObjects[id].metric.moved(time,rate); 351 audioEngineContext.audioObjects[id].metric.moved(time,rate);
352 interfaceContext.interfaceSliders[interfaceID].metrics[trackID].moved(time,rate);
383 console.log("slider "+id+" moved to "+rate+' ('+time+')'); 353 console.log("slider "+id+" moved to "+rate+' ('+time+')');
384 } else { 354 } else {
385 var id = Number(obj.attributes['trackIndex'].value); 355 var id = Number(obj.attributes['trackIndex'].value);
386 //audioEngineContext.metric.sliderPlayed(id); 356 //audioEngineContext.metric.sliderPlayed(id);
387 audioEngineContext.play(id); 357 audioEngineContext.play(id);
388 // Currently playing track red, rest green 358 // Currently playing track red, rest green
389
390 359
391 $('.track-slider').removeClass('track-slider-playing'); 360 $('.track-slider').removeClass('track-slider-playing');
392 var name = ".track-slider-"+obj.getAttribute("trackindex"); 361 var name = ".track-slider-"+obj.getAttribute("trackindex");
393 $(name).addClass('track-slider-playing'); 362 $(name).addClass('track-slider-playing');
394 $('.comment-div').removeClass('comment-box-playing'); 363 $('.comment-div').removeClass('comment-box-playing');
440 } 409 }
441 410
442 function interfaceSliderHolder(interfaceObject) 411 function interfaceSliderHolder(interfaceObject)
443 { 412 {
444 this.sliders = []; 413 this.sliders = [];
414 this.metrics = [];
445 this.id = document.getElementsByClassName("sliderCanvasDiv").length; 415 this.id = document.getElementsByClassName("sliderCanvasDiv").length;
446 this.name = interfaceObject.name; 416 this.name = interfaceObject.name;
447 this.interfaceObject = interfaceObject; 417 this.interfaceObject = interfaceObject;
448 this.sliderDOM = document.createElement('div'); 418 this.sliderDOM = document.createElement('div');
449 this.sliderDOM.className = 'sliderCanvasDiv'; 419 this.sliderDOM.className = 'sliderCanvasDiv';
465 this.canvas = document.createElement('div'); 435 this.canvas = document.createElement('div');
466 if (this.name != undefined) 436 if (this.name != undefined)
467 this.canvas.id = 'slider-'+this.name; 437 this.canvas.id = 'slider-'+this.name;
468 else 438 else
469 this.canvas.id = 'slider-'+this.id; 439 this.canvas.id = 'slider-'+this.id;
440 this.canvas.setAttribute("interfaceid",this.id);
470 this.canvas.className = 'slider'; 441 this.canvas.className = 'slider';
471 this.canvas.align = "left"; 442 this.canvas.align = "left";
472 this.canvas.addEventListener('dragover',function(event){ 443 this.canvas.addEventListener('dragover',function(event){
473 event.preventDefault(); 444 event.preventDefault();
474 event.dataTransfer.effectAllowed = 'none'; 445 event.dataTransfer.effectAllowed = 'none';
527 w = Math.random()*w; 498 w = Math.random()*w;
528 w = Math.floor(w+(offset+8)); 499 w = Math.floor(w+(offset+8));
529 trackObj.style.left = w+'px'; 500 trackObj.style.left = w+'px';
530 this.canvas.appendChild(trackObj); 501 this.canvas.appendChild(trackObj);
531 this.sliders.push(trackObj); 502 this.sliders.push(trackObj);
503 this.metrics.push(new metricTracker(this));
504 this.metrics[this.metrics.length-1].initialPosition = convSliderPosToRate(trackObj);
532 return trackObj; 505 return trackObj;
533 }; 506 };
534 507
535 this.resize = function(event) 508 this.resize = function(event)
536 { 509 {
678 651
679 function resizeWindow(event){ 652 function resizeWindow(event){
680 // Function called when the window has been resized. 653 // Function called when the window has been resized.
681 // MANDATORY FUNCTION 654 // MANDATORY FUNCTION
682 655
683 // Store the slider marker values 656 // Resize the slider objects
684 for (var i=0; i<interfaceContext.interfaceSliders.length; i++) 657 for (var i=0; i<interfaceContext.interfaceSliders.length; i++)
685 { 658 {
686 interfaceContext.interfaceSliders[i].resize(event); 659 interfaceContext.interfaceSliders[i].resize(event);
687 } 660 }
688 } 661 }
689 662
690 function pageXMLSave(store, testXML) 663 function pageXMLSave(store, testXML)
691 { 664 {
692 // MANDATORY 665 // MANDATORY
693 // Saves a specific test page 666 // Saves a specific test page
694 // You can use this space to add any extra nodes to your XML saves 667 // You can use this space to add any extra nodes to your XML <audioHolder> saves
695 } 668 // Get the current <audioHolder> information in store (remember to appendChild your data to it)
669 var audioelements = store.getElementsByTagName("audioelement");
670 for (var i=0; i<audioelements.length; i++)
671 {
672 // Have to append the metric specific nodes
673 for (var k=0; k<interfaceContext.interfaceSliders.length; k++)
674 {
675 var node = interfaceContext.interfaceSliders[k].metrics[i].exportXMLDOM();
676 node.setAttribute("interface-name",interfaceContext.interfaceSliders[k].name);
677 node.setAttribute("interfaceid",interfaceContext.interfaceSliders[k].id);
678 audioelements[i].appendChild(node);
679 }
680 }
681 }