0 votes
in Datenauswertung by s095675 (480 points)

Sehr geehrte Damen und Herren,

für meine Masterarbeit möchte ich Audio Daten von iPhone Nutzerinnen erheben. In einem Testdurchlauf habe ich festgestellt, dass sich mit dem in Sosci Survey enthaltenem Audio Recorder keine Aufzeichnungen via iOS-Safari machen lassen. Das nutzen jedoch 90% aller amerikanischen weiblichen iPhone User.

Daher meine Frage: Gibt es ein alternatives Audio Recorder Plug-In, welches ich in meine Sosci Survey Umfrage einbauen kann?

Haben Sie noch andere Vorschläge? Falls nein, kennen Sie eine alternative Umfragesoftware, die so etwas anbietet?

Beste Grüße

by SoSci Survey (304k points)
Nein, eine konkrete Lösung habe ich im Moment nicht im Angebot (der Bedarf ist bisher einfach zu gering, zumal Audio-Aufnahmen schnell mit DSGVO-Herausforderungen einher gehen) ... aber ich gehe stark davon aus, dass sich in den Weiten des Internet geeignete Lösungen auf Basis von JavaScript finden lassen, die man auch in SoSci Survey integrieren kann.
by s095675 (480 points)
Vielen Dank für die schnelle Antwort. Wo würden diese Daten dann gespeichert werden? Auch auf den Sosci Survey Servern?
by SoSci Survey (304k points)
Wenn Sie den Fragetyp "Dateiinhalte übermitteln" verwenden, wie es bei der Fragevorlage des "Audio-Recorders" der Fall ist, dann ja.
by s095675 (480 points)
Ich habe jetzt einen alternativen Recorder gefunden via Javascript und versucht ihn zu implementieren. Als Vorlage habe ich das Skript des alten Recorders von Soscisurvey übernommen. Leider funktioniert es nicht richtig. Sehen Sie wo das Problem liegt bzw haben eine Lösung?

Das hier ist der Link: https://www.soscisurvey.de/vox/

Das ist die Quelle des alternativen Recorders: https://github.com/ai/audio-recorder-polyfill

Das scheint laut Quelltext die API des alten Players zu sein: https://recordrtc.org/
by SoSci Survey (304k points)
Danke für den Hinweis. Wir haben auf www.soscisurvey.de (bisher nur auf diesem Server!) ein Update und eine neue Vorlage eingespielt (s. Antwort unten).

3 Answers

0 votes
by SoSci Survey (304k points)
edited by SoSci Survey

Danke für den Hinweis auf den audio-recorder-polyfill.

Wir haben die Vorlage für den Audio-Recorder einmal so angepasst, dass er den Polyfill verwendet - zusammen mit dem empfohlenen mp3-Encorder.

Die ersten Tests waren vielversprechend. Bitte legen Sie einmal eine neue Frage auf Basis der Vorlage "Audio-Recorder" an und testen Sie, ob es damit nun auch bei Ihnen auf dem iPhone funktioniert.

0 votes
by s095675 (480 points)

Danke für den Hinweis auf den audio-recorder-polyfill.

Wir haben die Vorlage für den Audio-Recorder einmal so angepasst, dass er den Polyfill verwendet - zusammen mit dem empfohlenen mp3-Encorder.

Die ersten Tests waren vielversprechend. Bitte legen Sie einmal eine neue Frage auf Basis der Vorlage "Audio-Recorder" an und testen Sie, ob es damit nun auch bei Ihnen auf dem iPhone funktioniert.

Vielen Dank, es funktioniert halbwegs: Es gibt zwei kleine Probleme.

Problem 1:

Die Aufnahme funktioniert zwar, aber die Aufnahmen von zwei unterschiedlichen Personen wurden in einer Datei gespeichert. Die Aufnahmen wurden zu folgenden Zeitpunkten angefertigt (Spalte: LASTDATA):

2022-04-26 10:03:20
2022-04-26 10:04:10

.
Weitere Unterschiede in Spalten mit der Reihenfolge:
Spalte; Inhalt von 10:03:20; Inhalt von 10:04:10 ("Keine Angabe" bedeutet leere Zelle in Excel Datei)

CASE; 7; 8
STARTED; 2022-04-26 10:02:38; 2022-04-26 10:03:54
V201; Keine Angabe; 2
V201x02; Keine Angabe; V201.000008.unknown
Time001; 42; 16
LASTDATA; 2022-04-26 10:03:20; 2022-04-26 10:04:10
MISSING; 100; 0
MISSREL; 100; 0
.

Ich habe zuvor zwei Mal auf meinem MacBook via Safari getestet (einmal normal, einmal in den Entwickleroptionen als iPhone Emulation). Da gab es keine Überschneidungen im Audio. Hier die Daten aus der Excel Datei:

CASE; 3; 4
STARTED; 2022-04-26 09:28:40; 2022-04-26 09:29:34
V201; 2; 2
V201x02; V201.000003.unknown; V201.000004.unknown
Time001; 27; 8
LASTDATA; 2022-04-26 10:03:20; 2022-04-26 10:04:10
MISSING; 0; 0
MISSREL; 0; 0

Das sind die einzigen vier Cases. Es wurden nicht mehr durchgeführt. Es gibt zwischen Case 4 und 7 keinen Cases. Warum weiß ich auch nicht.
.
.

