X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis/blobdiff_plain/bf4857d3d4c67a0f185a99b63003e7fa43cbe2c4..c926d3309ace0ecb51582617fb45c6297f22f886:/src/sim/w_sound.c diff --git a/src/sim/w_sound.c b/src/sim/w_sound.c index 2602183..a7dae78 100644 --- a/src/sim/w_sound.c +++ b/src/sim/w_sound.c @@ -63,8 +63,11 @@ * CONSUMER, SO SOME OR ALL OF THE ABOVE EXCLUSIONS AND LIMITATIONS MAY * NOT APPLY TO YOU. */ -#include -#include +#ifdef WITH_SDL_MIXER +#include "SDL.h" +#include "SDL_mixer.h" +#endif + #include "sim.h" @@ -76,7 +79,11 @@ struct sound { char *id; char *file; +#ifdef WITH_SDL_MIXER Mix_Chunk *wave; +#else + void *wave; +#endif }; struct sound sounds[SIM_NSOUNDS] = { @@ -129,10 +136,12 @@ struct sound sounds[SIM_NSOUNDS] = { { "Zone", "zone.wav", NULL } }; +static int SoundInitialized = 0; + +#ifdef WITH_SDL_MIXER /* Sound routines */ -int SoundInitialized = 0; Mix_Chunk *rumble; @@ -228,36 +237,87 @@ MakeSound(char *channel, char *id) fprintf(stderr, "Mix_PlayChannel: %s\n", Mix_GetError()); } -MakeSoundOn(SimView *view, char *channel, char *id) +StartBulldozer(void) { if (!UserSoundOn) return; if (!SoundInitialized) return; - MakeSound(channel, id); + if (Mix_PlayChannel(DOZER_CHANNEL, rumble, 4) == -1) { + printf("Mix_PlayChannel: %s\n", Mix_GetError()); + return; + } } -StartBulldozer(void) +StopBulldozer(void) { - size_t size; - char buf[256]; + if (!UserSoundOn) return; + if (!SoundInitialized) return; + + Mix_HaltChannel(DOZER_CHANNEL); +} + +#else /* WITH_SDL_MIXER */ +InitializeSound() +{ + SoundInitialized = 1; +} + +ShutDownSound() +{ + SoundInitialized = 0; +} + +MakeSound(char *channel, char *id) +{ + char filename[256], player[256]; + int i; + pid_t pid; if (!UserSoundOn) return; if (!SoundInitialized) return; - if (Mix_PlayChannel(DOZER_CHANNEL, rumble, 4) == -1) { - printf("Mix_PlayChannel: %s\n", Mix_GetError()); - return; + for (i = 0; i < SIM_NSOUNDS; i++) { + if (!strcmp(sounds[i].id, id)) + break; + } + + snprintf(filename, sizeof(filename), "%s/sounds/%s", ResourceDir, + sounds[i].file); + + snprintf(player, sizeof(player), "%s/sounds/player", ResourceDir); + + pid = fork(); + + switch(pid) { + case 0: + execl(player, player, filename, NULL); + break; + case -1: + perror("fork failed"); + break; + default: + break; } } +StartBulldozer(void) +{ + MakeSound(0, "Rumble"); +} StopBulldozer(void) +{ +} +#endif + + +MakeSoundOn(SimView *view, char *channel, char *id) { if (!UserSoundOn) return; if (!SoundInitialized) return; - Mix_HaltChannel(DOZER_CHANNEL); + MakeSound(channel, id); }