aboutsummaryrefslogtreecommitdiff
path: root/sound/mixer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sound/mixer.cpp')
-rw-r--r--sound/mixer.cpp55
1 files changed, 21 insertions, 34 deletions
diff --git a/sound/mixer.cpp b/sound/mixer.cpp
index 4937c91934..b47c598bad 100644
--- a/sound/mixer.cpp
+++ b/sound/mixer.cpp
@@ -38,20 +38,22 @@
* Channels used by the sound mixer.
*/
class Channel {
-protected:
+private:
SoundMixer *_mixer;
PlayingSoundHandle *_handle;
- RateConverter *_converter;
- AudioInputStream *_input;
byte _volume;
int8 _pan;
bool _paused;
+protected:
+ RateConverter *_converter;
+ AudioInputStream *_input;
+
public:
int _id;
- Channel(SoundMixer *mixer, PlayingSoundHandle *handle)
- : _mixer(mixer), _handle(handle), _converter(0), _input(0), _volume(0), _pan(0), _paused(false), _id(-1) {
+ Channel(SoundMixer *mixer, PlayingSoundHandle *handle, byte volume, int8 pan)
+ : _mixer(mixer), _handle(handle), _converter(0), _input(0), _volume(volume), _pan(pan), _paused(false), _id(-1) {
assert(mixer);
}
virtual ~Channel();
@@ -97,24 +99,20 @@ public:
#ifdef USE_MAD
class ChannelMP3 : public Channel {
+ const bool _isMusic;
public:
ChannelMP3(SoundMixer *mixer, PlayingSoundHandle *handle, File *file, uint size, byte volume, int8 pan);
- bool isMusicChannel() const { return false; }
-};
-
-class ChannelMP3CDMusic : public Channel {
-public:
- ChannelMP3CDMusic(SoundMixer *mixer, PlayingSoundHandle *handle, File *file, mad_timer_t duration, byte volume, int8 pan);
- bool isMusicChannel() const { return true; }
+ ChannelMP3(SoundMixer *mixer, PlayingSoundHandle *handle, File *file, mad_timer_t duration, byte volume, int8 pan);
+ bool isMusicChannel() const { return _isMusic; }
};
#endif // USE_MAD
#ifdef USE_VORBIS
class ChannelVorbis : public Channel {
- bool _is_cd_track;
+ const bool _isMusic;
public:
- ChannelVorbis(SoundMixer *mixer, PlayingSoundHandle *handle, OggVorbis_File *ov_file, int duration, bool is_cd_track, byte volume, int8 pan);
- bool isMusicChannel() const { return _is_cd_track; }
+ ChannelVorbis(SoundMixer *mixer, PlayingSoundHandle *handle, OggVorbis_File *ov_file, int duration, bool isMusic, byte volume, int8 pan);
+ bool isMusicChannel() const { return _isMusic; }
};
#endif // USE_VORBIS
@@ -266,7 +264,7 @@ int SoundMixer::playMP3(PlayingSoundHandle *handle, File *file, uint32 size, byt
}
int SoundMixer::playMP3CDTrack(PlayingSoundHandle *handle, File *file, mad_timer_t duration, byte volume, int8 pan) {
Common::StackLock lock(_mutex);
- return insertChannel(handle, new ChannelMP3CDMusic(this, handle, file, duration, volume, pan));
+ return insertChannel(handle, new ChannelMP3(this, handle, file, duration, volume, pan));
}
#endif
@@ -509,11 +507,9 @@ void Channel::mix(int16 *data, uint len) {
/* RAW mixer */
ChannelRaw::ChannelRaw(SoundMixer *mixer, PlayingSoundHandle *handle, void *sound, uint32 size, uint rate, byte flags, byte volume, int8 pan, int id, uint32 loopStart, uint32 loopEnd)
- : Channel(mixer, handle) {
+ : Channel(mixer, handle, volume, pan) {
_id = id;
_ptr = (byte *)sound;
- _volume = volume;
- _pan = pan;
// Create the input stream
if (flags & SoundMixer::FLAG_LOOP) {
@@ -541,9 +537,7 @@ ChannelRaw::~ChannelRaw() {
ChannelStream::ChannelStream(SoundMixer *mixer, PlayingSoundHandle *handle,
void *sound, uint32 size, uint rate,
byte flags, uint32 buffer_size, byte volume, int8 pan)
- : Channel(mixer, handle) {
- _volume = volume;
- _pan = pan;
+ : Channel(mixer, handle, volume, pan) {
assert(size <= buffer_size);
// Create the input stream
@@ -583,9 +577,7 @@ void ChannelStream::mix(int16 *data, uint len) {
#ifdef USE_MAD
ChannelMP3::ChannelMP3(SoundMixer *mixer, PlayingSoundHandle *handle, File *file, uint size, byte volume, int8 pan)
- : Channel(mixer, handle) {
- _volume = volume;
- _pan = pan;
+ : Channel(mixer, handle, volume, pan), _isMusic(false) {
// Create the input stream
_input = makeMP3Stream(file, mad_timer_zero, size);
@@ -593,10 +585,8 @@ ChannelMP3::ChannelMP3(SoundMixer *mixer, PlayingSoundHandle *handle, File *file
_converter = makeRateConverter(_input->getRate(), mixer->getOutputRate(), _input->isStereo());
}
-ChannelMP3CDMusic::ChannelMP3CDMusic(SoundMixer *mixer, PlayingSoundHandle *handle, File *file, mad_timer_t duration, byte volume, int8 pan)
- : Channel(mixer, handle) {
- _volume = volume;
- _pan = pan;
+ChannelMP3::ChannelMP3(SoundMixer *mixer, PlayingSoundHandle *handle, File *file, mad_timer_t duration, byte volume, int8 pan)
+ : Channel(mixer, handle, volume, pan), _isMusic(true) {
// Create the input stream
_input = makeMP3Stream(file, duration, 0);
@@ -606,15 +596,12 @@ ChannelMP3CDMusic::ChannelMP3CDMusic(SoundMixer *mixer, PlayingSoundHandle *hand
#endif // USE_MAD
#ifdef USE_VORBIS
-ChannelVorbis::ChannelVorbis(SoundMixer *mixer, PlayingSoundHandle *handle, OggVorbis_File *ov_file, int duration, bool is_cd_track, byte volume, int8 pan)
- : Channel(mixer, handle) {
- _volume = volume;
- _pan = pan;
+ChannelVorbis::ChannelVorbis(SoundMixer *mixer, PlayingSoundHandle *handle, OggVorbis_File *ov_file, int duration, bool isMusic, byte volume, int8 pan)
+ : Channel(mixer, handle, volume, pan), _isMusic(isMusic) {
// Create the input stream
_input = makeVorbisStream(ov_file, duration);
// Get a rate converter instance
_converter = makeRateConverter(_input->getRate(), mixer->getOutputRate(), _input->isStereo());
- _is_cd_track = is_cd_track;
}
#endif // USE_VORBIS