Problem 2:

Außerdem – aber das ist das geringere Problem – werden die Dateien im Format ".unknown" abgespeichert. Wenn man das ".unknown" aber durch ".webm" ersetzt, kann man es abspielen.

by SoSci Survey (304k points)
> aber die Aufnahmen von zwei unterschiedlichen Personen wurden in einer Datei gespeichert.

Die Dateinamen sollten eigentlich immer die Fallnummer enthalten. Tun sie das nicht? Wie hießen die Dateien denn? Und welche Fälle (CASE) waren es lt. Datensatz?

> Weitere Unterschiede in Spalten mit der Reihenfolge

Das sieht für mich danach aus, dass in Fall 7 keine Audio-Datei übermittelt wurde - V201 und V201x02 sind beide leer. Das heißt, es wurden keine Daten übertragen. Wahrscheinlich hatte die Person direkt auf "Weiter" geklickt und nicht auf Stop ... das kann ich in der Vorlage noch anpassen.
by s095675 (480 points)
Danke für die schnelle Antwort. Die Cases, um die es sich handelt, haben die Nummer 7 und 8. Den Dateinamen findet man in der Spalte mit dem Titel "V201x02". Die Datei trägt den Titel "V201.000008.unknown". Die Endung der Datei ist ".unknown", welches durch umbenennen in ".webm" abspielbar wird.

Ich wäre Ihnen sehr dankbar, wenn Sie anpassen, dass man nur auf Weiter klicken kann, nachdem man Start und dann wieder Stop geklickt hat. Also man sollte nicht auf die nächste Seite gelangen, wenn man a) keine Aufnahme gestartet hat und b) die gestartete Aufnahme nicht beendet hat. Vielen Dank im Voraus!
by SoSci Survey (304k points)
> Die Endung der Datei ist ".unknown", welches durch umbenennen in ".webm" abspielbar wird.

Ja, das "unknown" konnte ich dem Upload noch nicht austreiben. Ich denke aber, dass die korrekte Endung .mp3 sein müsste.

Wenn Sie das "Weiter" generell erst nach dem "Stop" erlauben möchten, dann rufen Sie im JavaScript-Code einfach SoSciTools.submitButtonsHide() auf - und in den Funktion zum Stoppen dann SoSciTools.submitButtonsDisplay() - dann brauchen Sie nicht auf Anpassungen meinerseits warten.
0 votes
by s095675 (480 points)

Wenn Sie das "Weiter" generell erst nach dem "Stop" erlauben möchten, dann rufen Sie im JavaScript-Code einfach SoSciTools.submitButtonsHide() auf - und in den Funktion zum Stoppen dann SoSciTools.submitButtonsDisplay() - dann brauchen Sie nicht auf Anpassungen meinerseits warten.

Vielen Dank für den Tipp. Ich habe es jetzt mal selbst versucht und es scheint zu funktionieren. Könnten Sie sich bitte kurz den Quellcode anschauen, ob ich das richtig gemacht habe? Änderungen sind unter der Funktion stopRecording und in der drittletzten Zeile.

<!-- Warning -->
<div id="%q.id%NoAudio" class="warning">
  <div class="content">
  Ihr Gerät und/oder Browser unterstützen derzeit keine Tonaufnahme.
  </div>
</div>

<!--[if IE]>
Der Internet Explorer unterstützt diese Aufzeichnung leider nicht.
<![endif]-->

<!-- 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/ai/audio-recorder-polyfill -->
<script src="../plugins/audio-recorder-polyfill/AudioRecorder.min.js"></script>

<script type="text/javascript">
<!--
"use strict";

var buttonStart = document.getElementById("btnStart");
var buttonStop = document.getElementById("btnStop");
var mediaRecorder;
var mediaChunks = [];

function startRecording(button) {
  if (mediaRecorder) {
    mediaRecorder.start();
    buttonStart.disabled = true;
    buttonStop.disabled = false;
  }
}

function stopRecording(button) {
  if (mediaRecorder) {
    mediaRecorder.stop();
    // You may want to change this to allow a new try (replacing the old one)
    buttonStart.disabled = false;
    buttonStop.disabled = true;
    SoSciTools.submitButtonsDisplay()
  }
}

function onStop(audioURL) {
	var recordedBlob = new Blob(mediaChunks, { 'type' : 'audio/mpeg' });
    // Transfer the data
    %q.id%.sendBLOB(recordedBlob);
}

function onStream(stream) {
    mediaRecorder = new AudioRecorder(stream);
	mediaRecorder.addEventListener("stop", onStop);
	mediaRecorder.addEventListener("dataavailable", function(e) {
		mediaChunks.push(e.data);
    });
	// 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) {
        document.getElementById("%q.id%NoAudio").style.display = "";
    }
	
    if (navigator.mediaDevices) {
        navigator.mediaDevices.getUserMedia(mediaConstraints).then(onStream).catch(onError);
        document.getElementById("%q.id%NoAudio").style.display = "none";
    } else {
        onError();
    }
	
    
};

SoSciTools.attachEvent(window, "load", init);
SoSciTools.attachEvent(buttonStart, "click", startRecording);
SoSciTools.attachEvent(buttonStop, "click", stopRecording);
SoSciTools.submitButtonsHide()

// -->
</script>
by SoSci Survey (304k points)
Das sieht gut aus!

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

...