diff --git a/src/hqp/CMusic.cpp b/src/hqp/CMusic.cpp index 3ad9b513c..638883b05 100644 --- a/src/hqp/CMusic.cpp +++ b/src/hqp/CMusic.cpp @@ -12,10 +12,13 @@ CMusic::CMusic() { playmode = PLAY_MODE_STOP; + music_buffer = NULL; + music_pos = 0; + music_len = 0; } CMusic::~CMusic() { - // TODO Auto-generated destructor stub + unload(); } int CMusic::load(SDL_AudioSpec AudioSpec, char *musicfile) @@ -101,7 +104,8 @@ void CMusic::unload(void) void CMusic::play(void) { - playmode = PLAY_MODE_PLAY; + if(music_buffer) + playmode = PLAY_MODE_PLAY; } void CMusic::stop(void) @@ -111,10 +115,13 @@ void CMusic::stop(void) Uint8 *CMusic::passBuffer(int length) // length only refers to the part(buffer) that has to be played { - if(length < music_len-music_pos) + if(!music_buffer) + return NULL; + + if(length < music_len - music_pos) { music_pos += length; - return music_buffer+music_pos-length; + return music_buffer + music_pos - length; } else { diff --git a/src/sdl/sound/CSound.cpp b/src/sdl/sound/CSound.cpp index 4437e882f..76b7ee196 100644 --- a/src/sdl/sound/CSound.cpp +++ b/src/sdl/sound/CSound.cpp @@ -179,8 +179,7 @@ void CSound::callback(void *unused, Uint8 *stream, int len) if (g_pMusicPlayer->playing() == PLAY_MODE_PLAY) { - // TODO: this crashes for me - //SDL_MixAudio(stream, g_pMusicPlayer->passBuffer(len), len, SDL_MIX_MAXVOLUME); + SDL_MixAudio(stream, g_pMusicPlayer->passBuffer(len), len, SDL_MIX_MAXVOLUME); } for( i=0 ; i < m_mixing_channels ; i++ )