source: main/trunk/model-sites-dev/multimodal-mdl/collect/salami-ground-truth/script2/hybrid-audio-player.js@ 28433

Last change on this file since 28433 was 28433, checked in by davidb, 11 years ago

Further collections to add to the set

  • Property svn:executable set to *
File size: 5.7 KB
Line 
1
2Element.prototype.getElementWidth = function() {
3 if (typeof this.clip !== "undefined") {
4 return this.clip.width;
5 } else {
6 if (this.style.pixelWidth) {
7 return this.style.pixelWidth;
8 } else {
9 return this.offsetWidth;
10 }
11 }
12};
13
14Element.prototype.getElementHeight = function() {
15 if (typeof this.clip !== "undefined") {
16 return this.clip.height;
17 } else {
18 if (this.style.pixelHeight) {
19 return this.style.pixelHeight;
20 } else {
21 return this.offsetHeight;
22 }
23 }
24};
25
26
27function isDefined(v) {
28 return typeof v !== "undefined";
29}
30
31/* // ***** */
32/* Move above in to more general header file */
33
34
35// Useful shorthands
36var SVG_NS ="http://www.w3.org/2000/svg";
37var XLINK_NS = "http://www.w3.org/1999/xlink";
38
39
40var hasStructuredAudio = false;
41var hasChromaSelfSimMap = false;
42
43var allData = null;
44var yScaleSimImg = null;
45var caAlgorithm = null;
46var duration = null;
47
48var webAudioContext = null;
49//var webAudioSource = null;
50//var webAudioJSProcessor = null;
51
52if (typeof AudioContext == "function") {
53 webAudioContext = new AudioContext();
54} else if (typeof webkitAudioContext == "function") {
55 webAudioContext = new webkitAudioContext();
56}
57
58
59// ******
60// * Frequency Player/Plotter part of Hybrid Player
61// ******
62
63function freqPlayerAudioPlay(event)
64{
65 console.info("Audio play pressed");
66
67 if (audioMode == "stopped") {
68 // Nolonger used (Firefox fails to fire this event on a fresh 'play' once an existing play has finished)
69
70 // take a fresh snapshot of the transform mode selected in the web page
71
72 //var transformMode = $('input:radio[name=visualization]:checked').val();
73 //chromaTransform.setTransformMode(transformMode);
74
75 }
76 audioMode = "playing";
77}
78
79function freqPlayerAudioPause()
80{
81 console.info("Audio pause pressed");
82 audioMode = "paused";
83
84 // if stoping dualPlay
85 leftSong.pause();
86 rightSong.pause();
87 baseSong.volume = 1.0;
88
89}
90
91function freqPlayerAudioEnded()
92{
93 console.info("Audio play/playlist ended");
94
95 audioMode = "stopped";
96 needsRefresh = true;
97
98 //console.log("reset freq plot called");
99 //frequencyPlotter.reset();
100
101}
102
103// ******
104// * Meandre (server-side) workflow part of Hybrid Player
105// ******
106//
107// Started when 'play' is pressed
108
109// (workflows now in their own folder '$httpCollection/script/meandre-workflow/*.js)
110// the global variable 'meandreWorkflows' stores which flows are available
111
112
113
114
115
116// ******
117// * Structured Audio (CAA) part of Hybrid Player
118// ******
119
120function caaInit()
121{
122 // duration information is now available
123 var audio = document.getElementById('rta-audio-element');
124 duration = audio.duration;
125
126 if (!isDefined(allData)) {
127 // degenerate case
128
129 var ground_truth = []; // empty ground truth
130
131 var numSegs = 4;
132 var gap = duration/numSegs;
133
134 var label = [ "a", "b" ];
135 var val = [ 0, 1];
136
137 var equal_spacing = [];
138 for (var i=0; i<numSegs; i++) {
139 equal_spacing.push( {o: i*gap, f: i*gap+gap, l: label[i%2], a: val[i%2] } );
140 }
141
142 allData = [ ground_truth, equal_spacing ];
143
144 caAlgorithm = 1;
145 hasStructuredAudio = true;
146 }
147
148 svgGTStructuredInit();
149 svgCAStructuredInit(caAlgorithm);
150 svgAudioDBInit();
151}
152
153
154allData = gs.documentMetadata["json.data"];
155
156// ****
157
158// The following is actually the XSLT page param
159// 'p.yScaleSimImg;, which presumably automatically generates
160// gs.cgiParams.yScaleSimImg (if present). Defaults to 0.5
161
162yScaleSimImg=gs.variables.cgiargYScaleSimImg || 0.5;
163
164caAlgorithm=gs.variables.cgiargCAAlgorithm;
165
166
167$(function() {
168
169 var audio = document.getElementById('rta-audio-element');
170 audio.addEventListener('loadedmetadata', caaInit, false);
171
172 audio.addEventListener('MozAudioAvailable', freqPlayerAudioAvailable, false);
173 audio.addEventListener('loadedmetadata', freqPlayerLoadedAudioMetadata, false);
174
175 audio.addEventListener('play', freqPlayerAudioPlay, false);
176 audio.addEventListener('pause', freqPlayerAudioPause, false);
177 audio.addEventListener('ended', freqPlayerAudioEnded, false);
178
179
180 console.log("****### Adding dual play loadmetadata event listeners in hybrid-audio-player.js");
181 baseSong = document.getElementById("rta-audio-element");
182 baseSong.addEventListener('loadedmetadata', initPannedPlaybackSampleRate, false);
183
184 leftSong = document.getElementById("leftsong");
185 leftSong.addEventListener('MozAudioAvailable', audioAvailableLeft, false);
186 leftSong.addEventListener('loadedmetadata', loadedMetadataLeft, false);
187
188 rightSong = document.getElementById("rightsong");
189 rightSong.addEventListener('MozAudioAvailable', audioAvailableRight, false);
190 rightSong.addEventListener('loadedmetadata', loadedMetadataRight, false);
191
192
193 var controlMarkerDiv = document.getElementById("controlMarker");
194 controlMarkerDiv.addEventListener('mousedown', playFromOffsetRTAEvent, false);
195
196/*
197 var oControlDiv = controlMarker.previousSibling;
198 console.log("** ocontrol = " + oControlDiv + ", type = " + oControlDiv.nodeType)
199 // skip over any text nodes ... (done this way to cope with browser differences)
200 while (oControlDiv && oControlDiv.nodeType != 1) {
201 oControlDiv = oControlDiv.previousSibling;
202 console.log("** in loop ocontrol = " + oControlDiv + ", type = " + oControlDiv.nodeType)
203 }
204
205 if (oControlDiv) {
206 oControlDiv.setAttribute("onmousedown","javascript:playFromOffsetRTAEvent(event)");
207 //oControlDiv.addEventListener('mousedown', playFromOffsetRTAEvent, false);
208 //oControlDiv.addEventListener('mousedown', playFromOffsetRTAEvent, false);
209 }
210 else {
211 console.warn("Warning: failed to find SoundManager2 PagePlayer oControl div");
212 }
213*/
214
215});
Note: See TracBrowser for help on using the repository browser.