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)
Vielen lieben Dank für Ihre schnelle Antwort!

Kann ich denn bei dem setPageOrder() einen loop einbauen, damit die Seitenreihenfolge dann immer wieder so wiederholt wird?

Und ja, die Idee mit dem Zufallsgenerator würde gehen. Also es ist eig relativ egal wann welche Audio abgespielt wird, so lange sie durch gemischt sind :)
by SoSci Survey (328k points)
> Kann ich denn bei dem setPageOrder() einen loop einbauen, damit die Seitenreihenfolge dann immer wieder so wiederholt wird?

Nein, aber das benötigen Sie auch gar nicht. Bei setPageOrder() geben sie die komplette Abfolge inkl. eventueller Wiederholungen an. Allerdings würde ich in Ihrem Fall tatsächlich zu einer Seite (oder einer Seitengruppe) pro Vogelart raten. Alterantiv können Sie das Ganze über loopToPage() lösen. Nur kombinieren können Sie die beiden Funktionen nicht.
by s115721 (135 points)
Okay, ich probiere das Problem jetzt mit setPageOrder() zu lösen!
Könnten Sie mir vielleicht noch erklären, was ich in diesem Php Code ergänzen muss, damit es zu einer Wiederholung der Seiten kommt:

if (!isset($seiten)) {
  $seiten = array('A', 'B', 'C','D','E','F');
  shuffle($seiten);
  $seiten[] = 'DS';
  registerVariable($seiten);
}
setPageOrder($seiten);
by SoSci Survey (328k points)
Nur damit ich den Ablauf korrekt verstehe: Haben Sie tatsächlich 6 Seiten pro Vogelart? In dem Fall könnte eine Lösung über loopToPage() deutlich eleganter sein.
by s115721 (135 points)
Ja, ich habe pro Vogelart jetzt eine Seite (also 6). Zusätzlich dann auf jeder dieser Seiten einen Zufallsgenerator, damit eine der 6 Audiodateien eines Vogels zufällig ausgewählt wird (falls diese Info überhaupt wichtig ist).
by SoSci Survey (328k points)
Ich befürchte, ich hatte die ursprüngliche Frage nicht korrekt verstanden.

Nochmal zur Klärung: Wie viele Hörbeispiele haben Sie pro Vogelart und wie viele davon (pro Vogelart) soll jeder Teilnehmer zu hören bekommen?
by s115721 (135 points)
Also es gibt 6 Hörbeispiele pro Art und jeder Proband soll am Besten jede Audiodatei zu hören bekommen (falls der Zufallsgenerator dann doch mal zwei gleiche auswählt wäre das jetzt auch nicht dramatisch).
by s115721 (135 points)
Und wenn jetzt der erste Proband die Reihenfolge Amsel, Meise, Finke, Ammer, Grasmückenartige, Schwalbe zu gelost bekommen hat, dann soll er diese Reihenfolge 6 mal durch laufen, bis er alle Hörbeispiele gehört hat.
Der nächste Proband soll dann aber eine andere Reihenfolge zu gelost bekommen, also zum Beispiel Meise, Ammer, Finke, Grasmückenartige, Amsel, Schwalbe und diese Reihenfolge dann auch sechs mal durch laufen bis dazu alle Audiodateien gehört wurden.
by SoSci Survey (328k points)
> jeder Proband soll am Besten jede Audiodatei zu hören bekommen

Okay ... dann machen wir es ganz anders. Ich war bisher davon ausgegangen, dass pro Teilnehmer und Vogelart nur ein Hörbeispiel verwendet werden soll.

Also, neuer Plan: Sie erstellen eine Liste mit allen Vogelarten und Audio-Dateien, z.B.

$audio = array(
  'amsel' => array(
    'amsel1.mp3' => 'AB01',
    'amsel2.mp3' => 'AB02',
    // u.s.w.
  ),
  'fink' => array(
    'fink1.mp3' => 'AB03',
    'fink2.mp3' => 'AB04',
    // u.s.w.
  ),
  // u.s.w.
);

