diff --git a/AudioPlayer.cpp b/AudioPlayer.cpp new file mode 100644 index 0000000..47ac2d5 --- /dev/null +++ b/AudioPlayer.cpp @@ -0,0 +1,99 @@ +#include "AudioPlayer.h" +#include "SDL.h" +#include "SDL_audio.h" +#include +#include +#include +#define NUM_SOUNDS 2 +SDL_AudioSpec fmt; + +AudioPlayer::AudioPlayer(void) +{ + extern void mixaudio(void *unused, Uint8 *stream, int len); + fmt.freq = 22050; + fmt.format = AUDIO_S16; + fmt.channels = 2; + fmt.samples = 1024; /* A good value for games */ + fmt.callback = mixaudio; + fmt.userdata = NULL; + + /* Open the audio device and start playing sound! */ + if ( SDL_OpenAudio(&fmt, NULL) < 0 ) { + fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError()); + exit(1); + } + SDL_PauseAudio(0); +} + +AudioPlayer::~AudioPlayer(void) +{ + SDL_CloseAudio(); +} + +struct sample { + Uint8 *data; + Uint32 dpos; + Uint32 dlen; +} sounds[NUM_SOUNDS]; + +void mixaudio(void *unused, Uint8 *stream, int len) +{ + int i; + Uint32 amount; + + for ( i=0; i (Uint32)len ) { + amount = len; + } + SDL_MixAudio(stream, &sounds[i].data[sounds[i].dpos], amount, SDL_MIX_MAXVOLUME); + sounds[i].dpos += amount; + } +} + +void AudioPlayer::PlaySound(std::string fileString) +{ + + char *file = new char[fileString.length() + 1]; + strcpy(file, fileString.c_str()); + + + int index; + SDL_AudioSpec wave; + Uint8 *data; + Uint32 dlen; + SDL_AudioCVT cvt; + + /* Look for an empty (or finished) sound slot */ + for ( index=0; index +#pragma once + +class AudioPlayer +{ +public: + AudioPlayer(void); + ~AudioPlayer(void); + void PlaySound(std::string); +}; diff --git a/G3DTest.vcproj b/G3DTest.vcproj index 79a70d6..3f6d76b 100644 --- a/G3DTest.vcproj +++ b/G3DTest.vcproj @@ -230,6 +230,10 @@ Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" > + + @@ -283,6 +287,10 @@ Name="Header Files" Filter="h;hpp;hxx;hm;inl" > + + diff --git a/content/sounds/pageturn.wav b/content/sounds/pageturn.wav new file mode 100644 index 0000000..7070da5 Binary files /dev/null and b/content/sounds/pageturn.wav differ diff --git a/main.cpp b/main.cpp index 52e23a5..4e827cd 100644 --- a/main.cpp +++ b/main.cpp @@ -16,6 +16,7 @@ #include "PhysicalInstance.h" #include "TextButtonInstance.h" #include "ImageButtonInstance.h" +#include "AudioPlayer.h" #if G3D_VER < 61000 @@ -38,6 +39,7 @@ static int FPSVal[8] = {10, 20, 30, 60, 120, 240, INT_MAX,1}; static int index = 2; static float TIMERVAL = 60.0F; static int SCOREVAL = 0; +static AudioPlayer soundSystem; static G3D::TextureRef go = NULL; static G3D::TextureRef go_ovr = NULL; static G3D::TextureRef go_dn = NULL; @@ -269,6 +271,8 @@ public: void DeleteListener::onButton1MouseClick(BaseButtonInstance* button) { + + if(selectedInstance != NULL) { for(size_t i = 0; i < instances.size(); i++) @@ -279,6 +283,9 @@ void DeleteListener::onButton1MouseClick(BaseButtonInstance* button) instances.erase(instances.begin() + i); delete deleting; selectedInstance = NULL; + soundSystem.PlaySound(GetFileInPath("/content/sounds/pageturn.wav")); + + } }