/* auDEMO.C  */

#define DEBUG 1 
 
#include "exec/types.h" 
#include "exec/memory.h" 
#include "devices/audio.h" 
#include "ram:audiotools2.c" 
 
main() 
{ 
   LONG i, channel, error, note; 
 
   struct MsgPort *myport;   /* CHANGE from article */ 
 
   myport = InitAudio();   /* now returns address of message port */ 
   if(myport == 0)  
   { 
        printf("Problem in InitAudio!"); 
        FinishAudio(myport); 
   } 
   for(i=0; i<4; i++)  
   {    
      channel = GetChannel(-1); 
      if(channel == -1) 
      { 
           printf("cannot get a channel!\n"); 
           FinishAudio(myport); 
      } 
 
      error = StopChannel(channel); 
      if(error)  
      {   
         printf("error in stopping channel = %ld\n",error); 
         FinishAudio(myport); 
      } 
   } 
   /*  (channel, note, waveform, vol, duration, priority,messageport, id) */ 
 
   for(i=0; i<49; i++) 
   { 
      /* frequency of "zero" is not useful */ 
 
      PlayFreq(0, (i+1)*10, w1, 32, 125, 0, 0, 0); /* all notes, 1/8 sec. */ 
      PlayNote(1, 95-i,     w2, 32, 125, 0, 0, 0);  
   } 
 
   /* SMACK IN THE MIDDLE HERE, INSTALL TEST OF MESSAGING */ 
   /* cause it to flash the screen when this note begins to play */ 
   /* Make the note distinctive so we can tell for sure */ 
 
   PlayNote(1, 3,           w3, 63, 500, 0, myport, 3);  /* very LOUD and low */ 
    
   for(i=50; i<95; i++) 
   { 
      PlayFreq(0, (i+1)*10, w1, 32, 125, 0, 0, 0); /* all notes, 1/8 sec. */ 
      PlayNote(1, 95-i,     w2, 32, 125, 0, 0, 0);  
   } 
 
   for(i=0; i<4; i++) 
   {    
        error = StartChannel(i); 
        if(error)   
        { 
                printf("error starting channel = %ld\n",error); 
                FinishAudio(myport); 
        }

   } 
 
   /* Now SLEEP while waiting for that note to play */ 
 
   printf("Going to sleep now - the prioritized note will wake me up\n"); 
 
   note = MayGetNote(myport, TRUE);     /* FALSE means don't sleep */ 
 
   printf("\n\n\n****************************************************\n"); 
   printf("Hey!  Note I identified as: %ld just started to play\n",note); 
   printf("\n****************************************************\n\n\n"); 
 
   /* When we hit the PlayNote, it calls GetIOB, which in turn 
    * begins to remove iob's from the reply port, freeing them 
    * for future use.  You might consider changing the ReEmployIOB 
    * routine to simply free 1 or 10 or whatever number, just so  
    * you could begin to play another note before ALL of the already 
    * played note's iob's had been freed.  But when DEBUG is turned 
    * off, the freeing goes a lot faster. 
    */ 
 
   Delay(250);  /* waits 5 seconds so that all of these synchronize */ 
 
   PlayNote(0, 23, w1, 32, 2000, 0, 0); 
   PlayNote(1, 27, w2, 32, 2300, 0, 0); 
   PlayNote(2, 30, w3, 32, 2600, 0, 0); 
   PlayNote(3, 35, w1, 32, 2900, 0, 0); 
 
   Delay(150);  /* Waits 3 seconds after letting the last note begin 
                 * (because last note is 2900/1000ths long). 
                 * If you take out this delay, you'll see that 
                 * FinishAudio means FINISH AUDIO... it cuts off 
                 * the notes right in the middle if necessary! 
                 */ 
   FinishAudio(myport);   /* NEW parameter for FinishAudio */ 
 
   printf("Done!\n"); 
   return(0); 
}         /* end of main() */ 