In dieser Liste sind auch Frage-Kennungen enthalten - denn Sie möchten ja zu jeder Audio-Datei eine Frage stellen, oder?

Anschließend mischen Sie das Array auf beiden Ebenen (vgl. https://www.soscisurvey.de/help/doku.php/de:create:rotation#rotation_und_mischen_von_bloecken) und dann sorgen wir dafür, dass das alles einfach der Reihe nach abgearbeitet wird. Dafür reicht dann auch eine Seite, die 36-mal wiederholt wird :)

Oh - das Mischen könnte ein wenig komplizierter werden als im genannten Beispiel, denn die Zuordnung zu den Fragen soll ja beibehalten werden. Hier eine angepasste shuffle()-Funktion: https://stackoverflow.com/a/4102803/336311
by s115721 (135 points)
So ich habe jetzt einiges rumprobiert.... Habe es jetzt mir diesem PHP Code Probiert:

$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($blocks)) {
  // Liste der Seiten definieren
  $blocks = array(
    // Block 1
    array('A01','A02','A03','A04','A05','A06'),
    // Block 2
    array('B01','B02','B03','B04','B05','B06'),
    // Block 3
    array('C01','C02','C03','C04','C05','C06'),
    //Block 4
    array('D01','D02','D03','D04','D05','D06'),
    //Block 5
    array('E01','E02','E03','E04','E05','E06'),
    //Block 6
    array('F01','F02','F03','F04','F05','F06')

  );
  // Jeden einzelnen Block in sich mischen
  for ($i=0; $i<count($blocks); $i++) {
    shuffle($blocks[$i]);
  }
  // Liste der Blöcke mischen
  shuffle($blocks);
  // Die Seite ergänzen, wo es nachher weiter geht
  $blocks[] = 'DS';
  // Reihenfolge zwischenspeichern, um spätere Änderung zu vermeiden
  registerVariable($blocks);
}
setPageOrder($blocks);


Dann zeigt SoSci Survey aber einfach alle Audiodateien eines Vogels nach einander an... Das gleiche passiert auch, wenn ich den php Code aus stackoverflow rein kopiere....
by SoSci Survey (328k points)
>  // Liste der Seiten definieren

Da habe ich mich zu unspezifisch ausgedrückt. Eine neue Liste brauchen Sie nicht definieren - Sie verwenden die vorher definierte Liste der Audio-Dateien und mischen diese erstmal.

setPageOrder() kommt dann am Ende gar nicht mehr zum Einsatz, sondern z.B. folgender Code (diesen können Sie unter der Liste mit den Audiodateien auch mal ohne vorheriges Mischen ausprobieren).

$i = loopPage(36);
$roundNo = (int)floor($i / 6);
$vogelNo = $i - 6 * $round;
$vogelKeys = array_keys($audio);
$vogel = $vogelKeys[$vogelNo];
$audioKeys = array_keys($vogel);
$audioKey = $audioKeys[$roundNo];
$audioFile = $vogel[$audioKey];

replace('%audiofile%', $audioFile);
text('audioplayer');
question($audioKey);

Zugegeben, auf den ersten Blick ist das ein wenig anspruchsvoll - aber eigentlich gehen Sie nur nacheinander alle Audio-Dateien aller Vogelarten durch. Der Textbaustein "audioplayer" muss der HTML-Code für das Abspielen einer Audio-Datei sein und statt dem Dateinamen steht dort der Platzhalter %audiofile%.
by s115721 (135 points)
Mhm, jetzt steige ich leider langsam nicht mehr durch...
Habe keine Fragen in diesem Teil des Fragebogens, also die Audiodateien sollen nur angehört werden. Dann kann ich den letzte Teil mit --> question($audioKey); doch raus lassen oder?

So habe den Teil jetzt so eingefügt, da es direkt darunter leider nicht funktioniert:

