Mercurial > hg > webaudioevaluationtool
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 } |