0 votes
in SoSci Survey (dt.) by s098891 (355 points)
edited by SoSci Survey

Ist es möglich, dass eine Tonaufnahme automatisch gestartet wird, sobald man auf die jeweilige Seite kommt, und ohne, dass Teilnehmer auf START/STOP klicken müssen?

Das ist der HTML Code, den ich verwende:

<!-- 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);
}

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);

// -->
</script>

1 Answer

0 votes
by SoSci Survey (306k points)

Damit man überhaupt an den Ton kommt, muss der Teilnehmer im Browser ja erstmal die Erlaubnis erteilen. Diesen Schritt darf man im Ablauf nicht vergessen.

Aber im Prinzip ist es kein Problem, gleich den "Start" Knopf zu drücken. Dafür würden Sie am Ende des Codes noch ergänzen:

window.addEventListener("load", startRecording);
by s098891 (355 points)
Danke für die Hilfe - leider macht dieser Zusatz keinen Unterschied, man muss trotzdem auf Start/Stop klicken. Ich hab den Zusatz ganz am Ende, vor // -->
</script> eingefügt. Die Erlaubnis musste ich dem Browser nur einmal erteilen, wie ich den Fragebogen das erste mal ausprobiert habe.
by SoSci Survey (306k points)
Was sagt denn die JavaScript Fehlerkonsole?
by s098891 (355 points)
Nichts, was ich deuten kann:

6SoSciTools.min.js?i=1276:87 undefined
QuestionTransfer.min.js?i=1268:4 No case token set to use transfer on.
gumadapter.js:31 spec:   {"video":false,"audio":true}
gumadapter.js:31 chrome: {"video":false,"audio":true}
2SoSciTools.min.js?i=1276:87 undefined
by SoSci Survey (306k points)
Das "No case token set to use transfer on." sollte eigentlich nur dann erscheinen, wenn Sie die Frage in der Vorschau aufrufen und nicht im Fragebogen. Sie können hier gerne auch einen Pretest-Link direkt (!) zur betroffenen Seite senden, wenn Sie möchten.
by s098891 (355 points)
Das stimmt.

Hier ist der Link: https://www.soscisurvey.de/speaking/index.php?l=deu&q=base&htR=AwA%3D

Falls der nicht funktioniert: www.soscisurvey.de/speaking --> auf die deutsche Flagge klicken und die Seite ist da
by SoSci Survey (306k points)
Einen Pretest-Link kann man unter Befragungsprojekt -> Pretest erstellen.

Ich habe den Fragebogen jetrzt aufgerufen, werde aber beim Audio-Recorder nach einer Sekunde bereits zur nächsten Seite geleitet.
by s098891 (355 points)
Sorry, hab den Timer jetzt auf 15 sekunden gestellt. Hier der pre-test link direkt zur betroffenen Seite:

https://www.soscisurvey.de/speaking/index.php?l=deu&q=base&act=WjW1h4Ymbt6fwMz2aiCjdduP&htR=AwA%3D

Falls der erste Link wieder nicht geht - hier der pre-test Link zur ersten Seite (betroffen ist die 2. und 3., direkt nach Angabe von "deutsch"): https://www.soscisurvey.de/speaking/?act=WjW1h4Ymbt6fwMz2aiCjdduP
by SoSci Survey (306k points)
edited by SoSci Survey
Hmm ... offenbar braucht der Fragebogen ein wenig Zeit. Vorbehaltlich der Gefahr, dass ein Teilnehmer bei der Frage nach dem Mikrofon nicht auf "Entscheidung merken" geklickt hat, versuchen Sie bitte einmal folgendes:

window.addEventListener("load", function() {
  window.setTimeout(startRecording, 2000);
});

Wenn die Aufnahme dann nach 2 Sekunden startet, können wir darauf aufbauen :)
by s098891 (355 points)
Hab ich jetzt zusätzlich eingefügt, aber leider beginnt die Aufnahme nicht automatisch, oder zumindest sieht es so aus:
https://www.soscisurvey.de/speaking/index.php?l=deu&q=base&act=WjW1h4Ymbt6fwMz2aiCjdduP&htR=AwA%3D
by s098891 (355 points)
Es geht darum, dass TeilnehmerInnen nur eine gewisse Zeit haben sollen, um einen Satz wiederzugeben, und da jeder Teilnehmer unterschiedlich viel Zeit benötigt, auf Start zu klicken, um die Tonaufnahme zu starten, hat nicht jeder gleich viel Zeit für die Reproduktion des Satzes. Wäre es alternativ möglich, den Countdown erst nach Klicken von Start einzusetzen? Aber das wäre wohl noch komplizierter...
by SoSci Survey (306k points)
Ich hatte einen Rechtschreibfehler im Code, es ist nicht setTimout(), sondern natürlich setTimeout().
by s098891 (355 points)
Juhu, es funktioniert, vielen Dank!
by SoSci Survey (306k points)
Testen Sie bitte auf jeden Fall, ob es auch funktioniert, wenn der Teilnehmer die Berechtigung zum Aufnehmen nicht dauerhaft für die Seite setzt. Das kann im Interview ja durchaus passieren.

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...