home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD2.img
/
d4xx
/
d481
/
wavemaker
/
sound.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-05-09
|
2KB
|
83 lines
#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);
}