3 // SuperTux - A Jump'n Run
4 // Copyright (C) 2000 Bill Kendrick <bill@newbreedsoftware.com>
5 // Copyright (C) 2004 Duong-Khang NGUYEN <neoneurone@users.sf.net>
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License
9 // as published by the Free Software Foundation; either version 2
10 // of the License, or (at your option) any later version.
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 bool use_sound = true; /* handle sound on/off menu and command-line option */
28 bool use_music = true; /* handle music on/off menu and command-line option */
29 bool audio_device = true; /* != 0: available and initialized */
31 char * soundfilenames[NUM_SOUNDS] = {
33 "/sounds/bigjump.wav",
36 "/sounds/herring.wav",
41 "/sounds/ricochet.wav",
42 "/sounds/bump-upgrade.wav",
43 "/sounds/upgrade.wav",
44 "/sounds/excellent.wav",
54 #include <SDL_mixer.h>
56 Mix_Chunk * sounds[NUM_SOUNDS];
58 /* --- OPEN THE AUDIO DEVICE --- */
60 int open_audio (int frequency, Uint16 format, int channels, int chunksize)
62 if (Mix_OpenAudio( frequency, format, channels, chunksize ) < 0)
65 // allocate 16 channels for mixing
66 if (Mix_AllocateChannels(8) != 8)
69 /* reserve some channels and register panning effects */
70 if (Mix_ReserveChannels(SOUND_RESERVED_CHANNELS) != SOUND_RESERVED_CHANNELS)
73 /* prepare the spanning effects */
74 Mix_SetPanning( SOUND_LEFT_SPEAKER, 230, 24 );
75 Mix_SetPanning( SOUND_RIGHT_SPEAKER, 24, 230 );
80 /* --- CLOSE THE AUDIO DEVICE --- */
82 void close_audio( void )
85 Mix_UnregisterAllEffects( SOUND_LEFT_SPEAKER );
86 Mix_UnregisterAllEffects( SOUND_RIGHT_SPEAKER );
92 /* --- LOAD A SOUND --- */
94 Mix_Chunk* load_sound(const std::string& file)
99 Mix_Chunk* snd = Mix_LoadWAV(file.c_str());
102 st_abort("Can't load", file);
107 /* --- PLAY A SOUND ON LEFT OR RIGHT OR CENTER SPEAKER --- */
109 void play_sound(Mix_Chunk * snd, enum Sound_Speaker whichSpeaker)
111 /* this won't call the function if the user has disabled sound
112 * either via menu or via command-line option
114 if(!audio_device || !use_sound)
117 Mix_PlayChannel( whichSpeaker, snd, 0);
119 /* prepare for panning effects for next call */
120 switch (whichSpeaker) {
121 case SOUND_LEFT_SPEAKER:
122 Mix_SetPanning( SOUND_LEFT_SPEAKER, 230, 24 );
124 case SOUND_RIGHT_SPEAKER:
125 Mix_SetPanning( SOUND_RIGHT_SPEAKER, 24, 230 );
127 default: // keep the compiler happy
132 void free_chunk(Mix_Chunk *chunk)
134 Mix_FreeChunk( chunk );