Goto: [ Program Documentation ]

//
// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Thu Jun 12 21:45:10 GMT-0800 1997
// Last Modified: Thu Jun 12 21:45:13 GMT-0800 1997
// Filename:      ...sig/doc/examples/sig/sigfile/ab-test/ab-test.cpp
// Syntax:        C++; sig
//
// Description:   Plays sound 1 as the reference, and then you choose between 
//                two randomized selections using the two input soundfiles.
//
// Note: currently only works with NeXT computers.
//


#include <stdlib.h>
#include <iostream.h>
#include <time.h>
#include <string.h>

void exitUsage(char* commandName);

int main(int argc, char* argv[]) {
   if (argc != 3) exitUsage(argv[0]); 

   srand(time(NULL));   
   int reference = 1;
   int select1 = rand() % 2 + 1;         // 1 or 2
   int select2 = 3 - select1;            // 2 or 1

   char commandR[1000] = {};
   char command1[1000] = {};
   char command2[1000] = {};

   strcat(commandR, "sndplay "); strcat(commandR, argv[reference]);
   strcat(command1, "sndplay "); strcat(command1, argv[select1]);
   strcat(command2, "sndplay "); strcat(command2, argv[select2]);

   int choice = 0;
   cout << "You must choose which of samples 1 and 2 are identical"
        << " to the reference." << endl;
   while (choice < 3 && choice >= 0) {
      cout << "Which sound to play:" << endl;
      cout << "   0 = reference, 1 = selection 1, "
           << "2 = selection 2, 3 = make choice: "
           << endl;
      cin  >> choice; 
      switch (choice) {
         case 0:
            system(commandR);
            break;
         case 1:
            system(command1);
            break;
         case 2:
            system(command2);
            break;
      }
   }
   if (choice == 3) {
      cout << "Which sample is identical to the reference (1 or 2): ";
      cin  >> choice;
      if (choice == 1) {
         if (reference == select1) {
            cout << "You are correct!" << endl;
         } else {
            cout << "You are not correct." << endl;
         }
      } else if (choice == 2) {
         if (reference == select2) {
            cout << "You are correct!" << endl;
         } else {
            cout << "You are not correct." << endl;
         }
      }
   }

   return 0;
}



void exitUsage(char* commandName) {
   cout << endl;
   cout
   << "Program for testing perception of differences between two soundfiles.\n"
   << "The first sound file is the reference sound, and then sample 1 and\n"
   << "sample 2 are both the reference sound and the second soundfile in a\n"
   << "random order. Your goal is to match the reference soundfile with one\n"
   << "of the two selections.\n";
   cout << endl;
   cout << "Usage: " << commandName << " reference alternate" << endl;
   cout << endl;

   exit(1);
}



// md5sum: a80e656ad0d6fecd5ff2176091b4011b ab-test.cpp [20050403]