$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($blocks)) {
  // Liste der Seiten definieren
  $blocks = array(
  // Jeden einzelnen Block in sich mischen
  for ($i=0; $i<count($blocks); $i++)) {
    shuffle($blocks[$i]);
 }
  // Liste der Blöcke mischen
  shuffle($blocks);
  // Die Seite ergänzen, wo es nachher weiter geht
  $blocks[] = 'DS';
  // Reihenfolge zwischenspeichern, um spätere Änderung zu vermeiden
  registerVariable($blocks);
}

  $i = loopPage(36);
$roundNo = (int)floor($i / 6);
$vogelNo = $i - 6 * $roundNo;
$vogelKeys = array_keys($audio);
$vogel = $vogelKeys[$vogelNo];
$audioKeys = array_keys($vogel);
$audioKey = $audioKeys[$roundNo];
$audioFile = $vogel[$audioKey];

replace('%audiofile%', $audioFile);
html('<div style="margin: 3em; text-align: center">
 <audio controls src="'.$audio.'" alt="" />
  </div>');

Jetzt kommt als Fehlermeldung für Zeile 68 (das ist nach //Listen der Seiten definieren):

Im PHP-Code trat ein Fehler auf.

Fehler im Fragebogen: Befehl oder String (Text) nicht abgeschlossen

    Hinter einem Befehl wie z.B. question() steht kein Strichpunkt oder
    ein String (Text in Anführungszeichen) ist nicht abgeschlossen oder
    im String selbst kommt ein Anführungszeichen vor, z.B. html('Mach's besser!'); – in diesem Fall stellen Sie dem Anführungszeichen einen Backslash (\) voran.
    Möglicherweise stimmen die öffnenenden und schließenden geschweiften Klammern für Anweisungsblöcke auch nicht überein.

Was muss ich verändern?

Und vielen Dank, dass Sie mir so viel helfen!!!
by SoSci Survey (328k points)
> Dann kann ich den letzte Teil mit --> question($audioKey); doch raus lassen oder?

Ja.

> Was muss ich verändern?

Lassen Sie den Teil mit dem shuffle() erstmal weg. Darum kümmern wir uns, wenn das "abspielen" funktioniert.

Und hier müssten Sie $audio noch durch $audioFile ersetzen:

 <audio controls src="'.$audioFile.'" alt="" />

Was sagt SoSci Survey dann?
by s115721 (135 points)
Dann kommt diese Fehlermeldung:

Fehler im Fragebogen: array_keys() expects parameter 1 to be array, string given
Zeile: 62

PHP-Code

059 $vogelNo = $i - 6 * $roundNo;
060 $vogelKeys = array_keys($audio);
061 $vogel = $vogelKeys[$vogelNo];
062 $audioKeys = array_keys($vogel);
063 $audioKey = $audioKeys[$roundNo];
064 $audioFile = $vogel[$audioKey];
065

Fehler im Fragebogen: String offset cast occurred
Zeile: 64

PHP-Code

061 $vogel = $vogelKeys[$vogelNo];
062 $audioKeys = array_keys($vogel);
063 $audioKey = $audioKeys[$roundNo];
064 $audioFile = $vogel[$audioKey];
065
066 replace('%audiofile%', $audioFile);
067 html('<div style="margin: 3em; text-align: center">
by SoSci Survey (328k points)
Kann es sein, dass Sie die Variable $audio irgendwo überschreiben? Wenn Sie nur den PHP-Code von oben verwenden, handelt es sich dabei um ein Array. Aber meine Vermutung wäre, dass Sie noch weiteren PHP-Code zwischen dem $audio=array( und der Zeile mit dem Fehler haben?
by s115721 (135 points)
Nein, eigentlich fällt der Begriff Audio nur einmal am Anfang und dann wieder in Zeile 60. Also eigentlich kann er nicht überschrieben wurden sein oder?
by SoSci Survey (328k points)
Okay, dann ist diese Zeile hier falsch ...

$audioKeys = array_keys($vogel);

Es müsste heißen:

$vogelKeys = array_keys($audio);
$vogelKey = $vogelKeys[$vogelNo];
$vogel = $audio[$vogelKey];
$audioKeys = array_keys($audio);
$audioKey = $audioKeys[$roundNo];
$audioFile = $vogel[$audioKey];
by s115721 (135 points)
Also jetzt ist es nur noch ein Fehlercode der erscheint (Stieglitz ist einer der Vogel Arten) :



Fehler im Fragebogen: Illegal string offset 'Stieglitz'
Zeile: 64

PHP-Code

061 $vogel = $vogelKeys[$vogelNo];
062 $audioKeys = array_keys($audio);
063 $audioKey = $audioKeys[$roundNo];
064 $audioFile = $vogel[$audioKey];
065
066 replace('%audiofile%', $audioFile);
067 html('<div style="margin: 3em; text-align: center">
by SoSci Survey (328k points)
Dann brauchen wir noch den $vogelKey, hier nochmal der Code.

$i = loopPage(36);
$roundNo = (int)floor($i / 6);
$vogelNo = $i - 6 * $roundNo;
$vogelKeys = array_keys($audio);
$vogelKey = $vogelKeys[$vogelNo];
$vogel = $audio[$vogelKey];  // Liste der Audiodateien pro Vogel
$audioKeys = array_keys($vogel);
$audioFile = $audioKeys[$roundNo];
by s115721 (135 points)
Also muss ich jetzt irgendwo noch die Arrays der Vögel eingeben? Der Fehlercode steht da leider immer noch...
by SoSci Survey (328k points)
> Also muss ich jetzt irgendwo noch die Arrays der Vögel eingeben?

Über diesem Code sollte noch die längliche Definition der Audiodateien ($audio) inkl. Vogelarten stehen. Diese habe ich aufgrund der Länge nicht in den Kommentar geschrieben.
by s115721 (135 points)
Also das was ich weiter oben schon mal in die Kommentare geschickt habe? Ja das steht noch darüber.
by SoSci Survey (328k points)
Ich habe den kompletten Code (unten nochmal zur Ansicht) als (einzigen) Inhalt auf eine Seite eines Test-Fragebogens gestellt, es funktioniert und ich erhalte keine Fehlermeldungen:


$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',
  ),
);


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

html('<h1>'.$audioFile.'</h1>');
by SoSci Survey (328k points)
Das Mischen fehlt im Moment freilich noch.
by SoSci Survey (328k points)
Oben in der Antwort habe ich den PHP-Code auch nochmal mit Mischen der Audiodateien ergänzt.
by s115721 (135 points)
Vielen Dank, werde ich gleich ausprobieren!

Ich habe bei der html Datei noch das ergänzt:

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

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

Da bei Ihrem Code leider nur der Titel der mp3 Datei angezeigt wurde, nicht aber die mp3 Datei zum Abspielen. Das funktioniert jetzt aber dadurch!
by s115721 (135 points)
So jetzt mischen sich die einzelnen Audiodateien der Vögel, aber die Reihenfolge der Vögle ist für jeden Probande immer die gleiche oder? Können wir das vllt auch noch mischen,dass jeder Proband eine andere Reihenfolge der Vögel hat?
by SoSci Survey (328k points)
Ah, noch ein kleiner Fehler. Es müsste heißen

$audio = shuffle_assoc($audio);

Oben habe ich das bereits korrigiert.
by s115721 (135 points)
Also ich habe den Code jetzt ausprobiert, es ist jetzt leider aber komplett randomisert und keine Reihenfolge... Woran könnnte das liegen?

Und ich glaube man muss noch irgendwo in dem Code vermerken auf welcher Seite man am Ende weiter machen soll? Denke mit diesme Befehl, weiß aber nicht wo ich den einbauen soll: $seiten[] = 'DS';
by SoSci Survey (328k points)
Mei ... mit Ihrer Frage habe ich diesmal wahrlich kein gutes Händchen. Es fehlte noch ein isset() damit die Liste nicht immer wieder neu gemischt wird. Neuer Versuch, der Code oben in der Antwort ist aktualisiert.
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

...