0 votes
in SoSci Survey (dt.) by s115721 (135 points)

Hallo,

ich probiere mal mein Problem so kurz und verständlich wie möglich darzustellen.

Ich arbeite in meinem Fragebogen mit Audiodateien von Vögeln. Dabei habe ich 6 Vogelarten und zu jeder dieser Art 6 Audiodateien seines Gesangs rausgesucht.

Also innerhalb einer Versuchsperson und pro Durchgang soll die Reihenfolge der Vögel die gleiche sein. Ein Durchgang heißt, dass von allen Vogelarten eine Audiodatei gehört wurde (also zum Beispiel Amsel, Meise, Finke, Ammer, Grasmückenartige, Schwalbe). Im nächsten Durchgang sollen die Vögel nun wieder in genau der gleichen Reihenfolge durchlaufen werden, nur mit anderen Hörbeispielen zu dieser Art.

So und damit es noch komplizierter wird, aber auch keine Reihenfolgeeffekte entstehen, soll nun zwischen den Probanden die Reihenfolge der Vögel ausbalanciert werden. Also statt der Reihenfolge oben, soll nun zufällig eine andere Reihenfolge gewählt werden, die aber über die Durchgänge des Probanden beibehalten werden soll.

Kann SoSci Survey das?

Vielen Dank im Voraus!!!!

1 Answer

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

Fangen wir mal mit der Reihenfolge der Vogelarten an ... am einfachsten machen Sie das, indem Sie die Seitenabfolge mischen, vgl. setPageOrder()

Nun ist die Frage, ob es Ihnen wichtig ist, dass alle Kominationen aller Audio-Files (6 hoch 6 = sehr viele) getestet werden sollen (oder eine systematische Auswahl daraus, vgl. lateinisches Quadrat) oder ob es Ihnen ausreicht, das zufällig/unabhängig zu mischen. Vorsicht: Bei zufälliger Mischung kann es passieren (unwahrscheinlich aber möglich), dass die erste Amsel-Datei immer zusammen mit der ersten Finken-Datei präsentiert wird.

Wenn Sie unabhängig mischen möchten, dann legen Sie einfach pro Vogen einen Zufallsgenerator an und spielen die gezogene Datei ab.

Update

Wie unten in den Kommentaren zu entnehmen, bezog sich die obige Antwort auf die Präsentation von einer Audio-Datei pro Teilnehmer und Vorgelart. Tatsächlich sollten aber alle Audio-Dateien für jeden Teilnehmer abgespielt werden.

Hier nochmals der vollständige PHP-Code dafür inkl. Mischen der Audiodateien - aber so, dass die Reihenfolge der Vogelarten bei allen Durchgängen eines Interviews gleich bleibt.

function shuffle_assoc($list) { 
  if (!is_array($list)) return $list; 

  $keys = array_keys($list); 
  shuffle($keys); 
  $random = array(); 
  foreach ($keys as $key) { 
    $random[$key] = $list[$key]; 
  }
  return $random; 
} 


$audio = array(
  'Stieglitz' => array(
    'Stieglitz-1.mp3' => 'A01',
    'Stieglitz-2.mp3' => 'A02',
    'Stieglitz-3.mp3' => 'A03',
    'Stieglitz-4.mp3' => 'A04',
    'Stieglitz-5.mp3' => 'A05',
    'Stieglitz-6.mp3' => 'A06'
    // u.s.w.
  ),
  'Meise' => array(
    'Meise-1.mp3' => 'B01',
    'Meise-2.mp3' => 'B02',
    'Meise-3.mp3' => 'B03',
    'Meise-4.mp3' => 'B04',
    'Meise-5.mp3' => 'B05',
    'Meise-6.mp3' => 'B06'
    // u.s.w.
  ),
  'Schwalbe' => array(
    'Schwalbe-1.mp3' => 'C01',
    'Schwalbe-2.mp3' => 'C02',
    'Schwalbe-3.mp3' => 'C03',
    'Schwalbe-4.mp3' => 'C04',
    'Schwalbe-5.mp3' => 'C05',
    'Schwalbe-6.mp3' => 'C06'
  // u.s.w.
  ),
  'Ammer' => array(
    'Ammer-1.mp3' => 'D01',
    'Ammer-2.mp3' => 'D02',
    'Ammer-3.mp3' => 'D03',
    'Ammer-4.mp3' => 'D04',
    'Ammer-5.mp3' => 'D05',
    'Ammer-6.mp3' => 'D06'
  ),
  'Buschrohrsaenger' => array(
    'Buschrohrsaenger-1.mp3' => 'E01',
    'Buschrohrsaenger-2.mp3' => 'E02',
    'Buschrohrsaenger-3.mp3' => 'E03',
    'Buschrohrsaenger-4.mp3' => 'E04',
    'Buschrohrsaenger-5.mp3' => 'E05',
    'Buschrohrsaenger-6.mp3' => 'E06'
  ),
  'Amsel' => array(
    'Amsel-1.mp3' => 'F01',
    'Amsel-2.mp3' => 'F02',
    'Amsel-3.mp3' => 'F03',
    'Amsel-4.mp3' => 'F04',
    'Amsel-5.mp3' => 'F05',
    'Amsel-6.mp3' => 'F06',
  ),
);

