Mercurial > hg > openttd
changeset 2977:cd0eb73f2d32 draft
(svn r3552) Remove the global variable _mixer
author | tron <tron@openttd.org> |
---|---|
date | Sun, 05 Feb 2006 09:56:04 +0000 |
parents | f8b30ea461f8 |
children | 8e62af9acd41 |
files | mixer.c mixer.h sound.c sound/cocoa_s.c sound/sdl_s.c sound/win32_s.c |
diffstat | 6 files changed, 16 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/mixer.c +++ b/mixer.c @@ -5,8 +5,6 @@ #include "mixer.h" struct MixerChannel { - // Mixer - Mixer *mx; bool active; // pointer to allocated buffer memory @@ -25,10 +23,8 @@ 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 @@ mc->memory = NULL; } -void MxMixSamples(Mixer *mx, void *buffer, uint samples) +void MxMixSamples(void *buffer, uint samples) { MixerChannel *mc; @@ -87,7 +83,7 @@ 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 @@ #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 @@ 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 @@ 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 @@ bool MxInitialize(uint rate) { - static Mixer mx; - _mixer = &mx; - mx.play_rate = rate; + _play_rate = rate; return true; }
--- a/mixer.h +++ b/mixer.h @@ -3,7 +3,6 @@ #ifndef MIXER_H #define MIXER_H -typedef struct Mixer Mixer; typedef struct MixerChannel MixerChannel; enum { @@ -13,12 +12,10 @@ // MX_UNSIGNED = 8, }; -VARDEF Mixer *_mixer; +bool MxInitialize(uint rate); +void MxMixSamples(void* buffer, uint samples); -bool MxInitialize(uint rate); -void MxMixSamples(Mixer *mx, 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*);
--- a/sound.c +++ b/sound.c @@ -140,7 +140,7 @@ uint left_vol, right_vol; if (volume == 0) return; - mc = MxAllocateChannel(_mixer); + mc = MxAllocateChannel(); if (mc == NULL) return; if (!SetBankSource(mc, sound)) return;
--- a/sound/cocoa_s.c +++ b/sound/cocoa_s.c @@ -42,7 +42,7 @@ /* 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; }
--- 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)
--- a/sound/win32_s.c +++ b/sound/win32_s.c @@ -29,7 +29,7 @@ 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"); }