This example program uses the sound file player to play an AIFF file. While it services the sound file, it checks to see if a controller button is pressed and exits when it detects the button press.
Example 1: Playing an AIFF file.
/*************************************************************** ** PlaySoundFile.c ** Play Sound File from Disk. ** Copyright (c) 1992, 3DO Company. ** This program is proprietary and confidential. ***************************************************************/ /* ** 930721 PLB Changed MEMTYPE_DMA to MEMTYPE_AUDIO ** 940509 WJB Removed AUDIODIR. */ #include "types.h" #include "debug.h" #include "operror.h" #include "filefunctions.h" #include "event.h" #include "audio.h" #include "music.h" #define PRT(x) { printf x; } #define ERR(x) PRT(x) #define DBUG(x) /* PRT(x) */ #define MAXAMPLITUDE (0x7FFF) /* Macro to simplify error checking. */ #define CHECKRESULT(val,name) \ if (val < 0) \ { \ Result = val; \ PrintError(0,"\failure in",name,Result); \ goto error; \ } #define CHECKPTR(val,name) \ if (val == 0) \ { \ Result = -1; \ ERR(("Failure in %s\n", name)); \ goto error; \ } #define NUMBLOCKS (24) #define BLOCKSIZE (2048) #define BUFSIZE (NUMBLOCKS*BLOCKSIZE) #define NUMBUFFS (2) #define USEOWNBUFFERS int32 PlaySoundFile ( SoundFilePlayer *sfp, char *FileName ); static ControlPadEventData cped; int main(int argc, char *argv[]) { int32 Result=0; char *theName; SoundFilePlayer *sfp; int32 i; void *Buffers[MAX_SOUNDFILE_BUFS], **PassBuffers; PRT(("Usage: %s <samplefile>\n", argv[0])); /* Initialize audio, return if error. */ if (OpenAudioFolio()) { ERR(("Audio Folio could not be opened!\n")); return(-1); } /* Initialize the EventBroker. */ Result = InitEventUtility(1, 0, LC_ISFOCUSED); if (Result < 0) { ERR(("main: error in InitEventUtility\n")); PrintError(0,"init event utility",0,Result); goto error; } #ifdef USEOWNBUFFERS for (i=0; i<NUMBUFFS; i++) { Buffers[i] = AllocMemFromMemLists(KernelBase->kb_CurrentTask- >t_FreeMemoryLists, BUFSIZE, MEMTYPE_AUDIO ); if (Buffers[i] == NULL) { ERR(("Buffer allocation failed!\n")); goto error; } } PassBuffers = Buffers; #else PassBuffers = NULL; #endif /* Play the sound file. */ sfp = CreateSoundFilePlayer ( NUMBUFFS, BUFSIZE, PassBuffers ); CHECKPTR(sfp, "CreateSoundFilePlayer"); /* Optionally do not connect to a directout.dsp */ /* sfp->sfp_Flags |= SFP_NO_DIRECTOUT; */ for(i=1; i<argc; i++) { /* Get sample name from command line. */ theName = (char *) argv[i]; Result = PlaySoundFile ( sfp, theName ); } DeleteSoundFilePlayer( sfp ); /* Cleanup the EventBroker. */ Result = KillEventUtility(); if (Result < 0) { PrintError(0,"kill event utility",0,Result); } #ifdef USEOWNBUFFERS for (i=0; i<NUMBUFFS; i++) { FreeMemToMemLists(KernelBase->kb_CurrentTask->t_FreeMemoryLists, Buffers[i], BUFSIZE ); } #endif error: CloseAudioFolio(); PRT(("Playback complete.\n")); return ((int) Result); } /************************************************************************** ** PlaySoundFile **************************************************************************/ int32 PlaySoundFile ( SoundFilePlayer *sfp, char *FileName ) { int32 Result; int32 SignalsIn=0, SignalsNeeded=0; Result = LoadSoundFile( sfp, FileName ); CHECKRESULT(Result,"LoadSoundFile"); Result = StartSoundFile( sfp, MAXAMPLITUDE ); CHECKRESULT(Result,"StartSoundFile"); /* Keep playing until no more samples. */ do { Result = ServiceSoundFile(sfp, SignalsIn, &SignalsNeeded); CHECKRESULT(Result,"ServiceSoundFile"); /* Get User input. */ Result = GetControlPad (1, FALSE, &cped); if (Result < 0) { PrintError(0,"read control pad in","PlaySoundFile",Result); } if (SignalsNeeded) SignalsIn = WaitSignal(SignalsNeeded); } while ((SignalsNeeded) && !(cped.cped_ButtonBits & ControlStart)); Result = StopSoundFile (sfp); CHECKRESULT(Result,"StopSoundFile"); Result = UnloadSoundFile( sfp ); CHECKRESULT(Result,"UnloadSoundFile"); return 0; error: return (Result); }