Damit das automatische Übertragen der Aufzeichnung auch mit Timer funktioniert, ist nur eine kleine Modifikation im JavaScript-Codes des Timers erforderlich:
<div id="remain"></div>
<script type="text/javascript">
<!--
var timer1;
var timer2;
function weiter() {
window.clearTimeout(timer1);
window.clearTimeout(timer2);
var out = document.getElementById("remain");
out.innerHTML = "0:00";
onSubmit();
}
// Countdown anzeigen
var date0 = new Date();
var timeout = date0.getTime() + %remain% * 1000;
function updateCountdown() {
// Zeit berechnen
var date = new Date();
var time = Math.ceil((timeout - date.getTime() - 50) / 1000); // Verbleibende Zeit in Sekunden
// Zeit anzeigen
var out = document.getElementById("remain");
if (!out) {
return;
}
while (out.lastChild) {
out.removeChild(out.lastChild);
}
var minutes = Math.floor(time / 60);
var seconds = String(time - 60 * minutes);
if (seconds.length < 2) seconds = "0" + seconds;
var display = String(minutes) + ":" + seconds;
var displayNode = document.createTextNode(display);
out.appendChild(displayNode);
}
// Initialisierung der Weiterleitung
SoSciTools.attachEvent(window, "load", function(evt) {
// Weiter-Knopf ausblenden (optional)
SoSciTools.submitButtonsHide();
// Zusätzlicher Timer für die Aktualisierung des Countdowns
timer1 = window.setInterval(updateCountdown, 1000);
updateCountdown();
// Timer für automatische Weiterleitung starten
timer2 = window.setTimeout(weiter, %remain% * 1000);
});
// -->
</script>
Hier wurde v.a die Funktion weiter()
geändert, welche zum einen die Timer stoppt (damit die Anzeige nicht ins negative läuft) und zum anderen die Funktion onSubmit()
aufruft, welche wir ja bereits im Audio-Recorder definiert hatten. Diese kümmert sich um Übertragung und Weiterleitung.
Hier der Vollständigkeit halber nochmal der modifizierte Code aus der Audio-Recorder-Frage.
<!-- Buttons -->
<div style="margin: 2em 0 0.5em">
<button id="btnStart" type="button" tabindex="50">START</button>
<button id="btnStop" type="button" tabindex="50">STOP</button>
</div>
<div style="margin: 0.5em 0" id="audioReload">Bitte laden Sie die Seite neu (<a href="javascript:SoSciTools.reloadPage()">Neu Laden</a>) und gestatten Sie der Seite Zugriff auf Ihr Audio-Gerät.</div>
<!-- Audio recorder from https://github.com/muaz-khan/RecordRTC -->
<script src="../plugins/RecordRTC/RecordRTC.min.js"></script>
<script src="../plugins/RecordRTC/gumadapter.js"></script>
<script type="text/javascript">
<!--
"use strict";
if ((webrtcDetectedVersion === null) || (webrtcDetectedVersion < webrtcMinimumVersion)) {
alert("Ihr Browser unterstützt diese Aufnahme leider nicht.");
throw new Error("no audio support");
}
var buttonStart = document.getElementById("btnStart");
var buttonStop = document.getElementById("btnStop");
var recordRTC;
function startRecording(button) {
if (recordRTC) {
recordRTC.startRecording();
buttonStart.disabled = true;
buttonStop.disabled = false;
}
}
function stopRecording(button) {
if (recordRTC) {
recordRTC.stopRecording(onStop);
// You may want to change this to allow a new try (replacing the old one)
buttonStart.disabled = false;
buttonStop.disabled = true;
}
}
function onStop(audioURL) {
var recordedBlob = recordRTC.getBlob();
// Transfer the data
%q.id%.sendBLOB(recordedBlob, onSendDone);
}
function onStream(stream) {
var options = {
mimeType: "audio/ogg",
audioBitsPerSecond: 128000
};
recordRTC = new RecordRTC(stream, options);
// Enable the start button
buttonStart.disabled = false;
// Remove warning
document.getElementById("audioReload").style.display = "none";
}
function init() {
buttonStart.disabled = true;
buttonStop.disabled = true;
var mediaConstraints = {
video: false,
audio: true
};
function onError(error) {
alert("Ihr Computer oder Ihr Browser unterstützt derzeit keine Tonaufnahme." + "\n\n" + error);
}
navigator.mediaDevices.getUserMedia(mediaConstraints).then(onStream).catch(onError);
};
SoSciTools.attachEvent(window, "load", init);
SoSciTools.attachEvent(buttonStart, "click", startRecording);
SoSciTools.attachEvent(buttonStop, "click", stopRecording);
var audioSent = false;
function onSubmit() {
console.log("OnSubmit");
// Check if already sent
if (!audioSent) {
stopRecording();
return false;
} else {
return true;
}
}
function onSendDone() {
audioSent = true;
SoSciTools.submitPage();
}
SoSciTools.questionnaire.attachCheck(onSubmit);
// -->
</script>