summaryrefslogtreecommitdiff
path: root/src/resources
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2012-01-24 22:59:25 +0300
committerAndrei Karas <akaras@inbox.ru>2012-01-24 22:59:25 +0300
commit53535919d3cf62f97bc9fee28ee31e4f577d2700 (patch)
tree98b8bc6b8da941b5d2c72c598756374623ad850a /src/resources
parentb4e47fb41a19ca09c02bcd009b28cb7c3caa2256 (diff)
downloadplus-53535919d3cf62f97bc9fee28ee31e4f577d2700.tar.gz
plus-53535919d3cf62f97bc9fee28ee31e4f577d2700.tar.bz2
plus-53535919d3cf62f97bc9fee28ee31e4f577d2700.tar.xz
plus-53535919d3cf62f97bc9fee28ee31e4f577d2700.zip
Based on commit b856e8b47ab2dfd393e3c2720c5647eb66393931
Author: Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> Date: Tue Jan 24 19:14:24 2012 +0100 Stream music files directly from the archives Use Mix_LoadMUS_RW to stream music files directly from PhysFS. I kept around ResourceManager:copyFile for now, since it may have other uses.
Diffstat (limited to 'src/resources')
-rw-r--r--src/resources/music.cpp46
-rw-r--r--src/resources/music.h17
2 files changed, 16 insertions, 47 deletions
diff --git a/src/resources/music.cpp b/src/resources/music.cpp
index 7bdd51d36..b13812f18 100644
--- a/src/resources/music.cpp
+++ b/src/resources/music.cpp
@@ -26,27 +26,21 @@
#include "debug.h"
-Music::Music(Mix_Chunk *music):
- mChunk(music),
- mChannel(-1)
+Music::Music(Mix_Music *music) :
+ mMusic(music)
{
}
Music::~Music()
{
- //Mix_FreeMusic(music);
- Mix_FreeChunk(mChunk);
+ Mix_FreeMusic(mMusic);
}
Resource *Music::load(SDL_RWops *rw)
{
- // Use Mix_LoadMUS to load the raw music data
- //Mix_Music* music = Mix_LoadMUS_RW(rw); Need to be implemeted
- Mix_Chunk *tmpMusic = Mix_LoadWAV_RW(rw, 1);
-
- if (tmpMusic)
+ if (Mix_Music *music = Mix_LoadMUS_RW(rw))
{
- return new Music(tmpMusic);
+ return new Music(music);
}
else
{
@@ -55,30 +49,10 @@ Resource *Music::load(SDL_RWops *rw)
}
}
-bool Music::play(int loops)
+bool Music::play(int loops, int fadeIn)
{
- /*
- * Warning: loops should be always set to -1 (infinite) with current
- * implementation to avoid halting the playback of other samples
- */
-
- /*if (Mix_PlayMusic(music, loops))
- return true;*/
- Mix_VolumeChunk(mChunk, 120);
- mChannel = Mix_PlayChannel(-1, mChunk, loops);
-
- return mChannel != -1;
-}
-
-void Music::stop()
-{
- /*
- * Warning: very dungerous trick, it could try to stop channels occupied
- * by samples rather than the current music file
- */
-
- //Mix_HaltMusic();
-
- if (mChannel != -1)
- Mix_HaltChannel(mChannel);
+ if (fadeIn > 0)
+ return Mix_FadeInMusic(mMusic, loops, fadeIn);
+ else
+ return Mix_PlayMusic(mMusic, loops);
}
diff --git a/src/resources/music.h b/src/resources/music.h
index 6df63b2ac..88cc752bc 100644
--- a/src/resources/music.h
+++ b/src/resources/music.h
@@ -51,27 +51,22 @@ class Music : public Resource
/**
* Plays the music.
*
- * @param loops Number of times to repeat the playback.
+ * @param loops Number of times to repeat the playback (-1 means
+ * forever).
+ * @param fadeIn Duration in milliseconds to fade in the music.
*
* @return <code>true</code> if the playback started properly
* <code>false</code> otherwise.
*/
- virtual bool play(int loops);
-
- /**
- * Stops the music.
- */
- virtual void stop();
+ bool play(int loops = -1, int fadeIn = 0);
protected:
/**
* Constructor.
*/
- Music(Mix_Chunk *music);
+ Music(Mix_Music *music);
- //Mix_Music *music;
- Mix_Chunk *mChunk;
- int mChannel;
+ Mix_Music *mMusic;
};
#endif