From: Holger Schemel Date: Thu, 2 Jan 2003 04:44:56 +0000 (+0100) Subject: rnd-20030102-2-src X-Git-Tag: 3.0.0^2~193 X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=commitdiff_plain;h=f4fa296527b424d80cb6ed86809986455613783c rnd-20030102-2-src --- diff --git a/src/conftime.h b/src/conftime.h index bb7f1521..e982fbad 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2003-01-02 01:11]" +#define COMPILE_DATE_STRING "[2003-01-02 05:41]" diff --git a/src/libgame/sound.c b/src/libgame/sound.c index 835adab8..214b27bf 100644 --- a/src/libgame/sound.c +++ b/src/libgame/sound.c @@ -52,12 +52,6 @@ #define SOUND_FADING_VOLUME_THRESHOLD (SOUND_FADING_VOLUME_STEP * 2) #endif -#if !defined(PLATFORM_HPUX) -#define SND_BLOCKSIZE 4096 -#else -#define SND_BLOCKSIZE 32768 -#endif - #define SND_TYPE_NONE 0 #define SND_TYPE_WAV 1 @@ -124,6 +118,7 @@ struct SampleInfo int format; void *data_ptr; /* pointer to first sample (8 or 16 bit) */ long data_len; /* number of samples, NOT number of bytes */ + int num_channels; /* mono: 1 channel, stereo: 2 channels */ }; typedef struct SampleInfo SoundInfo; typedef struct SampleInfo MusicInfo; @@ -145,6 +140,7 @@ struct SoundControl int format; void *data_ptr; /* pointer to first sample (8 or 16 bit) */ long data_len; /* number of samples, NOT number of bytes */ + int num_channels; /* mono: 1 channel, stereo: 2 channels */ #if defined(TARGET_ALLEGRO) int voice; @@ -839,10 +835,11 @@ static void Mixer_InsertSound(SoundControl snd_ctrl) return; /* copy sound sample and format information */ - snd_ctrl.type = snd_info->type; - snd_ctrl.format = snd_info->format; - snd_ctrl.data_ptr = snd_info->data_ptr; - snd_ctrl.data_len = snd_info->data_len; + snd_ctrl.type = snd_info->type; + snd_ctrl.format = snd_info->format; + snd_ctrl.data_ptr = snd_info->data_ptr; + snd_ctrl.data_len = snd_info->data_len; + snd_ctrl.num_channels = snd_info->num_channels; /* play music samples on a dedicated music channel */ if (IS_MUSIC(snd_ctrl)) @@ -1115,33 +1112,54 @@ void StartMixer(void) static void CopySampleToMixingBuffer(SoundControl *snd_ctrl, int sample_pos, int sample_size, - short *buffer_ptr) + short *buffer_base_ptr, int buffer_pos, + int num_output_channels) { - void *sample_ptr = snd_ctrl->data_ptr; - int i; + short *buffer_ptr = buffer_base_ptr + num_output_channels * buffer_pos; + int num_channels = snd_ctrl->num_channels; + int stepsize = num_channels; + int output_stepsize = num_output_channels; + int i, j; if (snd_ctrl->format == AUDIO_FORMAT_U8) - for (i=0; idata_ptr + num_channels * sample_pos; + + for (i=0; inum_channels == 1 ? 0 : i); + + for (j=0; jdata_ptr + num_channels * sample_pos; + + for (i=0; inum_channels == 1 ? 0 : i); + + for (j=0; j= mixer[i].data_len) @@ -1260,7 +1270,7 @@ static void Mixer_Main_DSP() } /* prepare final playing buffer according to system audio format */ - for(i=0; idata_len = chunk_size; + data_byte_len = chunk_size; + + snd_info->data_len = data_byte_len; snd_info->data_ptr = checked_malloc(snd_info->data_len); /* read sound data */ @@ -1694,8 +1709,8 @@ static void *Load_WAV(char *filename) return NULL; } - /* check for odd number of sample bytes (data chunk is word aligned) */ - if ((chunk_size % 2) == 1) + /* check for odd number of data bytes (data chunk is word aligned) */ + if ((data_byte_len % 2) == 1) ReadUnusedBytesFromFile(file, 1); } else /* unknown chunk -- ignore */ @@ -1719,6 +1734,29 @@ static void *Load_WAV(char *filename) snd_info->data_len /= 2; /* correct number of samples */ } + snd_info->num_channels = header.num_channels; + if (header.num_channels == 2) + snd_info->data_len /= 2; /* correct number of samples */ + +#if 0 + if (header.num_channels == 1) /* convert mono sound to stereo */ + { + void *buffer_ptr = checked_malloc(data_byte_len * 2); + void *sample_ptr = snd_info->data_ptr; + int sample_size = snd_info->data_len; + int i; + + if (snd_ctrl->format == AUDIO_FORMAT_U8) + for (i=0; itype = SND_TYPE_WAV; diff --git a/src/libgame/sound.h b/src/libgame/sound.h index 310d7b85..dcc41eac 100644 --- a/src/libgame/sound.h +++ b/src/libgame/sound.h @@ -37,6 +37,7 @@ #define AUDIO_FRAGMENT_SIZE_1024 1024 #define AUDIO_FRAGMENT_SIZE_2048 2048 #define AUDIO_FRAGMENT_SIZE_4096 4096 +#define AUDIO_FRAGMENT_SIZE_32768 32768 #define AUDIO_NUM_CHANNELS_MONO 1 #define AUDIO_NUM_CHANNELS_STEREO 2 @@ -53,7 +54,9 @@ #define DEFAULT_AUDIO_SAMPLE_RATE AUDIO_SAMPLE_RATE_22050 #endif -#if defined(PLATFORM_WIN32) +#if defined(PLATFORM_HPUX) +#define DEFAULT_AUDIO_FRAGMENT_SIZE AUDIO_FRAGMENT_SIZE_32768 +#elif defined(PLATFORM_WIN32) #define DEFAULT_AUDIO_FRAGMENT_SIZE AUDIO_FRAGMENT_SIZE_2048 #else #define DEFAULT_AUDIO_FRAGMENT_SIZE AUDIO_FRAGMENT_SIZE_512