{{#js}}
require(['jquery', 'filter_poodll/mediaparser','/filter/poodll/amd/src/poodll_mediarecorder.js'], function($, parser,pmr) {
var app = {
audioInterval: {
interval: null,
currentTime: 0,
paused: false,
start: function() {
app.audioInterval.interval = setInterval(function() {
app.audioInterval.update();
}, 100);
},
pause: function() {
clearInterval(app.audioInterval.interval);
},
stop: function() {
clearInterval(app.audioInterval.interval);
app.audioInterval.currentTime = 0;
},
update: function() {
app.audioInterval.currentTime += 100;
var duration = app.audioBuffer.duration * 1000;
var currentTime = app.audioInterval.currentTime;
var percent = Math.round((currentTime / duration) * 100);
$('#{{AUTOID}}_progress_circle').attr('class', 'progress-circle');
if (percent > 50) {
$("#{{AUTOID}}_progress_circle").addClass("over50");
}
$("#{{AUTOID}}_progress_circle").addClass("p" + percent);
}
},
audioData:null,
audioStarted: false,
audioBuffer: null,
audioContext: null,
audioSource: null,
details: parser.parse('{{AUTOID}}_original', 'audio'),
loadAudio: function() {
app.audioContext = new AudioContext();
app.audioContext.onstatechange = function() {
console.log(app.audioContext.state);
}
var request = new XMLHttpRequest();
console.log("getting audio..");
request.addEventListener('load', function() {
if (request.status < 400) {
console.log("got audio");
app.audioData = request.response;
console.log("getting audio buffer");
app.audioContext.decodeAudioData(app.audioData, function(audioBuffer) {
console.log("got audio buffer");
app.audioBuffer = audioBuffer;
app.initAudio();
},function(error){
$("#{{AUTOID}}_play-btn").html('');
console.log("error getting audio buffer");
});
}
else {
$("#{{AUTOID}}_play-btn").html('');
console.log("error getting audio file");
}
});
request.open('GET', app.details.mediaurl);
request.responseType = 'arraybuffer';
request.send();
},
initAudio: function(buffer) {
$("#{{AUTOID}}_mini_player").removeClass("mini_player_loading");
$("#{{AUTOID}}_play-btn").on("click keypress", function() {
if (!app.audioStarted) {
if (app.audioSource) {
app.audioSource.disconnect();
}
app.audioSource = app.audioContext.createBufferSource();
app.audioSource.buffer = app.audioBuffer;
app.audioSource.connect(app.audioContext.destination);
app.audioSource.onended = function() {
app.audioInterval.stop();
app.audioStarted = false;
$('#{{AUTOID}}_progress_circle').attr('class', 'progress-circle');
$("#{{AUTOID}}_play-btn").html('');
}
app.audioInterval.start();
app.audioSource.start();
app.audioStarted = true;
$("#{{AUTOID}}_play-btn").html('');
}
else {
if (app.audioContext.state === 'running') {
app.audioContext.suspend().then(function() {
app.audioInterval.pause();
$("#{{AUTOID}}_play-btn").html('');
});
}
else if (app.audioContext.state === 'suspended') {
app.audioContext.resume().then(function() {
app.audioInterval.start();
$("#{{AUTOID}}_play-btn").html('');
});
}
}
});
},
do_embed: function() {
//just once trigger the permissions dialog, if needed
if(!('filter_poodll_navigator_checked' in window)){
window.filter_poodll_navigator_checked=true;
navigator.mediaDevices.getUserMedia({"audio": true});
}
var params=[];
params['widgetid'] = @@AUTOID@@;
params['media_timeinterval'] = 2000;
params['media_audiomimetype'] = 'audio/webm';//or audio/wav
params['media_videorecordertype'] = 'auto';//or mediarec or webp
params['media_videocapturewidth'] = 320;
params['media_videocaptureheight'] = 240;
params['mediatype'] = 'audio';
params['media_skin'] = 'shadow';
params['media_skin_style'] = 'none';
params['timelimit'] =0;
params['hideupload'] =true;
params['resource'] =@@VIDEOURL@@;
var pmr= requiredjs_shadow;
pmr.embed('#' + @@AUTOID@@,params);
},
init: function() {
window.AudioContext = window.AudioContext || window.webkitAudioContext;
app.loadAudio();
}
};
app.init();
//
});
{{/js}}