1 |
|
---|
2 | Element.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 |
|
---|
14 | Element.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 |
|
---|
27 | function isDefined(v) {
|
---|
28 | return typeof v !== "undefined";
|
---|
29 | }
|
---|
30 |
|
---|
31 | /* // ***** */
|
---|
32 | /* Move above in to more general header file */
|
---|
33 |
|
---|
34 |
|
---|
35 | // Useful shorthands
|
---|
36 | var SVG_NS ="http://www.w3.org/2000/svg";
|
---|
37 | var XLINK_NS = "http://www.w3.org/1999/xlink";
|
---|
38 |
|
---|
39 |
|
---|
40 | var hasStructuredAudio = false;
|
---|
41 | var hasChromaSelfSimMap = false;
|
---|
42 |
|
---|
43 | var allData = null;
|
---|
44 | var yScaleSimImg = null;
|
---|
45 | var caAlgorithm = null;
|
---|
46 | var duration = null;
|
---|
47 |
|
---|
48 | var webAudioContext = null;
|
---|
49 | //var webAudioSource = null;
|
---|
50 | //var webAudioJSProcessor = null;
|
---|
51 |
|
---|
52 | if (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 |
|
---|
63 | function 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 |
|
---|
79 | function 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 |
|
---|
91 | function 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 |
|
---|
120 | function 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 |
|
---|
154 | allData = 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 |
|
---|
162 | yScaleSimImg=gs.variables.cgiargYScaleSimImg || 0.5;
|
---|
163 |
|
---|
164 | caAlgorithm=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 | });
|
---|