if (!isset($mixed)) {    
  foreach (array_keys($audio) as $key) {
    $audio[$key] = shuffle_assoc($audio[$key]);
  }
  $mixed = shuffle_assoc($audio);
  registerVariable($mixed);
}


$i = loopPage(36);
$roundNo = (int)floor($i / 6);
$vogelNo = $i - 6 * $roundNo;
$vogelKeys = array_keys($mixed);
$vogelKey = $vogelKeys[$vogelNo];
$vogel = $mixed[$vogelKey];  // Liste der Audiodateien pro Vogel
$audioKeys = array_keys($vogel);
$audioFile = $audioKeys[$roundNo];

html('<h1>'.$audioFile.'</h1>');

html('
  <div style="margin: 3em; text-align: center">
    <audio controls src="'.$audioFile.'" alt="" />
  </div>
');
by s115721 (135 points)
Es funktioniert *-*

Nur noch eine kleine Sache, wie kann ich in den Code einbauen, dass er, nachdem er komplett abgespielt wurde, auf der Seite mit der Kennung 'DS' weiter macht? Denn jetzt fängt er danach bei den Seiten mit den Audiodateien an.

Am liebsten würde ich Ihnen ein virtuelles Bier, Kaffee, Wasser, etc. ausgeben!
by SoSci Survey (328k points)
Löschen Sie einfach alle Seiten mit Audiodateien. Zum Abspielen benötigen Sie ausschließlich, nur und alleine diese eine Seite.

Und danke für das virtuelle Getränk :)
by s115721 (135 points)
Ah okay!
Jetzt funktioniert alles einwandfrei!!!
Vielen lieben Dank (kann ich gar nicht oft genug schreiben :D)
by s115721 (135 points)
Okay Sie sind mich anscheinend doch noch nicht ganz los...
Könnte man bei meinem html Code noch einbauen, dass eine Audiodatei nur einmal angehört werden kann:

html('<h1>'.$audioFile.'</h1>');

html('
  <div style="margin: 3em; text-align: center">
    <audio id="audio_with_controls" preload="auto" autoplay controls src="'.$audioFile.'" alt="" />
 </div>
');

Habe bisher nur Antworten mit diesem "var" gesehen und das darf man im PHP-Code ja irgendwie nicht verwenden....
by SoSci Survey (328k points)
Das "einmal" ist so eine Sache. Auf der ersten Stufe kann man die Kontrollelemente des <audio>-Elements weglassen - dann kann der Teilnehmer die Datei nur einmalig starten. Das hatte wir kürzlich in einem anderen Thread: https://support.soscisurvey.de/?qa=11369/videoeinbettung

Dann kann der Teilnehmer die Seite aber mit F5 einfach neu laden. Um das zu umgehen, könnte man mit getRoute() arbeiten und das Audio-Element per PHP-Filter nur dann einbetten, wenn getRoute() den Wert "next" liefert.

Dann kann der Teilnehmer die Audio-Datei aber immer noch über den Browser-Cache auslesen. Ganz wird man das nicht verhindern können, aber wenn ein Teilnehmer so weit geht, dann ist mit den Daten auch an anderer Stelle etwas im Argen :)

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

...