diff --git a/stepmania/src/arch/Sound/RageSoundDriver_SDL.cpp b/stepmania/src/arch/Sound/RageSoundDriver_SDL.cpp deleted file mode 100644 index c289e12f1c..0000000000 --- a/stepmania/src/arch/Sound/RageSoundDriver_SDL.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/* - * RageSoundDriver_SDL.cpp - * stepmania - * - * Created by Steve Checkoway on Fri Jun 13 2003. - * Copyright (c) 2003 Steve Checkoway. All rights reserved. - * - */ - -#include "global.h" -#include "RageSoundDriver_SDL.h" -#include "RageTimer.h" -#include "RageLog.h" -#include "RageSound.h" -#include "RageUtil.h" - -const unsigned channels = 2; -const unsigned samplerate = 44100; -const unsigned samplesize = channels*2; -const unsigned buffersize_frames = 512; /* in samples */ -const unsigned buffersize = buffersize_frames * samplesize; -const float proportion = .75; /* Make the current data 3 times the weight of the previous */ - -RageSound_SDL::RageSound_SDL() { - last_cursor_pos = -1 * buffersize_frames; - last_time = 0; - time_between = 0; - /* Do we need to init SDL_Audio? */ - initedSDL_Audio = SDL_WasInit(SDL_INIT_AUDIO) != SDL_INIT_AUDIO; - - if (initedSDL_Audio) - if (SDL_InitSubSystem(SDL_INIT_AUDIO)) { - LOG->Trace("Initializing SDL_Audio subsytem."); - RageException::ThrowNonfatal(SDL_GetError()); - } - - SDL_AudioSpec *specs = static_cast(calloc(1, sizeof(SDL_AudioSpec))); - specs->freq = samplerate; - specs->format = AUDIO_S16MSB; /* Signed 16-bit big-endian samples */ - specs->channels = channels; - specs->samples = buffersize_frames; - specs->callback = GetData; - specs->userdata = this; - if (SDL_OpenAudio(specs, NULL)) - RageException::ThrowNonfatal(SDL_GetError()); - ASSERT(specs->size == buffersize); - SDL_PauseAudio(0); -} - -RageSound_SDL::~RageSound_SDL() { - SDL_CloseAudio(); - LOG->Trace("Mixing thread shut down."); - /* Did we init SDL_Audio? */ - if (initedSDL_Audio) { - SDL_QuitSubSystem(SDL_INIT_AUDIO); - LOG->Trace("SDL_Audio subsystem quit."); - } -} - -/* This function is called by the SDL_Audio subsytem to get the data - * to output. - * Params: userdata: A pointer to the creating RageSound_SDL. - * stream: The audio buffer to fill. - * len: The length of the buffer. - */ -void RageSound_SDL::GetData(void *userdata, Uint8 *stream, int len) { - LockMutex L(SOUNDMAN->lock); - static Sint16 *buf = NULL; - static int bufsize = buffersize_frames * channels; - static SoundMixBuffer mix; - if (!buf) - buf = new Sint16[bufsize]; - RageSound_SDL *P = static_cast(userdata); - - memset(buf, 0, bufsize*sizeof(Uint16)); - - /* I don't like this but I can't think of another place to put it. */ - while (!SOUNDMAN) - SDL_Delay(10); - - for (unsigned i = 0; i < P->sounds.size(); ++i) { - if (P->sounds[i]->stopping) - continue; - - unsigned time = SDL_GetTicks(); - if (P->last_time) { - if (P->time_between) { - P->time_between = static_cast(P->time_between * (1 - proportion) + (time - P->last_time) * proportion); - } else { - P->time_between = time - P->last_time; - } - } - P->last_time = time; - P->last_cursor_pos += buffersize_frames; - int got = P->sounds[i]->snd->GetPCM(reinterpret_cast(buf), len, P->last_cursor_pos); - - mix.write(buf, got/2); - if (got < len) { - P->sounds[i]->stopping = true; - P->sounds[i]->flush_pos = P->last_cursor_pos + (got / samplesize); - } - } - - mix.read(buf); - - memcpy(stream, buf, len); -} - -void RageSound_SDL::StartMixing(RageSound *snd) { - sound *s = new sound; - s->snd = snd; - - LockMutex L(SOUNDMAN->lock); - sounds.push_back(s); -} - -void RageSound_SDL::StopMixing(RageSound *snd) { - LockMutex L(SOUNDMAN->lock); - - /* Find the sound. */ - unsigned i; - for(i = 0; i < sounds.size(); ++i) - if(sounds[i]->snd == snd) break; - if(i == sounds.size()) - { - LOG->Trace("not stopping a sound because it's not playing"); - return; - } - - delete sounds[i]; - sounds.erase(sounds.begin()+i, sounds.begin()+i+1); -} - -void RageSound_SDL::Update(float delta) { - LockMutex L(SOUNDMAN->lock); - - vectorsnds = sounds; - for (unsigned i = 0; i < snds.size(); ++i) { - if (!sounds[i]->stopping) - continue; - if (GetPosition(snds[i]->snd) < sounds[i]->flush_pos) - continue; - snds[i]->snd->StopPlaying(); - } -} - -/* Not a solution, rather a temp. hack. - * The solution is, of course, another driver. - * --Steve - */ -int RageSound_SDL::GetPosition(const RageSound *snd) const { - unsigned time = SDL_GetTicks(); - - return static_cast(last_cursor_pos + (time - last_time) / time_between * buffersize_frames); -} - -float RageSound_SDL::GetPlayLatency() const { - return (1.0f / samplerate) * (7/8); -} - diff --git a/stepmania/src/arch/Sound/RageSoundDriver_SDL.h b/stepmania/src/arch/Sound/RageSoundDriver_SDL.h deleted file mode 100644 index a8b506c7ec..0000000000 --- a/stepmania/src/arch/Sound/RageSoundDriver_SDL.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef RAGE_SOUND_SDL -#define RAGE_SOUND_SDL -/* - * RageSoundDriver_SDL.h - * stepmania - * - * Created by Steve Checkoway on Fri Jun 13 2003. - * Judicially copying from RageSoundDriver_Null.* - * Copyright (c) 2003 Steve Checkoway. All rights reserved. - * - */ - -#include "RageSound.h" -#include -#include "RageSoundDriver.h" -#include - -class RageSound_SDL: public RageSoundDriver { -private: - struct sound { - RageSound *snd; - bool stopping; - int flush_pos; - sound() { snd=NULL; stopping=false; flush_pos=0; } - }; - - vector sounds; - SDL_AudioSpec *specs; - bool initedSDL_Audio; - int last_cursor_pos; - unsigned time_between; - unsigned last_time; - -protected: - virtual void StartMixing(RageSound *snd); - virtual void StopMixing(RageSound *snd); - virtual int GetPosition(const RageSound *snd) const; - virtual void Update(float delta); - virtual float GetPlayLatency() const; - -public: - RageSound_SDL(); - virtual ~RageSound_SDL(); - static void GetData(void *userdata, Uint8 *stream, int len); -}; - -#endif /*RAGE_SOUND_SDL*/ \ No newline at end of file