comparison js/core.js @ 2403:52aed03f5db9

Default to using internal decoder for all files. Fallback to WAVE.js for Firefox < 45 for high-bit WAV
author Nicholas Jillings <nicholas.jillings@mail.bcu.ac.uk>
date Fri, 27 May 2016 08:56:54 +0100
parents 5e1fb07919e7
children d44b5e04acbc
comparison
equal deleted inserted replaced
2401:5e1fb07919e7 2403:52aed03f5db9
1268 // Create callback to decode the data asynchronously 1268 // Create callback to decode the data asynchronously
1269 this.xmlRequest.onloadend = function() { 1269 this.xmlRequest.onloadend = function() {
1270 // Use inbuilt WAVE decoder first 1270 // Use inbuilt WAVE decoder first
1271 if (this.status == -1) {return;} 1271 if (this.status == -1) {return;}
1272 var waveObj = new WAVE(); 1272 var waveObj = new WAVE();
1273 if (waveObj.open(bufferObj.xmlRequest.response) == 0) 1273 audioContext.decodeAudioData(bufferObj.xmlRequest.response, function(decodedData) {
1274 {
1275 bufferObj.buffer = audioContext.createBuffer(waveObj.num_channels,waveObj.num_samples,waveObj.sample_rate);
1276 for (var c=0; c<waveObj.num_channels; c++)
1277 {
1278 var buffer_ptr = bufferObj.buffer.getChannelData(c);
1279 for (var n=0; n<waveObj.num_samples; n++)
1280 {
1281 buffer_ptr[n] = waveObj.decoded_data[c][n];
1282 }
1283 }
1284
1285 delete waveObj;
1286 } else {
1287 audioContext.decodeAudioData(bufferObj.xmlRequest.response, function(decodedData) {
1288 bufferObj.buffer = decodedData; 1274 bufferObj.buffer = decodedData;
1289 bufferObj.status = 2; 1275 bufferObj.status = 2;
1290 calculateLoudness(bufferObj,"I"); 1276 calculateLoudness(bufferObj,"I");
1291 }, function(e){ 1277 }, function(e) {
1292 // Should only be called if there was an error, but sometimes gets called continuously 1278 var waveObj = new WAVE();
1293 // Check here if the error is genuine 1279 if (waveObj.open(bufferObj.xmlRequest.response) == 0)
1294 if (bufferObj.xmlRequest.response == undefined) { 1280 {
1295 // Genuine error 1281 bufferObj.buffer = audioContext.createBuffer(waveObj.num_channels,waveObj.num_samples,waveObj.sample_rate);
1296 console.log('FATAL - Error loading buffer on '+audioObj.id); 1282 for (var c=0; c<waveObj.num_channels; c++)
1297 if (request.status == 404) 1283 {
1284 var buffer_ptr = bufferObj.buffer.getChannelData(c);
1285 for (var n=0; n<waveObj.num_samples; n++)
1298 { 1286 {
1299 console.log('FATAL - Fragment '+audioObj.id+' 404 error'); 1287 buffer_ptr[n] = waveObj.decoded_data[c][n];
1300 console.log('URL: '+audioObj.url);
1301 errorSessionDump('Fragment '+audioObj.id+' 404 error');
1302 } 1288 }
1303 this.parent.status = -1;
1304 } 1289 }
1305 }); 1290
1306 } 1291 delete waveObj;
1307 if (bufferObj.buffer != undefined) 1292 }
1308 { 1293 if (bufferObj.buffer != undefined)
1309 bufferObj.status = 2; 1294 {
1310 calculateLoudness(bufferObj,"I"); 1295 bufferObj.status = 2;
1311 } 1296 calculateLoudness(bufferObj,"I");
1297 }
1298 });
1312 }; 1299 };
1313 1300
1314 // Create callback for any error in loading 1301 // Create callback for any error in loading
1315 this.xmlRequest.onerror = function() { 1302 this.xmlRequest.onerror = function() {
1316 this.parent.status = -1; 1303 this.parent.status = -1;