home *** CD-ROM | disk | FTP | other *** search
- #include <exec/types.h>
- #include <devices/audio.h>
-
- #define NO 0
- #define YES 1
-
- extern struct IOAudio *ioa,*audchan[4],*finish[4];
- extern SHORT audiochan[128];
- extern SHORT waiting[5];
- /************************************************************/
- VOID SoundOn(SHORT key,UBYTE *ws)
-
- /* Start a sound channel */
-
- {
- UWORD tone;
- UWORD periods[16]={452, 428, 404, 381, 359, 339, 320, 302,
- 285, 269, 254, 240, 226, 214, 202, 190};
- SHORT channo,FreeChan();
-
- switch (key)
- {
- case 0x31: {tone=periods[0]; break;}
- case 0x32: {tone=periods[1]; break;}
- case 0x22: {tone=periods[2]; break;}
- case 0x33: {tone=periods[3]; break;}
- case 0x23: {tone=periods[4]; break;}
- case 0x34: {tone=periods[5]; break;}
- case 0x35: {tone=periods[6]; break;}
- case 0x25: {tone=periods[7]; break;}
- case 0x36: {tone=periods[8]; break;}
- case 0x26: {tone=periods[9]; break;}
- case 0x37: {tone=periods[10]; break;}
- case 0x27: {tone=periods[11]; break;}
- case 0x38: {tone=periods[12]; break;}
- case 0x39: {tone=periods[13]; break;}
- case 0x29: {tone=periods[14]; break;}
- case 0x3A: {tone=periods[15]; break;}
- default: tone=0;
- }
- if (((channo = FreeChan())<4)&(key<64))
- {
- audchan[channo]->ioa_Period=tone;
- if(tone==0) audchan[channo]->ioa_Volume=0;
- else audchan[channo]->ioa_Volume=64;
- audchan[channo]->ioa_Data=(UBYTE *)ws;
- audiochan[key]=channo;
- WaitIO(audchan[channo]);
- BeginIO(audchan[channo]);
- }
- }
-
- /************************************************************/
- VOID SoundOff(SHORT key)
-
- /* Stop a sound channel */
-
- {
- SHORT channo;
-
- channo = audiochan[key];
- audiochan[key]=-1;
- if ((channo>=0)&(key<64))
- {
- BeginIO(finish[channo]);
- WaitIO(finish[channo]);
- waiting[channo]=NO;
- }
- }
-
- /************************************************************/
- SHORT FreeChan()
-
- /* Finds the first unused audio channel */
- {
- SHORT i;
-
- i=0;
- while ((waiting[i]==YES)&&(i<4)) i++;
- waiting[i]=YES;
- return(i);
- }
-