aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scumm/smush/smush_mixer.cpp57
-rw-r--r--scumm/smush/smush_mixer.h10
-rw-r--r--scumm/sound.cpp2
3 files changed, 27 insertions, 42 deletions
diff --git a/scumm/smush/smush_mixer.cpp b/scumm/smush/smush_mixer.cpp
index ad14292f39..195a0d9dd4 100644
--- a/scumm/smush/smush_mixer.cpp
+++ b/scumm/smush/smush_mixer.cpp
@@ -35,85 +35,68 @@ namespace Scumm {
SmushMixer::SmushMixer(SoundMixer *m) :
_mixer(m),
- _nextIndex(0),
_soundFrequency(22050) {
- for (int32 i = 0; i < SoundMixer::NUM_CHANNELS; i++) {
+ for (int32 i = 0; i < NUM_CHANNELS; i++) {
_channels[i].id = -1;
_channels[i].chan = NULL;
- _channels[i].mixer_index = 0;
+ _channels[i].handle = 0;
}
}
SmushMixer::~SmushMixer() {
- for (int32 i = 0; i < SoundMixer::NUM_CHANNELS; i++) {
- _mixer->stopChannel(_channels[i].mixer_index);
+ for (int32 i = 0; i < NUM_CHANNELS; i++) {
+ _mixer->stopChannel(_channels[i].handle);
}
}
SmushChannel *SmushMixer::findChannel(int32 track) {
debug(9, "SmushMixer::findChannel(%d)", track);
- for (int32 i = 0; i < SoundMixer::NUM_CHANNELS; i++) {
+ for (int32 i = 0; i < NUM_CHANNELS; i++) {
if (_channels[i].id == track)
return _channels[i].chan;
}
return NULL;
}
-bool SmushMixer::addChannel(SmushChannel *c) {
+void SmushMixer::addChannel(SmushChannel *c) {
int32 track = c->getTrackIdentifier();
int i;
debug(9, "SmushMixer::addChannel(%d)", track);
- for (i = 0; i < SoundMixer::NUM_CHANNELS; i++) {
+ for (i = 0; i < NUM_CHANNELS; i++) {
if (_channels[i].id == track)
- warning("SmushMixer::addChannel(%d) : channel already exists", track);
+ warning("SmushMixer::addChannel(%d): channel already exists", track);
}
- if (_nextIndex >= SoundMixer::NUM_CHANNELS)
- _nextIndex = 0;
- for (i = _nextIndex; i < SoundMixer::NUM_CHANNELS; i++) {
+ for (i = 0; i < NUM_CHANNELS; i++) {
if (_channels[i].chan == NULL || _channels[i].id == -1) {
_channels[i].chan = c;
_channels[i].id = track;
- _channels[i].mixer_index = 0;
- _nextIndex = i + 1;
- return true;
+ _channels[i].handle = 0;
+ return;
}
}
- for (i = 0; i < _nextIndex; i++) {
- if (_channels[i].chan == NULL || _channels[i].id == -1) {
- _channels[i].chan = c;
- _channels[i].id = track;
- _channels[i].mixer_index = 0;
- _nextIndex = i + 1;
- return true;
- }
- }
-
- warning("_nextIndex == %d", _nextIndex);
-
- for (i = 0; i < SoundMixer::NUM_CHANNELS; i++) {
+ for (i = 0; i < NUM_CHANNELS; i++) {
warning("channel %d : %p(%d, %d) %d %d", i, (void *)_channels[i].chan,
_channels[i].chan ? _channels[i].chan->getTrackIdentifier() : -1,
_channels[i].chan ? _channels[i].chan->isTerminated() : 1,
- _channels[i].mixer_index);
+ _channels[i].handle);
}
- error("SmushMixer::add_channel() : no more channel available");
- return false;
+ error("SmushMixer::addChannel(%d): no channel available", track);
}
bool SmushMixer::handleFrame() {
debug(9, "SmushMixer::handleFrame()");
- for (int i = 0; i < SoundMixer::NUM_CHANNELS; i++) {
+ for (int i = 0; i < NUM_CHANNELS; i++) {
if (_channels[i].id != -1) {
if (_channels[i].chan->isTerminated()) {
delete _channels[i].chan;
_channels[i].id = -1;
_channels[i].chan = NULL;
- _mixer->endStream(_channels[i].mixer_index);
+ _mixer->endStream(_channels[i].handle);
} else {
int32 rate;
bool stereo, is_short;
@@ -139,10 +122,10 @@ bool SmushMixer::handleFrame() {
}
if (_silentMixer == false) {
- if (_channels[i].mixer_index == 0) {
- _mixer->newStream(&_channels[i].mixer_index, data, size, rate, flags, 500000, 255, 0);
+ if (_channels[i].handle == 0) {
+ _mixer->newStream(&_channels[i].handle, data, size, rate, flags, 500000, 255, 0);
} else {
- _mixer->appendStream(_channels[i].mixer_index, data, size);
+ _mixer->appendStream(_channels[i].handle, data, size);
}
}
free(data);
@@ -154,7 +137,7 @@ bool SmushMixer::handleFrame() {
bool SmushMixer::stop() {
debug(9, "SmushMixer::stop()");
- for (int i = 0; i < SoundMixer::NUM_CHANNELS; i++) {
+ for (int i = 0; i < NUM_CHANNELS; i++) {
if (_channels[i].id != -1) {
delete _channels[i].chan;
_channels[i].id = -1;
diff --git a/scumm/smush/smush_mixer.h b/scumm/smush/smush_mixer.h
index 8184985257..ec54d647e5 100644
--- a/scumm/smush/smush_mixer.h
+++ b/scumm/smush/smush_mixer.h
@@ -30,16 +30,18 @@ namespace Scumm {
class SmushChannel;
class SmushMixer {
+ enum {
+ NUM_CHANNELS = 16
+ };
private:
SoundMixer *_mixer;
struct {
int id;
SmushChannel *chan;
- PlayingSoundHandle mixer_index;
- } _channels[SoundMixer::NUM_CHANNELS];
+ PlayingSoundHandle handle;
+ } _channels[NUM_CHANNELS];
- int _nextIndex;
int _soundFrequency;
public:
@@ -47,7 +49,7 @@ public:
SmushMixer(SoundMixer *);
virtual ~SmushMixer();
SmushChannel *findChannel(int32 track);
- bool addChannel(SmushChannel *c);
+ void addChannel(SmushChannel *c);
bool handleFrame();
bool stop();
bool update();
diff --git a/scumm/sound.cpp b/scumm/sound.cpp
index 795b897e1e..063331f393 100644
--- a/scumm/sound.cpp
+++ b/scumm/sound.cpp
@@ -546,7 +546,7 @@ void Sound::startTalkSound(uint32 offset, uint32 b, int mode, PlayingSoundHandle
int talkChannel = (_talkChannelHandle - 1);
if (mode == 1 && (_scumm->_gameId == GID_TENTACLE
|| (_scumm->_gameId == GID_SAMNMAX && !_scumm->isScriptRunning(99)))) {
- for (i = 0; i < _scumm->_mixer->NUM_CHANNELS; i++) {
+ for (i = 0; i < SoundMixer::NUM_CHANNELS; i++) {
if (i != talkChannel) {
_scumm->_mixer->stopChannel(i);
}