/* Example.c EEEEE AAA SSS Y Y SSS OOO U U N N DDD E A A S Y Y S O O U U NN N D D EEEE AAAAA SSS Y === SSS O O U U N N N D D E A A S Y S O O U U N NN D D EEEEE A A SSSS Y SSSS OOO UUU N N DDD EEEEE X X AAA M M PPPP L EEEEE E X X A A MM MM P P L E EEEE X AAAAA M M M PPPP L EEEE E X X A A M M P L E EEEEE X X A A M M P LLLLL EEEEE EASY-SOUND EXAMPLE V2.00 1990-09-23 ANDERS BJERIN Now at last you can easily write C programs that plays digitized sound. You simply use four functions that will take care of all the work of allocating memory, loading the files, opening the ports and reserving the sound channels. Despite the simplicity you can still decide what volume and rate, which channel, and how many times the sound should be played. The functions contain full error checking, and will close and return everything that have been taken. EASY-SOUND was written by Anders Bjerin, and is distributed as public domain with NO RIGHTS RESERVED. That means that you can do what ever you want with the program. You may use EASY-SOUND in your own programs, commercial or not, and do not even need to mention that you have used it. You may alter the source code to fit your needs, and you may spread it to anyone. V2.00: You can now play the same sound in one or more channels at the same time. Before you could only use one of the four channels for each sound. Some code improvements have also been done. I N S T R U C T I O N S 1. There are four functions that you need to use. The first one is called PrepareSound(), and must be called before you can play the soundeffect. You simply give it a file name as the only parameter, and it will allocate space and load the sound file. It will also prepare some other things that is needed before you may play the sound. If PrepareSound() has successfully done its task, it will return a normal memory pointer (CPTR), else it will return NULL which means something went wrong. Synopsis: pointer = PrepareSound( filename ); pointer: (CPTR) PrepareSound() will return a normal memory pointer if the sound was prepared successfully, else it will return NULL which means something went wrong. filename: (STRPTR) Pointer to a string containing the name of the sound file. 2. After you have prepared the sound, you may play it. You do it by calling the function PlaySound(). If the sound was played successfully, TRUE is returned, else FALSE is returned which means something went wrong. Synopsis: ok = PlaySound( pointer, volume, channel, drate, times ); ok: (BOOL) If the sound was played successfully TRUE is returned, else FALSE. pointer: (CPTR) The pointer that was returned by PrepareSound(). volume: (UWORD) Volume, 0 to 64. (MINVOLUME - MAXVOLUME) channel: (UBYTE) Which channel should be used. (LEFT0, RIGHT0, RIGHT1 or LEFT1) drate: (WORD) Delta rate. When the sound is prepared, the record rate is automatically stored in the SoundInfo structure, so if you do not want to change the rate, write NORMALRATE. However, if you want to increase/decrease the speed, you simply write the desired delta value. times: (UWORD) How many times the sound should be played. If you want to play the sound forever, write 0. 3. If you want to stop an audio channel you simply call the function StopSound(). (It is not dangerous to stop a sound that has already terminated, or has not started.) Synopsis: StopSound( channel ); channel: (UBYTE) Which channel should be stopped. (LEFT0, RIGHT0, RIGHT1 or LEFT1) 4. Before your program terminates you must call the function RemoveSound() which will deallocate all memory that was allocated by the PrepareSound() function. IMPORTANT! All sound channels that is currentely playing the sound must have been stopped before this function may be called! Synopsis: RemoveSound( pointer ); pointer: (CPTR) The pointer that was returned by PrepareSound(). I hope you will have a lot of use of EASY-SOUND and happy programming, Anders Bjerin AMIGA C CLUB (ACC) Tulevagen 22 181 41 LIDINGO SWEDEN */ /* Include some important header files: */ #include "exec/types.h" /* Declares CPTR, BOOL and STRPTR. */ #include "EasySound.h" /* Declares LEFT0, LEFT1, RIGHT0, etc. */ /* Pointers to the three sound effects: */ CPTR fire; CPTR explosion; CPTR background; /* Declare the functions in this module: */ void main(); void free_memory(); void pause(); void main() { printf("\nE A S Y - S O U N D\n"); printf("Amiga C Club (ACC)\nAnders Bjerin\nTulevagen 22\n"); printf("181 41 LIDINGO\nSWEDEN\n\n"); printf("1. Prepare the sound Fire.snd\n"); fire = PrepareSound( "Fire.snd" ); if( !fire ) free_memory( "Could not prepare the sound effect!" ); printf(" Prepare the sound Explosion.snd\n"); explosion = PrepareSound( "Explosion.snd" ); if( !explosion ) free_memory( "Could not prepare the sound effect!" ); printf(" Prepare the sound Background.snd\n"); background = PrepareSound( "Background.snd" ); if( !background ) free_memory( "Could not prepare the sound effect!" ); printf("2. Play the sound\n"); /* Start with some atmospheric background sounds: */ PlaySound( background, MAXVOLUME/2, LEFT0, NORMALRATE, NONSTOP ); PlaySound( background, MAXVOLUME/2, RIGHT0, NORMALRATE, NONSTOP ); pause( 500 ); PlaySound( fire, MAXVOLUME, LEFT1, NORMALRATE, 2 ); pause( 400 ); PlaySound( explosion, MAXVOLUME, RIGHT1, NORMALRATE, 2 ); pause( 1000 ); printf("3. Stop the audio channels\n"); StopSound( LEFT0 ); StopSound( LEFT1 ); StopSound( RIGHT0 ); StopSound( RIGHT1 ); printf("4. Remove the sound effects\n"); free_memory( "THE END" ); } void free_memory( message ) STRPTR message; { printf("%s\n\n", message ); /* It is not dangerous to try to remove a sound that has not been */ /* prepared. We can therefore try to remove all sounds, even if some */ /* have not been initialized. (However, all channels that are playing */ /* the sound must have been stopped before you may remove the sound! */ RemoveSound( fire ); RemoveSound( explosion ); RemoveSound( background ); exit(); } void pause( time ) int time; { int loop; for( loop=0; loop < time*100; loop++ ) ; }