From 72ad36108ec6fbbb398b964e9e6bca090929c338 Mon Sep 17 00:00:00 2001 From: James Turk Date: Fri, 2 Jan 2004 10:37:18 +0000 Subject: [PATCH] SDL_mixer out, Audiere in --- include/ZE_Defines.h | 2 +- include/ZE_Includes.h | 4 +- include/ZE_Utility.h | 5 -- include/ZE_ZEngine.h | 37 +++++----- include/ZE_ZMusic.h | 29 ++------ include/ZE_ZSound.h | 34 ++------- include/ZE_ZSoundBase.h | 57 +++++++++++++++ include/ZEngine.h | 2 +- src/ZE_Utility.cpp | 22 ------ src/ZE_ZEngine.cpp | 131 ++++++++++++++++------------------ src/ZE_ZMusic.cpp | 141 ++----------------------------------- src/ZE_ZSound.cpp | 152 ++-------------------------------------- src/ZE_ZSoundBase.cpp | 106 ++++++++++++++++++++++++++++ 13 files changed, 269 insertions(+), 453 deletions(-) create mode 100644 include/ZE_ZSoundBase.h create mode 100644 src/ZE_ZSoundBase.cpp diff --git a/include/ZE_Defines.h b/include/ZE_Defines.h index 147f829..0e49fa6 100644 --- a/include/ZE_Defines.h +++ b/include/ZE_Defines.h @@ -19,6 +19,6 @@ #define USE_SDL_TTF #define USE_SDL_IMAGE -#define USE_SDL_MIXER +#define USE_AUDIERE #endif //__ze_defines_h__ diff --git a/include/ZE_Includes.h b/include/ZE_Includes.h index 1163041..6844e8b 100644 --- a/include/ZE_Includes.h +++ b/include/ZE_Includes.h @@ -23,8 +23,8 @@ #ifdef USE_SDL_TTF #include "SDL_ttf.h" #endif -#ifdef USE_SDL_MIXER -#include "SDL_mixer.h" +#ifdef USE_AUDIERE +#include "audiere.h" #endif #include "zlib/unzip.h" diff --git a/include/ZE_Utility.h b/include/ZE_Utility.h index 716f860..803287c 100755 --- a/include/ZE_Utility.h +++ b/include/ZE_Utility.h @@ -27,11 +27,6 @@ GLuint SurfaceToTexture(SDL_Surface *surface, GLfloat *texcoord); void FreeImage(SDL_Surface *&image); -#ifdef USE_SDL_MIXER -void FreeSound(Mix_Chunk *&chunk); -void FreeMusic(Mix_Music *&music); -#endif - #ifdef USE_SDL_TTF void FreeFont(TTF_Font *&font); #endif diff --git a/include/ZE_ZEngine.h b/include/ZE_ZEngine.h index dec1910..602b604 100644 --- a/include/ZE_ZEngine.h +++ b/include/ZE_ZEngine.h @@ -24,12 +24,12 @@ class ZRect; enum ZErrorSeverity { - ZERR_NOTE, ZERR_VERBOSE, ZERR_DEPRECIATED, ZERR_WARNING, ZERR_ERROR, - ZERR_CRITICAL + ZERR_CRITICAL, + ZERR_NOTE }; enum ZErrorLogStyle @@ -44,7 +44,7 @@ class ZEngine public: static VersionInfo Version; - private: + private: static ZEngine *sInstance; SDL_Surface *mScreen; bool mFullscreen; @@ -64,17 +64,15 @@ class ZEngine int mMouseX; int mMouseY; Uint8 mMouseB; - ZErrorLogStyle mLogStyle; - std::FILE *mErrlog; SDL_EventFilter mEventFilter; + ZErrorLogStyle mLogStyle; + ZErrorSeverity mMinSeverity; + std::FILE *mErrlog; ZRandGen mRandGen; TiXmlDocument rZRF; - -#ifdef USE_SDL_MIXER - bool mSoundInitialized; - int mSoundRate; - bool mStereo; -#endif +#ifdef USE_AUDIERE + audiere::AudioDevicePtr mAudiereDevice; +#endif //USE_AUDIERE ZEngine(); @@ -84,14 +82,14 @@ class ZEngine static ZEngine* GetInstance(); static void ReleaseInstance(); - bool CreateDisplay(int width, int height, int bpp, bool fullscreen, std::string title="ZEngine Application", - int soundRate=22050, bool stereo=false, std::string icon=""); + void InitErrorLog(ZErrorLogStyle logStyle=ZLOG_HTML, std::string logFile="errlog.html", ZErrorSeverity severityFilter=ZERR_VERBOSE); + bool InitSound(); + bool CreateDisplay(int width, int height, int bpp, bool fullscreen, std::string title="ZEngine Application", std::string icon=""); void CloseDisplay(); void ToggleFullscreen(); - SDL_Surface* Display(); void Update(); - void Clear(Uint8 red=0, Uint8 green=0, Uint8 blue=0, Uint8 alpha=255); + void ClearDisplay(Uint8 red=0, Uint8 green=0, Uint8 blue=0); #if (GFX_BACKEND == ZE_OGL) void SetGL2D(); @@ -103,14 +101,14 @@ class ZEngine void UnpauseTimer(); bool TimerIsPaused(); - double GetFrameTime(); + double GetFrameSpeed(); double GetFramerate(); bool IsActive(); void RequestQuit(); bool QuitRequested(); - + void SetReloadNeed(bool state); bool ImagesNeedReload(); @@ -129,7 +127,6 @@ class ZEngine void CheckEvents(); void SetEventFilter(SDL_EventFilter filter); - void SetErrorLog(ZErrorLogStyle logStyle, std::string logFile); void ReportError(ZErrorSeverity type, std::string desc, ...); void WriteLog(std::string str, ...); @@ -147,6 +144,10 @@ class ZEngine int GetIntResource(std::string type, std::string id, std::string element); double GetDoubleResource(std::string type, std::string id, std::string element); +#ifdef USE_AUDIERE + audiere::AudioDevicePtr GetSoundDevice(); +#endif //USE_AUDIERE + SDL_Surface* GetDisplayPointer(); bool DisplayCreated(); int DisplayWidth(); int DisplayHeight(); diff --git a/include/ZE_ZMusic.h b/include/ZE_ZMusic.h index 8223652..bbcbf7e 100644 --- a/include/ZE_ZMusic.h +++ b/include/ZE_ZMusic.h @@ -12,42 +12,23 @@ #define __ze_zmusic_h__ #include "ZE_ZEngine.h" +#include "ZE_ZSoundBase.h" -#ifdef USE_SDL_MIXER +#ifdef USE_AUDIERE namespace ZE { -class ZMusic + +class ZMusic : public ZSoundBase { - protected: - ZEngine* rEngine; - Mix_Music *rMusic; public: - static const int LoopInfinite; - ZMusic(); ZMusic(std::string filename); - virtual ~ZMusic(); - void Open(std::string filename); - void OpenFromZRF(std::string resourceId); - - void Release(); - void Play(int loopNum=0, int fadeTime=0) const; - void Pause() const; - void Unpause() const; - void Rewind() const; - void Stop(int fadeTime=0) const; - void SetVolume(int volume); - - bool IsLoaded() const; - bool IsPlaying() const; - bool IsPaused() const; - int GetVolume() const; }; } -#endif //USE_SDL_MIXER +#endif //USE_AUDIERE #endif //__ze_zmusic_h__ diff --git a/include/ZE_ZSound.h b/include/ZE_ZSound.h index fab1dda..0606ba0 100644 --- a/include/ZE_ZSound.h +++ b/include/ZE_ZSound.h @@ -2,7 +2,7 @@ This file is Part of the ZEngine Library for 2D game development. Copyright (C) 2002-2004 James Turk - Licensed under a BSD-style license. + Licensed under a BSD-style license. The maintainer of this library is James Turk (james@conceptofzero.net) and the home of this Library is http://www.zengine.sourceforge.net @@ -12,45 +12,23 @@ #define __ze_zsound_h__ #include "ZE_ZEngine.h" +#include "ZE_ZSoundBase.h" -#ifdef USE_SDL_MIXER +#ifdef USE_AUDIERE namespace ZE { -class ZSound +class ZSound : public ZSoundBase { - protected: - ZEngine* rEngine; - Mix_Chunk* rSound; - int rChannelID; - public: - static const int LoopInfinite; - ZSound(); ZSound(std::string filename); - virtual ~ZSound(); - void Open(std::string filename); - void OpenFromZip(std::string zipname, std::string filename); - void OpenFromZRF(std::string resourceId); - void Release(); - - void Play(int loopNum=0, int fadeTime=0); - void Pause() const; - void Unpause() const; - void Stop(int fadeTime=0) const; - void SetVolume(int volume); - - bool IsLoaded() const; - bool IsPlaying() const; - bool IsPaused() const; - int GetVolume() const; }; } -#endif //USE_SDL_MIXER +#endif //USE_AUDIERE -#endif //__ze_zsound_h__ +#endif //__ze_zsound_h__ \ No newline at end of file diff --git a/include/ZE_ZSoundBase.h b/include/ZE_ZSoundBase.h new file mode 100644 index 0000000..7ad11cd --- /dev/null +++ b/include/ZE_ZSoundBase.h @@ -0,0 +1,57 @@ +/******************************************************************************* + This file is Part of the ZEngine Library for 2D game development. + Copyright (C) 2002-2004 James Turk + + Licensed under a BSD-style license. + + The maintainer of this library is James Turk (james@conceptofzero.net) + and the home of this Library is http://www.zengine.sourceforge.net +*******************************************************************************/ + +#ifndef __ze_zsoundbase_h__ +#define __ze_zsoundbase_h__ + +#include "ZE_ZEngine.h" + +#ifdef USE_AUDIERE + +namespace ZE +{ + +class ZSoundBase +{ + protected: + //ZEngine* rEngine; + audiere::AudioDevicePtr rDevice; + audiere::OutputStreamPtr rStream; + + public: + ZSoundBase(); + virtual ~ZSoundBase(); + + virtual void Open(std::string filename)=0; + + void Play(bool loop=false); + void Stop(); + + void SetVolume(float volume); + void SetPan(float pan); + void SetPitch(float pitch); + void SetPosition(int position); + void SetPosition(float posPercent); + + bool IsLoaded() const; + bool IsPlaying() const; + bool IsSeekable() const; + float GetVolume() const; + float GetPan() const; + float GetPitch() const; + int GetPosition() const; + int GetLength() const; +}; + +} + +#endif //USE_AUDIERE + +#endif //__ze_zsound_h__ diff --git a/include/ZEngine.h b/include/ZEngine.h index 0da6f3d..e4c694b 100644 --- a/include/ZEngine.h +++ b/include/ZEngine.h @@ -15,7 +15,7 @@ #ifdef USE_SDL_TTF #include "ZE_ZFont.h" #endif -#ifdef USE_SDL_MIXER +#ifdef USE_AUDIERE #include "ZE_ZSound.h" #include "ZE_ZMusic.h" #endif diff --git a/src/ZE_Utility.cpp b/src/ZE_Utility.cpp index 7689ba6..29390b8 100755 --- a/src/ZE_Utility.cpp +++ b/src/ZE_Utility.cpp @@ -157,28 +157,6 @@ void FreeImage(SDL_Surface *&image) } } -#ifdef USE_SDL_MIXER - -void FreeSound(Mix_Chunk *&chunk) -{ - if(chunk) - { - Mix_FreeChunk(chunk); - chunk = NULL; - } -} - -void FreeMusic(Mix_Music *&music) -{ - if(music) - { - Mix_FreeMusic(music); - music = NULL; - } -} - -#endif - #ifdef USE_SDL_TTF void FreeFont(TTF_Font *&font) diff --git a/src/ZE_ZEngine.cpp b/src/ZE_ZEngine.cpp index 02cc6c7..85ed5ad 100644 --- a/src/ZE_ZEngine.cpp +++ b/src/ZE_ZEngine.cpp @@ -24,7 +24,8 @@ ZEngine::ZEngine() : mSecPerFrame(0.0), mNeedReload(false), mActive(false), mQuit(false), mKeyIsPressed(NULL), mMouseX(0), mMouseY(0), mMouseB(0), - mLogStyle(ZLOG_TEXT), mErrlog(stderr), mEventFilter(NULL) + mEventFilter(NULL), + mLogStyle(ZLOG_NONE), mMinSeverity(ZERR_NOTE), mErrlog(NULL) { for(int k = 0; k < SDLK_LAST; ++k) mKeyPress[k] = false; @@ -83,10 +84,50 @@ void ZEngine::ReleaseInstance() sInstance = NULL; } -bool ZEngine::CreateDisplay(int width, int height, int bpp, bool fullscreen, std::string title, - int soundRate, bool stereo, std::string icon) +void ZEngine::InitErrorLog(ZErrorLogStyle logStyle, std::string logFile, ZErrorSeverity minSeverity) +{ + mMinSeverity = minSeverity; + mLogStyle = logStyle; + + if(logStyle != ZLOG_NONE && logFile.length()) + { + //stderr & stdout directed to their appropriate streams + if(logFile == "stderr") + mErrlog = stderr; + else if(logFile == "stdout") + mErrlog = stdout; + else + mErrlog = std::fopen(logFile.c_str(),"w"); + + if(logStyle == ZLOG_HTML) + { + fprintf(mErrlog, + "ZEngine Error Log\n\n\n\n"); + fflush(mErrlog); + } + } +} + +bool ZEngine::InitSound() +{ + mAudiereDevice = audiere::OpenDevice(); + if(!mAudiereDevice) + { + ReportError(ZERR_CRITICAL,"Failed to initialize sound, AudiereDevice creation failed."); + } + return (mAudiereDevice != NULL); +} + +bool ZEngine::CreateDisplay(int width, int height, int bpp, bool fullscreen, std::string title, std::string icon) { - Uint32 sdlFlags=SDL_INIT_VIDEO|SDL_INIT_TIMER; Uint32 vidFlags=0; SDL_Surface *iconImg; bool status=true; //status of setup, only true if everything went flawlessly @@ -99,26 +140,12 @@ bool ZEngine::CreateDisplay(int width, int height, int bpp, bool fullscreen, std if(!mInitialized) { - //audio only initialized if soundRate != 0 - if(soundRate) - sdlFlags |= SDL_INIT_AUDIO; - if(SDL_Init(sdlFlags) < 0) + if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER) < 0) { ReportError(ZERR_CRITICAL,"Error initializing SDL: %s",SDL_GetError()); return false; //return now, nothing else should be called } } - -#ifdef USE_SDL_MIXER - if(!mInitialized) - { - if(Mix_OpenAudio(soundRate, AUDIO_S16SYS, stereo?2:1, 4096) < 0) //Open Audio (Stereo?2:1 is conditional for number of channels) - { - ReportError(ZERR_ERROR,"Error initializing SDL_mixer: %s",SDL_GetError()); - status = false; - } - } -#endif //USE_SDL_MIXER //set vidFlags and bpp// if(mFullscreen) @@ -204,9 +231,6 @@ bool ZEngine::CreateDisplay(int width, int height, int bpp, bool fullscreen, std { ReportError(ZERR_CRITICAL,"Error creating display: Unknown Error. %dx%d %dBPP (%s)", width, height, bpp, SDL_GetError()); -#ifdef USE_SDL_MIXER - Mix_CloseAudio(); -#endif SDL_Quit(); return false; //bail if display fails @@ -246,10 +270,6 @@ void ZEngine::CloseDisplay() TTF_Quit(); #endif -#ifdef USE_SDL_MIXER - Mix_CloseAudio(); -#endif - SDL_Quit(); if(mErrlog && mErrlog != stderr && mErrlog != stdin) @@ -269,11 +289,6 @@ void ZEngine::ToggleFullscreen() SetReloadNeed(true); //images need to be reloaded on fullscreen swap } -SDL_Surface *ZEngine::Display() -{ - return mScreen; -} - void ZEngine::Update() { #if (GFX_BACKEND == ZE_OGL) @@ -289,10 +304,9 @@ void ZEngine::Update() #if (GFX_BACKEND == ZE_OGL) -void ZEngine::Clear(Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha) +void ZEngine::ClearDisplay(Uint8 red, Uint8 green, Uint8 blue) { - GLclampf r = red/255.0f, g = green/255.0f, b = blue/255.0f, a = alpha/255.0f; - glClearColor(r,g,b,a); + glClearColor(red/255.0f,green/255.0f,blue/255.0f,1.0f); glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); } @@ -369,7 +383,7 @@ bool ZEngine::TimerIsPaused() return mPaused; } -double ZEngine::GetFrameTime() +double ZEngine::GetFrameSpeed() { return mSecPerFrame; } @@ -537,55 +551,24 @@ void ZEngine::SetEventFilter(SDL_EventFilter filter) mEventFilter = filter; } -void ZEngine::SetErrorLog(ZErrorLogStyle logStyle, std::string logFile) -{ - mLogStyle = logStyle; - - if(logStyle != ZLOG_NONE && logFile.length()) - { - //stderr & stdout directed to their appropriate streams - if(logFile == "stderr") - mErrlog = stderr; - else if(logFile == "stdout") - mErrlog = stdout; - else - mErrlog = std::fopen(logFile.c_str(),"w"); - - if(logStyle == ZLOG_HTML) - { - fprintf(mErrlog, - "ZEngine Error Log\n\n\n\n"); - fflush(mErrlog); - } - } -} - void ZEngine::ReportError(ZErrorSeverity severity, std::string desc, ...) { static std::string prefix[] = { - " ", "VERBOSE: ", "DEPRECIATED: ", "WARNING: ", "ERROR: ", "CRITICAL: " + " ", }; static std::string style[] = { - "note", "verbose", "depr", "warning", "error", - "critical" + "critical", + "note" }; if(mLogStyle != ZLOG_NONE) @@ -715,6 +698,16 @@ double ZEngine::GetDoubleResource(std::string type, std::string id, std::string return ret; } +audiere::AudioDevicePtr ZEngine::GetSoundDevice() +{ + return mAudiereDevice; +} + +SDL_Surface *ZEngine::GetDisplayPointer() +{ + return mScreen; +} + bool ZEngine::DisplayCreated() { return mInitialized; diff --git a/src/ZE_ZMusic.cpp b/src/ZE_ZMusic.cpp index 10d6008..6ce6121 100644 --- a/src/ZE_ZMusic.cpp +++ b/src/ZE_ZMusic.cpp @@ -10,156 +10,25 @@ #include "ZE_ZMusic.h" -#ifdef USE_SDL_MIXER +#ifdef USE_AUDIERE namespace ZE { -//ZMusic is a very simple class, each call basically wraps a self-explanatory function of SDL_Mixer -const int ZMusic::LoopInfinite = -1; //constant for infinite, as used by SDL_Mixer - -ZMusic::ZMusic() : - rEngine(ZEngine::GetInstance()), - rMusic(NULL) +ZMusic::ZMusic() { } -ZMusic::ZMusic(std::string filename) : - rEngine(ZEngine::GetInstance()), - rMusic(NULL) +ZMusic::ZMusic(std::string filename) : ZSoundBase() { Open(filename); } -ZMusic::~ZMusic() -{ - Release(); -} - void ZMusic::Open(std::string filename) { - Release(); - - rMusic = Mix_LoadMUS(filename.c_str()); - - if(!rMusic) - rEngine->ReportError(ZERR_WARNING,"Could not load %s",filename.c_str()); -} - -void ZMusic::OpenFromZRF(std::string resourceId) -{ - std::string filename = rEngine->GetStringResource("music",resourceId,"filename"); - if(filename.length()) - Open(filename); - else - rEngine->ReportError(ZERR_WARNING,"Failed to load music resource '%s'",resourceId.c_str()); -} - -void ZMusic::Release() -{ - Mix_HaltMusic(); - FreeMusic(rMusic); -} - -void ZMusic::Play(int loopNum, int fadeTime) const -{ - if(Mix_PlayingMusic()) //stop currently playing music - Mix_HaltMusic(); - - if(rMusic) - { - if(fadeTime) - Mix_FadeInMusic(rMusic, loopNum, fadeTime); - else - Mix_PlayMusic(rMusic, loopNum); - } - else - rEngine->ReportError(ZERR_VERBOSE,"Called ZMusic::Play with no music loaded."); -} - -void ZMusic::Pause() const -{ - if(rMusic) - Mix_PauseMusic(); - else - rEngine->ReportError(ZERR_VERBOSE,"Called ZMusic::Pause with no music loaded."); -} - -void ZMusic::Unpause() const -{ - if(rMusic) - Mix_ResumeMusic(); - else - rEngine->ReportError(ZERR_VERBOSE,"Called ZMusic::Unpause with no music loaded."); -} - -void ZMusic::Rewind() const -{ - if(rMusic) - Mix_RewindMusic(); - else - rEngine->ReportError(ZERR_VERBOSE,"Called ZMusic::Rewind with no music loaded."); -} - -void ZMusic::Stop(int fadeTime) const -{ - if(rMusic) - { - if(fadeTime) - Mix_FadeOutMusic(fadeTime); - else - Mix_HaltMusic(); - } - else - rEngine->ReportError(ZERR_VERBOSE,"Called ZMusic::Stop with no music loaded."); -} - -void ZMusic::SetVolume(int volume) -{ - if(rMusic) - Mix_VolumeMusic(volume); - else - rEngine->ReportError(ZERR_VERBOSE,"Called ZMusic::SetVolume with no music loaded."); -} - -bool ZMusic::IsLoaded() const -{ - return rMusic != NULL; -} - -bool ZMusic::IsPlaying() const -{ - if(rMusic) - return Mix_PlayingMusic() > 0; - else - { - rEngine->ReportError(ZERR_VERBOSE,"Called ZMusic::IsPlaying with no music loaded."); - return false; - } -} - -bool ZMusic::IsPaused() const -{ - if(rMusic) - return Mix_PausedMusic() > 0; - else - { - rEngine->ReportError(ZERR_VERBOSE,"Called ZMusic::IsPaused with no music loaded."); - return false; - } -} - -int ZMusic::GetVolume() const -{ - if(rMusic) - return Mix_VolumeMusic(-1); - else - { - rEngine->ReportError(ZERR_VERBOSE,"Called ZMusic::GetVolume with no music loaded."); - return false; - } + rStream = audiere::OpenSound(rDevice, filename.c_str(), true); } } -#endif +#endif diff --git a/src/ZE_ZSound.cpp b/src/ZE_ZSound.cpp index 34fe9e8..638f30e 100644 --- a/src/ZE_ZSound.cpp +++ b/src/ZE_ZSound.cpp @@ -9,167 +9,25 @@ *******************************************************************************/ #include "ZE_ZSound.h" +#include "ZE_ZSoundBase.h" -#ifdef USE_SDL_MIXER +#ifdef USE_AUDIERE namespace ZE { -//ZSound is almost exactly like ZMusic, when making changes check if that change should -//be applied to ZMusic as well, roughly 90% of the time it should be. - -const int ZSound::LoopInfinite = -1; - -ZSound::ZSound() : - rEngine(ZEngine::GetInstance()), - rSound(NULL), - rChannelID(-1) //request channel ID +ZSound::ZSound() { } -ZSound::ZSound(std::string filename) : - rEngine(ZEngine::GetInstance()), - rSound(NULL), - rChannelID(-1) //request channel ID +ZSound::ZSound(std::string filename) : ZSoundBase() { Open(filename); } -ZSound::~ZSound() -{ - Release(); -} - void ZSound::Open(std::string filename) { - Release(); - rSound = Mix_LoadWAV(filename.c_str()); - - if(!rSound) - rEngine->ReportError(ZERR_ERROR,"Could not load %s",filename.c_str()); -} - -void ZSound::OpenFromZip(std::string zipname, std::string filename) -{ - SDL_RWops *rw = RWFromZip(zipname,filename); - if(rw) - { - rSound = Mix_LoadWAV_RW(rw,0); - delete []rw->hidden.mem.base; //must free buffer - SDL_FreeRW(rw); - } - - if(!rSound) - rEngine->ReportError(ZERR_WARNING,"Could not load %s from %s",filename.c_str(),zipname.c_str()); -} - -void ZSound::OpenFromZRF(std::string resourceId) -{ - std::string filename = rEngine->GetStringResource("sound",resourceId,"filename"); - if(filename.length()) - Open(filename); - else - rEngine->ReportError(ZERR_WARNING,"Failed to load sound resource '%s'",resourceId.c_str()); -} - -void ZSound::Release() -{ - if(rChannelID >= 0) - Mix_HaltChannel(rChannelID); - FreeSound(rSound); -} - -void ZSound::Play(int loopNum, int fadeTime) -{ - if(rChannelID >= 0 && Mix_Playing(rChannelID)) //stop currently playing sound - Mix_HaltChannel(rChannelID); - - if(rSound) - { - if(fadeTime) - rChannelID = Mix_FadeInChannel(rChannelID, rSound, loopNum, fadeTime); - else - rChannelID = Mix_PlayChannel(rChannelID, rSound, loopNum); - } - else if(!rSound) - rEngine->ReportError(ZERR_VERBOSE,"Called ZSound::Play with no sound effect loaded."); -} - -void ZSound::Pause() const -{ - if(rSound && rChannelID >= 0) - Mix_Pause(rChannelID); - else if(!rSound) - rEngine->ReportError(ZERR_VERBOSE,"Called ZSound::Pause with no sound effect loaded."); -} - -void ZSound::Unpause() const -{ - if(rSound && rChannelID >= 0) - Mix_Resume(rChannelID); - else if(!rSound) - rEngine->ReportError(ZERR_VERBOSE,"Called ZSound::Unpause with no sound effect loaded."); - -} - -void ZSound::Stop(int fadeTime) const -{ - if(rSound && rChannelID >= 0) - { - if(fadeTime) - Mix_FadeOutChannel(rChannelID,fadeTime); - else - Mix_HaltChannel(rChannelID); - } - else if(!rSound) - rEngine->ReportError(ZERR_VERBOSE,"Called ZSound::Stop with no sound effect loaded."); -} - -void ZSound::SetVolume(int volume) -{ - if(rSound) - Mix_VolumeChunk(rSound,volume); - else - rEngine->ReportError(ZERR_VERBOSE,"Called ZSound::SetVolume with no sound effect loaded."); -} - -bool ZSound::IsLoaded() const -{ - return rSound != NULL; -} - -bool ZSound::IsPlaying() const -{ - if(rSound && rChannelID >= 0) - return Mix_Playing(rChannelID) > 0; - else - { - if(rChannelID >= 0) - rEngine->ReportError(ZERR_VERBOSE,"Called ZSound::IsPlaying with no sound effect loaded."); - return false; - } -} - -bool ZSound::IsPaused() const -{ - if(rSound && rChannelID >= 0) - return Mix_Paused(rChannelID) > 0; - else - { - rEngine->ReportError(ZERR_VERBOSE,"Called ZSound::IsPaused with no sound effect loaded."); - return false; - } -} - -int ZSound::GetVolume() const -{ - if(rSound) - return Mix_VolumeChunk(rSound,-1); - else - { - rEngine->ReportError(ZERR_VERBOSE,"Called ZSound::GetVolume with no sound effect loaded."); - return -1; - } + rStream = audiere::OpenSound(rDevice, filename.c_str(), false); } } diff --git a/src/ZE_ZSoundBase.cpp b/src/ZE_ZSoundBase.cpp new file mode 100644 index 0000000..dbed83c --- /dev/null +++ b/src/ZE_ZSoundBase.cpp @@ -0,0 +1,106 @@ +/******************************************************************************* + This file is Part of the ZEngine Library for 2D game development. + Copyright (C) 2002-2004 James Turk + + Licensed under a BSD-style license. + + The maintainer of this library is James Turk (james@conceptofzero.net) + and the home of this Library is http://www.zengine.sourceforge.net +*******************************************************************************/ + +#include "ZE_ZSoundBase.h" + +#ifdef USE_AUDIERE + +namespace ZE +{ + +ZSoundBase::ZSoundBase() +{ + rDevice = ZEngine::GetInstance()->GetSoundDevice(); +} + +ZSoundBase::~ZSoundBase() +{ +} + +void ZSoundBase::Play(bool loop) +{ + rStream->play(); + rStream->setRepeat(true); +} + +void ZSoundBase::Stop() +{ + rStream->stop(); +} + +void ZSoundBase::SetVolume(float volume) +{ + rStream->setVolume(volume); +} + +void ZSoundBase::SetPan(float pan) +{ + rStream->setPan(pan); +} + +void ZSoundBase::SetPitch(float pitch) +{ + rStream->setPitchShift(pitch); +} + +void ZSoundBase::SetPosition(int position) +{ + rStream->setPosition(position); +} + +void ZSoundBase::SetPosition(float posPercent) +{ + rStream->setPosition(static_cast(posPercent*rStream->getLength())); +} + +bool ZSoundBase::IsLoaded() const +{ + return (rStream != NULL); +} + +bool ZSoundBase::IsPlaying() const +{ + return rStream->isPlaying(); +} + +bool ZSoundBase::IsSeekable() const +{ + return rStream->isSeekable(); +} + +float ZSoundBase::GetVolume() const +{ + return rStream->getVolume(); +} + +float ZSoundBase::GetPan() const +{ + return rStream->getPan(); +} + +float ZSoundBase::GetPitch() const +{ + return rStream->getPitchShift(); +} + +int ZSoundBase::GetPosition() const +{ + return rStream->getPosition(); +} + +int ZSoundBase::GetLength() const +{ + return rStream->getLength(); +} + + +} + +#endif