diff options
-rw-r--r-- | mixer.c | 25 | ||||
-rw-r--r-- | mixer.h | 7 | ||||
-rw-r--r-- | sound.c | 2 | ||||
-rw-r--r-- | sound/cocoa_s.c | 2 | ||||
-rw-r--r-- | sound/sdl_s.c | 2 | ||||
-rw-r--r-- | sound/win32_s.c | 2 |
6 files changed, 15 insertions, 25 deletions
@@ -5,8 +5,6 @@ #include "mixer.h" struct MixerChannel { - // Mixer - Mixer *mx; bool active; // pointer to allocated buffer memory @@ -25,10 +23,8 @@ struct MixerChannel { uint flags; }; -struct Mixer { - uint32 play_rate; - MixerChannel channels[8]; -}; +static MixerChannel _channels[8]; +static uint32 _play_rate; static void mix_int8_to_int16(MixerChannel *sc, int16 *buffer, uint samples) @@ -79,7 +75,7 @@ static void MxCloseChannel(MixerChannel *mc) mc->memory = NULL; } -void MxMixSamples(Mixer *mx, void *buffer, uint samples) +void MxMixSamples(void *buffer, uint samples) { MixerChannel *mc; @@ -87,7 +83,7 @@ void MxMixSamples(Mixer *mx, void *buffer, uint samples) memset(buffer, 0, sizeof(int16) * 2 * samples); // Mix each channel - for (mc = mx->channels; mc != endof(mx->channels); mc++) { + for (mc = _channels; mc != endof(_channels); mc++) { if (mc->active) { mix_int8_to_int16(mc, buffer, samples); if (mc->samples_left == 0) MxCloseChannel(mc); @@ -104,13 +100,12 @@ void MxMixSamples(Mixer *mx, void *buffer, uint samples) #endif } -MixerChannel *MxAllocateChannel(Mixer *mx) +MixerChannel *MxAllocateChannel(void) { MixerChannel *mc; - for (mc = mx->channels; mc != endof(mx->channels); mc++) + for (mc = _channels; mc != endof(_channels); mc++) if (mc->memory == NULL) { mc->active = false; - mc->mx = mx; return mc; } return NULL; @@ -123,7 +118,7 @@ void MxSetChannelRawSrc(MixerChannel *mc, int8 *mem, uint size, uint rate, uint mc->frac_pos = 0; mc->pos = 0; - mc->frac_speed = (rate << 16) / mc->mx->play_rate; + mc->frac_speed = (rate << 16) / _play_rate; // adjust the magnitude to prevent overflow while (size & 0xFFFF0000) { @@ -131,7 +126,7 @@ void MxSetChannelRawSrc(MixerChannel *mc, int8 *mem, uint size, uint rate, uint rate = (rate >> 1) + 1; } - mc->samples_left = size * mc->mx->play_rate / rate; + mc->samples_left = size * _play_rate / rate; } void MxSetChannelVolume(MixerChannel *mc, uint left, uint right) @@ -149,8 +144,6 @@ void MxActivateChannel(MixerChannel* mc) bool MxInitialize(uint rate) { - static Mixer mx; - _mixer = &mx; - mx.play_rate = rate; + _play_rate = rate; return true; } @@ -3,7 +3,6 @@ #ifndef MIXER_H #define MIXER_H -typedef struct Mixer Mixer; typedef struct MixerChannel MixerChannel; enum { @@ -13,12 +12,10 @@ enum { // MX_UNSIGNED = 8, }; -VARDEF Mixer *_mixer; - bool MxInitialize(uint rate); -void MxMixSamples(Mixer *mx, void *buffer, uint samples); +void MxMixSamples(void* buffer, uint samples); -MixerChannel *MxAllocateChannel(Mixer *mx); +MixerChannel* MxAllocateChannel(void); void MxSetChannelRawSrc(MixerChannel *mc, int8 *mem, uint size, uint rate, uint flags); void MxSetChannelVolume(MixerChannel *mc, uint left, uint right); void MxActivateChannel(MixerChannel*); @@ -140,7 +140,7 @@ static void StartSound(uint sound, int panning, uint volume) uint left_vol, right_vol; if (volume == 0) return; - mc = MxAllocateChannel(_mixer); + mc = MxAllocateChannel(); if (mc == NULL) return; if (!SetBankSource(mc, sound)) return; diff --git a/sound/cocoa_s.c b/sound/cocoa_s.c index 5104b6ccf..177bce973 100644 --- a/sound/cocoa_s.c +++ b/sound/cocoa_s.c @@ -42,7 +42,7 @@ static AudioUnit _outputAudioUnit; /* The CoreAudio callback */ static OSStatus audioCallback(void *inRefCon, AudioUnitRenderActionFlags inActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, AudioBuffer *ioData) { - MxMixSamples(_mixer, ioData->mData, ioData->mDataByteSize / 4); + MxMixSamples(ioData->mData, ioData->mDataByteSize / 4); return noErr; } diff --git a/sound/sdl_s.c b/sound/sdl_s.c index 762be59b6..4b1da52d6 100644 --- a/sound/sdl_s.c +++ b/sound/sdl_s.c @@ -13,7 +13,7 @@ static void CDECL fill_sound_buffer(void *userdata, Uint8 *stream, int len) { - MxMixSamples(_mixer, stream, len / 4); + MxMixSamples(stream, len / 4); } static const char *SdlSoundStart(const char * const *parm) diff --git a/sound/win32_s.c b/sound/win32_s.c index 22c1b9468..a39cee985 100644 --- a/sound/win32_s.c +++ b/sound/win32_s.c @@ -29,7 +29,7 @@ static void FillHeaders(void) for (hdr = _wave_hdr; hdr != endof(_wave_hdr); hdr++) { if (!(hdr->dwFlags & WHDR_INQUEUE)) { - MxMixSamples(_mixer, hdr->lpData, hdr->dwBufferLength / 4); + MxMixSamples(hdr->lpData, hdr->dwBufferLength / 4); if (waveOutWrite(_waveout, hdr, sizeof(WAVEHDR)) != MMSYSERR_NOERROR) error("waveOutWrite failed"); } |