-1,0,0, FALSE,FALSE,FALSE,FALSE,FALSE, 0,0L,0L,NULL
};
-#ifndef MSDOS
+#if !defined(MSDOS) && !defined(WIN32)
static int stereo_volume[PSND_MAX_LEFT2RIGHT+1];
static char premix_first_buffer[SND_BLOCKSIZE];
#ifdef VOXWARE
static int premix_last_buffer[SND_BLOCKSIZE];
#endif /* VOXWARE */
static unsigned char playing_buffer[SND_BLOCKSIZE];
-#endif /* MSDOS */
+#endif /* !MSDOS && !WIN32 */
/* forward declaration of internal functions */
#ifdef VOXWARE
static void SoundServer_InsertNewSound(struct SoundControl);
#endif
-#ifndef VOXWARE
-#ifndef MSDOS
+
+#if !defined(VOXWARE) && !defined(MSDOS) && !defined(WIN32)
static unsigned char linear_to_ulaw(int);
static int ulaw_to_linear(unsigned char);
#endif
-#endif
+
#ifdef HPUX_AUDIO
static void HPUX_Audio_Control();
#endif
+
#ifdef MSDOS
static void SoundServer_InsertNewSound(struct SoundControl);
static void SoundServer_StopSound(int);
static void SoundServer_StopAllSounds();
#endif
+int OpenAudio(char *audio_device_name)
+{
+ int audio_fd;
+
+ /* try to open audio device in non-blocking mode */
+ if ((audio_fd = open(audio_device_name, O_WRONLY | O_NONBLOCK)) < 0)
+ return audio_fd;
+
+ /* re-open audio device in blocking mode */
+ close(audio_fd);
+ audio_fd = open(audio_device_name, O_WRONLY);
+
+ return audio_fd;
+}
+
void SoundServer()
{
int i;
-#ifndef MSDOS
+#if !defined(MSDOS) && !defined(WIN32)
struct SoundControl snd_ctrl;
fd_set sound_fdset;
playlist[i] = emptySoundControl;
playing_sounds = 0;
-#ifndef MSDOS
+#if !defined(MSDOS) && !defined(WIN32)
stereo_volume[PSND_MAX_LEFT2RIGHT] = 0;
for(i=0;i<PSND_MAX_LEFT2RIGHT;i++)
stereo_volume[i] =
/* Even if the stereo flag is used as being boolean, it must be
defined as an integer, else 'ioctl()' will fail! */
int stereo = TRUE;
+#if 0
int sample_rate = 8000;
+#else
+ int sample_rate = 22050;
+#endif
- if (playing_sounds || (sound_device=open(sound_device_name,O_WRONLY))>=0)
+ if (playing_sounds ||
+ (sound_device = OpenAudio(sound_device_name)) >= 0)
{
if (!playing_sounds) /* we just opened the audio device */
{
int wait_percent = 90; /* wait 90% of the real playing time */
int i;
- if ((sound_device=open(sound_device_name,O_WRONLY))>=0)
+ if ((sound_device = OpenAudio(sound_device_name)) >= 0)
{
playing_sounds = 1;
#endif /* !VOXWARE */
}
-#endif /* !MSDOS */
+
+#endif /* !MSDOS && !WIN32 */
+
}
#ifdef MSDOS
}
#endif /* MSDOS */
+#ifndef WIN32
static void SoundServer_InsertNewSound(struct SoundControl snd_ctrl)
{
int i, k;
}
}
}
+#endif /* !WIN32 */
/*
void SoundServer_FadeSound(int nr)
}
*/
+#ifndef WIN32
#ifdef MSDOS
static void SoundServer_StopSound(int nr)
{
#endif
}
#endif /* MSDOS */
+#endif /* !WIN32 */
#ifdef HPUX_AUDIO
static void HPUX_Audio_Control()
}
#endif /* HPUX_AUDIO */
-#ifndef VOXWARE
-#ifndef MSDOS
+#if !defined(VOXWARE) && !defined(MSDOS) && !defined(WIN32)
+
/* these two are stolen from "sox"... :) */
/*
return(sample);
}
-#endif /* !MSDOS */
-#endif /* !VOXWARE */
+#endif /* !VOXWARE && !MSDOS && !WIN32 */
/*** THE STUFF ABOVE IS ONLY USED BY THE SOUND SERVER CHILD PROCESS ***/
{
char filename[256];
char *sound_ext = "wav";
+#ifndef USE_SDL_LIBRARY
#ifndef MSDOS
byte sound_header_buffer[WAV_HEADER_SIZE];
char chunk[CHUNK_ID_LEN + 1];
int chunk_length, dummy;
FILE *file;
int i;
+#endif
#endif
sprintf(filename, "%s/%s/%s.%s",
options.ro_base_directory, SOUNDS_DIRECTORY,
snd_info->name, sound_ext);
+#ifdef USE_SDL_LIBRARY
+
+ snd_info->mix_chunk = Mix_LoadWAV(filename);
+ if (snd_info->mix_chunk == NULL)
+ {
+ Error(ERR_WARN, "cannot read sound file '%s' - no sounds", filename);
+ return FALSE;
+ }
+
+#else /* !USE_SDL_LIBRARY */
+
#ifndef MSDOS
if ((file = fopen(filename, "r")) == NULL)
if (!snd_info->sample_ptr)
{
Error(ERR_WARN, "cannot read sound file '%s' - no sounds", filename);
- return(FALSE);
+ return FALSE;
}
#endif /* MSDOS */
+#endif /* !USE_SDL_LIBRARY */
- return(TRUE);
+ return TRUE;
}
void PlaySound(int nr)
snd_ctrl.data_ptr = Sound[nr].data_ptr;
snd_ctrl.data_len = Sound[nr].data_len;
+#ifdef USE_SDL_LIBRARY
+
+ Mix_Volume(-1, SDL_MIX_MAXVOLUME / 4);
+ Mix_VolumeMusic(SDL_MIX_MAXVOLUME / 4);
+
+ Mix_PlayChannel(-1, Sound[nr].mix_chunk, (loop ? -1 : 0));
+
+#else
#ifndef MSDOS
if (write(sound_pipe[1], &snd_ctrl, sizeof(snd_ctrl))<0)
{
#else
sound_handler(snd_ctrl);
#endif
+#endif
}
void FadeSound(int nr)
snd_ctrl.stop_sound = TRUE;
}
+#ifdef USE_SDL_LIBRARY
+
+ if (SSND_FADING(method))
+ {
+ Mix_FadeOutChannel(-1, 1000);
+ Mix_FadeOutMusic(1000);
+ }
+ else
+ {
+ Mix_HaltChannel(-1);
+ Mix_HaltMusic();
+ }
+
+#else
#ifndef MSDOS
if (write(sound_pipe[1], &snd_ctrl, sizeof(snd_ctrl))<0)
{
#else
sound_handler(snd_ctrl);
#endif
+#endif
}
void FreeSounds(int num_sounds)