OpenDoor(DOOR_OPEN_ALL);
- PlaySoundStereo(SND_GAME_STARTING, PSND_MAX_RIGHT);
+ PlaySoundStereo(SND_GAME_STARTING, SOUND_MAX_RIGHT);
if (setup.sound_music)
PlayMusic(level_nr);
local_player->LevelSolved = FALSE;
- PlaySoundStereo(SND_GAME_WINNING, PSND_MAX_RIGHT);
+ PlaySoundStereo(SND_GAME_WINNING, SOUND_MAX_RIGHT);
if (TimeLeft)
{
if (!tape.playing && setup.sound_loops)
- PlaySoundExt(SND_GAME_LEVELTIME_BONUS, PSND_MAX_VOLUME, PSND_MAX_RIGHT,
+ PlaySoundExt(SND_GAME_LEVELTIME_BONUS, SOUND_MAX_VOLUME, SOUND_MAX_RIGHT,
SND_CTRL_PLAY_LOOP);
while (TimeLeft > 0)
{
if (!tape.playing && !setup.sound_loops)
- PlaySoundStereo(SND_GAME_LEVELTIME_BONUS, PSND_MAX_RIGHT);
+ PlaySoundStereo(SND_GAME_LEVELTIME_BONUS, SOUND_MAX_RIGHT);
if (TimeLeft > 0 && !(TimeLeft % 10))
RaiseScore(level.score[SC_ZEITBONUS]);
if (TimeLeft > 100 && !(TimeLeft % 10))
else if (level.time == 0) /* level without time limit */
{
if (!tape.playing && setup.sound_loops)
- PlaySoundExt(SND_GAME_LEVELTIME_BONUS, PSND_MAX_VOLUME, PSND_MAX_RIGHT,
+ PlaySoundExt(SND_GAME_LEVELTIME_BONUS, SOUND_MAX_VOLUME, SOUND_MAX_RIGHT,
SND_CTRL_PLAY_LOOP);
while (TimePlayed < 999)
{
if (!tape.playing && !setup.sound_loops)
- PlaySoundStereo(SND_GAME_LEVELTIME_BONUS, PSND_MAX_RIGHT);
+ PlaySoundStereo(SND_GAME_LEVELTIME_BONUS, SOUND_MAX_RIGHT);
if (TimePlayed < 999 && !(TimePlayed % 10))
RaiseScore(level.score[SC_ZEITBONUS]);
if (TimePlayed < 900 && !(TimePlayed % 10))
TimeLeft--;
if (TimeLeft <= 10 && setup.time_limit)
- PlaySoundStereo(SND_GAME_RUNNING_OUT_OF_TIME, PSND_MAX_RIGHT);
+ PlaySoundStereo(SND_GAME_RUNNING_OUT_OF_TIME, SOUND_MAX_RIGHT);
DrawText(DX_TIME, DY_TIME, int2str(TimeLeft, 3), FS_SMALL, FC_YELLOW);
TimeLeft += 10;
DrawText(DX_TIME, DY_TIME, int2str(TimeLeft, 3), FS_SMALL, FC_YELLOW);
}
- PlaySoundStereo(SND_EXTRA_TIME_COLLECTING, PSND_MAX_RIGHT);
+ PlaySoundStereo(SND_EXTRA_TIME_COLLECTING, SOUND_MAX_RIGHT);
break;
case EL_SHIELD_PASSIVE:
return MF_NO_ACTION;
player->LevelSolved = player->GameOver = TRUE;
- PlaySoundStereo(SND_SP_EXIT_ENTERING, PSND_MAX_RIGHT);
+ PlaySoundStereo(SND_SP_EXIT_ENTERING, SOUND_MAX_RIGHT);
break;
case EL_FELSBROCKEN:
TimeLeft += 10;
DrawText(DX_TIME, DY_TIME, int2str(TimeLeft, 3), FS_SMALL, FC_YELLOW);
DrawLevelField(x, y);
- PlaySoundStereo(SND_TIME_ORB_FULL_COLLECTING, PSND_MAX_RIGHT);
+ PlaySoundStereo(SND_TIME_ORB_FULL_COLLECTING, SOUND_MAX_RIGHT);
return MF_ACTION;
break;
{
int sx = SCREENX(x), sy = SCREENY(y);
int volume, stereo_position;
- int silence_distance = 8;
+ int max_distance = 8;
int type = (IS_LOOP_SOUND(nr) ? SND_CTRL_PLAY_LOOP : SND_CTRL_PLAY_SOUND);
if ((!setup.sound_simple && !IS_LOOP_SOUND(nr)) ||
return;
if (!IN_LEV_FIELD(x, y) ||
- sx < -silence_distance || sx >= SCR_FIELDX + silence_distance ||
- sy < -silence_distance || sy >= SCR_FIELDY + silence_distance)
+ sx < -max_distance || sx >= SCR_FIELDX + max_distance ||
+ sy < -max_distance || sy >= SCR_FIELDY + max_distance)
return;
- volume = PSND_MAX_VOLUME;
-
-#if !defined(PLATFORM_MSDOS)
- stereo_position = (sx - SCR_FIELDX / 2) * 12;
-#else
- stereo_position = PSND_MIDDLE + (2 * sx - (SCR_FIELDX - 1)) * 5;
- if (stereo_position > PSND_MAX_RIGHT)
- stereo_position = PSND_MAX_RIGHT;
- if (stereo_position < PSND_MAX_LEFT)
- stereo_position = PSND_MAX_LEFT;
-#endif
+ volume = SOUND_MAX_VOLUME;
if (!IN_SCR_FIELD(sx, sy))
{
- int dx = ABS(sx - SCR_FIELDX/2) - SCR_FIELDX/2;
- int dy = ABS(sy - SCR_FIELDY/2) - SCR_FIELDY/2;
+ int dx = ABS(sx - SCR_FIELDX / 2) - SCR_FIELDX / 2;
+ int dy = ABS(sy - SCR_FIELDY / 2) - SCR_FIELDY / 2;
- volume -= volume * (dx > dy ? dx : dy) / silence_distance;
+ volume -= volume * (dx > dy ? dx : dy) / max_distance;
}
+ stereo_position = (SOUND_MAX_LEFT +
+ (sx + max_distance) * SOUND_MAX_LEFT2RIGHT /
+ (SCR_FIELDX + 2 * max_distance));
+
PlaySoundExt(nr, volume, stereo_position, type);
}
/* one second fading interval == 1000 ticks (milliseconds) */
#define SOUND_FADING_INTERVAL 1000
-#if defined(TARGET_SDL)
-#define SOUND_MAX_VOLUME SDL_MIX_MAXVOLUME
-#endif
-
#if defined(AUDIO_STREAMING_DSP)
-#define SOUND_FADING_VOLUME_STEP (PSND_MAX_VOLUME / 40)
+#define SOUND_FADING_VOLUME_STEP (SOUND_MAX_VOLUME / 40)
#define SOUND_FADING_VOLUME_THRESHOLD (SOUND_FADING_VOLUME_STEP * 2)
#endif
#define DEVICENAME_AUDIO "/dev/audio"
#define DEVICENAME_AUDIOCTL "/dev/audioCtl"
+#define SOUND_VOLUME_LEFT(x) (stereo_volume[x])
+#define SOUND_VOLUME_RIGHT(x) (stereo_volume[SOUND_MAX_LEFT2RIGHT-x])
+
#if 0
struct SoundHeader_SUN
long data_len;
void *data_ptr;
-#if defined(PLATFORM_MSDOS)
+#if defined(TARGET_ALLEGRO)
int voice;
#endif
};
static SoundInfo **Sound = NULL;
static MusicInfo **Music = NULL;
static int num_sounds = 0, num_music = 0;
+static int stereo_volume[SOUND_MAX_LEFT2RIGHT + 1];
/* ========================================================================= */
return FALSE;
}
-static void Mixer_PlayChannel(int channel)
+static boolean Mixer_AllocateChannel(int channel)
{
- /* start with inactive channel in case something goes wrong */
- mixer[channel].active = FALSE;
+#if defined(TARGET_ALLEGRO)
+ mixer[channel].voice = allocate_voice((SAMPLE *)mixer[channel].data_ptr);
+ if (mixer[channel].voice < 0)
+ return FALSE;
+#endif
- if (mixer[channel].type != MUS_TYPE_WAV)
- return;
+ return TRUE;
+}
+static void Mixer_SetChannelProperties(int channel)
+{
+#if defined(TARGET_SDL)
+ Mix_Volume(channel, mixer[channel].volume);
+ Mix_SetPanning(channel,
+ SOUND_VOLUME_LEFT(mixer[channel].stereo_position),
+ SOUND_VOLUME_RIGHT(mixer[channel].stereo_position));
+#elif defined(TARGET_ALLEGRO)
+ voice_set_volume(mixer[channel].voice, mixer[channel].volume);
+ voice_set_pan(mixer[channel].voice, mixer[channel].stereo_position);
+#endif
+}
+
+static void Mixer_StartChannel(int channel)
+{
#if defined(TARGET_SDL)
- Mix_Volume(channel, SOUND_MAX_VOLUME);
Mix_PlayChannel(channel, mixer[channel].data_ptr,
IS_LOOP(mixer[channel]) ? -1 : 0);
-#elif defined(PLATFORM_MSDOS)
- mixer[channel].voice = allocate_voice((SAMPLE *)mixer[channel].data_ptr);
- if (mixer[channel].voice < 0)
- return;
-
+#elif defined(TARGET_ALLEGRO)
if (IS_LOOP(mixer[channel]))
voice_set_playmode(mixer[channel].voice, PLAYMODE_LOOP);
- voice_set_volume(mixer[channel].voice, mixer[channel].volume);
- voice_set_pan(mixer[channel].voice, mixer[channel].stereo_position);
voice_start(mixer[channel].voice);
#endif
+}
+
+static void Mixer_PlayChannel(int channel)
+{
+ /* start with inactive channel in case something goes wrong */
+ mixer[channel].active = FALSE;
+
+ if (mixer[channel].type != MUS_TYPE_WAV)
+ return;
+
+ if (!Mixer_AllocateChannel(channel))
+ return;
+
+ Mixer_SetChannelProperties(channel);
+ Mixer_StartChannel(channel);
Mixer_ResetChannelExpiration(channel);
#if defined(TARGET_SDL)
Mix_HaltChannel(channel);
-#elif defined(PLATFORM_MSDOS)
+#elif defined(TARGET_ALLEGRO)
voice_set_volume(mixer[channel].voice, 0);
deallocate_voice(mixer[channel].voice);
#endif
#if defined(TARGET_SDL)
Mix_FadeOutChannel(channel, SOUND_FADING_INTERVAL);
-#elif defined(PLATFORM_MSDOS)
+#elif defined(TARGET_ALLEGRO)
if (voice_check(mixer[channel].voice))
voice_ramp_volume(mixer[channel].voice, SOUND_FADING_INTERVAL, 0);
#endif
return;
mixer[channel].state &= ~SND_CTRL_FADE;
- mixer[channel].volume = PSND_MAX_VOLUME;
+ mixer[channel].volume = SOUND_MAX_VOLUME;
#if defined(TARGET_SDL)
Mix_ExpireChannel(channel, -1);
- Mix_Volume(channel, SOUND_MAX_VOLUME);
+ Mix_Volume(channel, mixer[channel].volume);
#elif defined(TARGET_ALLEGRO)
voice_stop_volumeramp(mixer[channel].voice);
voice_ramp_volume(mixer[channel].voice, SOUND_FADING_INTERVAL,
/* play music samples on a dedicated music channel */
if (IS_MUSIC(snd_ctrl))
{
+#if 0
+ printf("PLAY MUSIC WITH VOLUME/STEREO %d/%d\n",
+ snd_ctrl.volume, snd_ctrl.stereo_position);
+#endif
+
mixer[audio.music_channel] = snd_ctrl;
Mixer_PlayMusicChannel();
printf("RESETTING EXPIRATION FOR SOUND %d\n", snd_ctrl.nr);
#endif
-#if 1
- Mixer_ResetChannelExpiration(i);
-#endif
if (IS_FADING(mixer[i]))
Mixer_UnFadeChannel(i);
+
+ /* restore settings like volume and stereo position */
+ mixer[i].volume = snd_ctrl.volume;
+ mixer[i].stereo_position = snd_ctrl.stereo_position;
+
+ Mixer_SetChannelProperties(i);
+ Mixer_ResetChannelExpiration(i);
+
+#if 0
+ printf("RESETTING VOLUME/STEREO FOR SOUND %d TO %d/%d\n",
+ snd_ctrl.nr, snd_ctrl.volume, snd_ctrl.stereo_position);
+#endif
}
}
void StartMixer(void)
{
+ int i;
+
#if 0
SDL_version compile_version;
const SDL_version *link_version;
if (!audio.sound_available)
return;
+ /* initialize stereo position conversion information */
+ for(i=0; i<=SOUND_MAX_LEFT2RIGHT; i++)
+ stereo_volume[i] =
+ (int)sqrt((float)(SOUND_MAX_LEFT2RIGHT * SOUND_MAX_LEFT2RIGHT - i * i));
+
#if defined(AUDIO_UNIX_NATIVE)
if (!ForkAudioProcess())
audio.sound_available = FALSE;
#if defined(AUDIO_STREAMING_DSP)
static void Mixer_Main_DSP()
{
- static int stereo_volume[PSND_MAX_LEFT2RIGHT + 1];
- static boolean stereo_volume_calculated = FALSE;
static short premix_first_buffer[SND_BLOCKSIZE];
static short premix_left_buffer[SND_BLOCKSIZE];
static short premix_right_buffer[SND_BLOCKSIZE];
int max_sample_size;
int i, j;
- if (!stereo_volume_calculated)
- {
- for(i=0; i<=PSND_MAX_LEFT2RIGHT; i++)
- stereo_volume[i] =
- (int)sqrt((float)(PSND_MAX_LEFT2RIGHT * PSND_MAX_LEFT2RIGHT - i * i));
-
- stereo_volume_calculated = TRUE;
- }
-
if (!mixer_active_channels)
return;
mixer[i].volume -= SOUND_FADING_VOLUME_STEP;
/* adjust volume of actual sound sample */
- if (mixer[i].volume != PSND_MAX_VOLUME)
+ if (mixer[i].volume != SOUND_MAX_VOLUME)
for(j=0; j<sample_size; j++)
premix_first_buffer[j] =
- (mixer[i].volume * (long)premix_first_buffer[j])
- >> PSND_MAX_VOLUME_BITS;
+ mixer[i].volume * (long)premix_first_buffer[j] / SOUND_MAX_VOLUME;
/* fill the last mixing buffer with stereo or mono sound */
if (stereo)
{
- int middle_pos = PSND_MAX_LEFT2RIGHT / 2;
- int left_volume = stereo_volume[middle_pos + mixer[i].stereo_position];
- int right_volume= stereo_volume[middle_pos - mixer[i].stereo_position];
+ int left_volume = SOUND_VOLUME_LEFT(mixer[i].stereo_position);
+ int right_volume = SOUND_VOLUME_RIGHT(mixer[i].stereo_position);
for(j=0; j<sample_size; j++)
{
premix_left_buffer[j] =
- (left_volume * premix_first_buffer[j])
- >> PSND_MAX_LEFT2RIGHT_BITS;
+ left_volume * premix_first_buffer[j] / SOUND_MAX_LEFT2RIGHT;
premix_right_buffer[j] =
- (right_volume * premix_first_buffer[j])
- >> PSND_MAX_LEFT2RIGHT_BITS;
+ right_volume * premix_first_buffer[j] / SOUND_MAX_LEFT2RIGHT;
premix_last_buffer[2 * j + 0] += premix_left_buffer[j];
premix_last_buffer[2 * j + 1] += premix_right_buffer[j];
premix_first_buffer);
/* adjust volume of actual sound sample */
- if (mixer[i].volume != PSND_MAX_VOLUME)
+ if (mixer[i].volume != SOUND_MAX_VOLUME)
for(j=0; j<sample_size; j++)
premix_first_buffer[j] =
- (mixer[i].volume * (long)premix_first_buffer[j])
- >> PSND_MAX_VOLUME_BITS;
+ mixer[i].volume * (long)premix_first_buffer[j] / SOUND_MAX_VOLUME;
/* might be needed for u-law /dev/audio */
#if 0
static SoundInfo *Load_WAV(char *filename)
{
SoundInfo *snd_info;
-#if !defined(TARGET_SDL) && !defined(PLATFORM_MSDOS)
+#if defined(AUDIO_UNIX_NATIVE)
byte sound_header_buffer[WAV_HEADER_SIZE];
char chunk_name[CHUNK_ID_LEN + 1];
int chunk_size;
void PlaySound(int nr)
{
- PlaySoundExt(nr, PSND_MAX_VOLUME, PSND_MIDDLE, SND_CTRL_PLAY_SOUND);
+ PlaySoundExt(nr, SOUND_MAX_VOLUME, SOUND_MIDDLE, SND_CTRL_PLAY_SOUND);
}
void PlaySoundStereo(int nr, int stereo_position)
{
- PlaySoundExt(nr, PSND_MAX_VOLUME, stereo_position, SND_CTRL_PLAY_SOUND);
+ PlaySoundExt(nr, SOUND_MAX_VOLUME, stereo_position, SND_CTRL_PLAY_SOUND);
}
void PlaySoundLoop(int nr)
{
- PlaySoundExt(nr, PSND_MAX_VOLUME, PSND_MIDDLE, SND_CTRL_PLAY_LOOP);
+ PlaySoundExt(nr, SOUND_MAX_VOLUME, SOUND_MIDDLE, SND_CTRL_PLAY_LOOP);
}
void PlaySoundMusic(int nr)
{
- PlaySoundExt(nr, PSND_MAX_VOLUME, PSND_MIDDLE, SND_CTRL_PLAY_MUSIC);
+ PlaySoundExt(nr, SOUND_MAX_VOLUME, SOUND_MIDDLE, SND_CTRL_PLAY_MUSIC);
}
void PlaySoundExt(int nr, int volume, int stereo_position, int state)
audio.sound_deactivated)
return;
- if (volume < PSND_MIN_VOLUME)
- volume = PSND_MIN_VOLUME;
- else if (volume > PSND_MAX_VOLUME)
- volume = PSND_MAX_VOLUME;
+ if (volume < SOUND_MIN_VOLUME)
+ volume = SOUND_MIN_VOLUME;
+ else if (volume > SOUND_MAX_VOLUME)
+ volume = SOUND_MAX_VOLUME;
- if (stereo_position < PSND_MAX_LEFT)
- stereo_position = PSND_MAX_LEFT;
- else if (stereo_position > PSND_MAX_RIGHT)
- stereo_position = PSND_MAX_RIGHT;
+ if (stereo_position < SOUND_MAX_LEFT)
+ stereo_position = SOUND_MAX_LEFT;
+ else if (stereo_position > SOUND_MAX_RIGHT)
+ stereo_position = SOUND_MAX_RIGHT;
snd_ctrl.active = TRUE;
snd_ctrl.nr = nr;
if (!audio.sound_available)
return;
-#if defined(TARGET_SDL) || defined(TARGET_ALLEGRO)
- ReloadCustomSounds();
-#elif defined(AUDIO_UNIX_NATIVE)
+#if defined(AUDIO_UNIX_NATIVE)
WriteReloadInfoToPipe(set_name, SND_CTRL_RELOAD_SOUNDS);
+#else
+ ReloadCustomSounds();
#endif
}
if (!audio.music_available)
return;
-#if defined(TARGET_SDL) || defined(TARGET_ALLEGRO)
- ReloadCustomMusic();
-#elif defined(AUDIO_UNIX_NATIVE)
+#if defined(AUDIO_UNIX_NATIVE)
WriteReloadInfoToPipe(set_name, SND_CTRL_RELOAD_MUSIC);
+#else
+ ReloadCustomMusic();
#endif
}
/* values for PlaySound(), StopSound() and friends */
-#define SND_CTRL_NONE (0)
-#define SND_CTRL_MUSIC (1 << 0)
-#define SND_CTRL_LOOP (1 << 1)
-#define SND_CTRL_FADE (1 << 2)
-#define SND_CTRL_STOP (1 << 3)
-#define SND_CTRL_ALL_SOUNDS (1 << 4)
-#define SND_CTRL_RELOAD_SOUNDS (1 << 5)
-#define SND_CTRL_RELOAD_MUSIC (1 << 6)
-
-#define SND_CTRL_PLAY_SOUND (SND_CTRL_NONE)
-#define SND_CTRL_PLAY_LOOP (SND_CTRL_LOOP)
-#define SND_CTRL_PLAY_MUSIC (SND_CTRL_LOOP | SND_CTRL_MUSIC)
-
-#define SND_CTRL_FADE_SOUND (SND_CTRL_FADE)
-#define SND_CTRL_FADE_MUSIC (SND_CTRL_FADE | SND_CTRL_MUSIC)
-#define SND_CTRL_FADE_ALL (SND_CTRL_FADE | SND_CTRL_ALL_SOUNDS)
-
-#define SND_CTRL_STOP_SOUND (SND_CTRL_STOP)
-#define SND_CTRL_STOP_MUSIC (SND_CTRL_STOP | SND_CTRL_MUSIC)
-#define SND_CTRL_STOP_ALL (SND_CTRL_STOP | SND_CTRL_ALL_SOUNDS)
-
-#define IS_MUSIC(x) ((x).state & SND_CTRL_MUSIC)
-#define IS_LOOP(x) ((x).state & SND_CTRL_LOOP)
-#define IS_FADING(x) ((x).state & SND_CTRL_FADE)
-#define IS_STOPPING(x) ((x).state & SND_CTRL_STOP)
-#define IS_RELOADING(x) ((x).state & (SND_CTRL_RELOAD_SOUNDS | \
- SND_CTRL_RELOAD_MUSIC))
-#define ALL_SOUNDS(x) ((x).state & SND_CTRL_ALL_SOUNDS)
-
-
-#if !defined(TARGET_ALLEGRO)
-
-#define PSND_SILENCE 0
-#define PSND_MAX_VOLUME_BITS 15
-#define PSND_MIN_VOLUME 0
-#define PSND_MAX_VOLUME (1 << PSND_MAX_VOLUME_BITS)
-#define PSND_MIDDLE 0
-#define PSND_MAX_STEREO_BITS 7
-#define PSND_MAX_STEREO (1 << PSND_MAX_STEREO_BITS)
-#define PSND_MAX_LEFT (-PSND_MAX_STEREO)
-#define PSND_MAX_RIGHT (+PSND_MAX_STEREO)
-#define PSND_MAX_LEFT2RIGHT_BITS (PSND_MAX_STEREO_BITS+1)
-#define PSND_MAX_LEFT2RIGHT (1 << PSND_MAX_LEFT2RIGHT_BITS)
-
-#else /* TARGET_ALLEGRO */
-
-#define PSND_SILENCE 0
-#define PSND_MIN_VOLUME 0
-#define PSND_MAX_VOLUME 255
-#define PSND_MAX_LEFT 0
-#define PSND_MAX_RIGHT 255
-#define PSND_MIDDLE 128
-
+#define SND_CTRL_NONE (0)
+#define SND_CTRL_MUSIC (1 << 0)
+#define SND_CTRL_LOOP (1 << 1)
+#define SND_CTRL_FADE (1 << 2)
+#define SND_CTRL_STOP (1 << 3)
+#define SND_CTRL_ALL_SOUNDS (1 << 4)
+#define SND_CTRL_RELOAD_SOUNDS (1 << 5)
+#define SND_CTRL_RELOAD_MUSIC (1 << 6)
+
+#define SND_CTRL_PLAY_SOUND (SND_CTRL_NONE)
+#define SND_CTRL_PLAY_LOOP (SND_CTRL_LOOP)
+#define SND_CTRL_PLAY_MUSIC (SND_CTRL_LOOP | SND_CTRL_MUSIC)
+
+#define SND_CTRL_FADE_SOUND (SND_CTRL_FADE)
+#define SND_CTRL_FADE_MUSIC (SND_CTRL_FADE | SND_CTRL_MUSIC)
+#define SND_CTRL_FADE_ALL (SND_CTRL_FADE | SND_CTRL_ALL_SOUNDS)
+
+#define SND_CTRL_STOP_SOUND (SND_CTRL_STOP)
+#define SND_CTRL_STOP_MUSIC (SND_CTRL_STOP | SND_CTRL_MUSIC)
+#define SND_CTRL_STOP_ALL (SND_CTRL_STOP | SND_CTRL_ALL_SOUNDS)
+
+#define IS_MUSIC(x) ((x).state & SND_CTRL_MUSIC)
+#define IS_LOOP(x) ((x).state & SND_CTRL_LOOP)
+#define IS_FADING(x) ((x).state & SND_CTRL_FADE)
+#define IS_STOPPING(x) ((x).state & SND_CTRL_STOP)
+#define IS_RELOADING(x) ((x).state & (SND_CTRL_RELOAD_SOUNDS |\
+ SND_CTRL_RELOAD_MUSIC))
+#define ALL_SOUNDS(x) ((x).state & SND_CTRL_ALL_SOUNDS)
+
+#define SOUND_MIN_VOLUME 0
+#if defined(TARGET_SDL)
+#define SOUND_MAX_VOLUME SDL_MIX_MAXVOLUME
+#elif defined(TARGET_ALLEGRO)
+#define SOUND_MAX_VOLUME 255
+#else
+#define SOUND_MAX_VOLUME 128
#endif
+#define SOUND_MAX_LEFT 0
+#define SOUND_MAX_RIGHT 255
+#define SOUND_MAX_LEFT2RIGHT 255
+#define SOUND_MIDDLE (SOUND_MAX_LEFT2RIGHT / 2)
+
/* value for undefined sound effect filename */
-#define SND_FILE_UNDEFINED "NONE"
+#define SND_FILE_UNDEFINED "NONE"
struct SoundEffectInfo