[Scummvm-cvs-logs] scummvm master -> 7c733a538c5c333041cb35975f215d3b354468ea
dreammaster
dreammaster at scummvm.org
Mon Jun 20 13:32:30 CEST 2011
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
123f2416d8 TSAGE: Initial implementation of AudioStream interface for sound driver
f8e0ff86c7 TSAGE: Bugfix for properly decrementing _disabledServerCount
c22f824bed TSAGE: Corrections to the sound fading code
7c733a538c TSAGE: Sound is now working!
Commit: 123f2416d8074a50e2c42c83caaf94961d4c6d36
https://github.com/scummvm/scummvm/commit/123f2416d8074a50e2c42c83caaf94961d4c6d36
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-06-20T02:44:57-07:00
Commit Message:
TSAGE: Initial implementation of AudioStream interface for sound driver
Changed paths:
engines/tsage/events.cpp
engines/tsage/sound.cpp
engines/tsage/sound.h
diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp
index 94c074a..a24f654 100644
--- a/engines/tsage/events.cpp
+++ b/engines/tsage/events.cpp
@@ -48,9 +48,8 @@ bool EventsClass::pollEvent() {
_priorFrameTime = milli;
++_frameNumber;
- // Update screen and allow the sound manager to process pending sounds
+ // Update screen
g_system->updateScreen();
- SoundManager::_sfSoundServer();
}
if (!g_system->getEventManager()->pollEvent(_event)) return false;
@@ -299,9 +298,6 @@ void EventsClass::delay(int numFrames) {
++_frameNumber;
_priorFrameTime = g_system->getMillis();
-
- // Allow pending sounds to be processed
- SoundManager::_sfSoundServer();
}
g_system->updateScreen();
diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp
index 0c0d93b..24c64bd 100644
--- a/engines/tsage/sound.cpp
+++ b/engines/tsage/sound.cpp
@@ -51,6 +51,8 @@ SoundManager::SoundManager() {
_needToRethink = false;
_soTimeIndexFlag = false;
+ _updateTicksCounter = 0;
+ _eventsDelay = GAME_FRAME_TIME;
}
SoundManager::~SoundManager() {
@@ -114,6 +116,14 @@ void SoundManager::syncSounds() {
this->setMasterVol(musicVolume / 2);
}
+void SoundManager::update() {
+ ++_updateTicksCounter;
+ if (_updateTicksCounter > _eventsDelay) {
+ _sfSoundServer();
+ _updateTicksCounter = 0;
+ }
+}
+
Common::List<SoundDriverEntry> &SoundManager::buildDriverList(bool detectFlag) {
assert(__sndmgrReady);
_availableDrivers.clear();
@@ -482,6 +492,10 @@ void SoundManager::_sfUpdateVoiceStructs2() {
}
}
+void SoundManager::_sfUpdateCallback(void *ref) {
+ ((SoundManager *)ref)->update();
+}
+
/*--------------------------------------------------------------------------*/
void SoundManager::saveNotifier(bool postFlag) {
@@ -1293,7 +1307,8 @@ void SoundManager::_sfExtractGroupMask() {
bool SoundManager::_sfInstallDriver(SoundDriver *driver) {
if (!driver->open())
return false;
-
+
+ driver->setUpdateCallback(_sfUpdateCallback, (void *)&sfManager());
sfManager()._installedDrivers.push_back(driver);
driver->_groupOffset = driver->getGroupData();
driver->_groupMask = READ_LE_UINT32(driver->_groupOffset);
@@ -2376,6 +2391,8 @@ const int v440D4[48] = {
};
AdlibSoundDriver::AdlibSoundDriver(): SoundDriver() {
+ _upCb = NULL;
+ _upRef = NULL;
_minVersion = 0x102;
_maxVersion = 0x10A;
_masterVolume = 0;
@@ -2388,6 +2405,7 @@ AdlibSoundDriver::AdlibSoundDriver(): SoundDriver() {
_mixer = _vm->_mixer;
_sampleRate = _mixer->getOutputRate();
_opl = makeAdLibOPL(_sampleRate);
+ _mixer->playStream(Audio::Mixer::kPlainSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true);
Common::set_to(_channelVoiced, _channelVoiced + ADLIB_CHANNEL_COUNT, false);
memset(_channelVolume, 0, ADLIB_CHANNEL_COUNT * sizeof(int));
@@ -2404,6 +2422,7 @@ AdlibSoundDriver::AdlibSoundDriver(): SoundDriver() {
AdlibSoundDriver::~AdlibSoundDriver() {
DEALLOCATE(_patchData);
+ _mixer->stopHandle(_soundHandle);
OPLDestroy(_opl);
}
@@ -2640,4 +2659,34 @@ void AdlibSoundDriver::setFrequency(int channel) {
((dataWord >> 8) & 3) | (var2 << 2));
}
+int AdlibSoundDriver::readBuffer(int16 *buffer, const int numSamples) {
+ update(buffer, numSamples);
+ return numSamples;
+}
+
+void AdlibSoundDriver::update(int16 *buf, int len) {
+ static int samplesLeft = 0;
+ while (len != 0) {
+ int count = samplesLeft;
+ if (count > len) {
+ count = len;
+ }
+ samplesLeft -= count;
+ len -= count;
+ YM3812UpdateOne(_opl, buf, count);
+ if (samplesLeft == 0) {
+ if (_upCb) {
+ (*_upCb)(_upRef);
+ }
+ samplesLeft = _sampleRate / 50;
+ }
+ buf += count;
+ }
+}
+
+void AdlibSoundDriver::setUpdateCallback(UpdateCallback upCb, void *ref) {
+ _upCb = upCb;
+ _upRef = ref;
+}
+
} // End of namespace tSage
diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h
index 4cda2cd..ed93d33 100644
--- a/engines/tsage/sound.h
+++ b/engines/tsage/sound.h
@@ -72,6 +72,10 @@ public:
uint32 _groupMask;
const GroupData *_groupOffset;
int _driverResID;
+
+ typedef void (*UpdateCallback)(void *);
+ UpdateCallback _upCb;
+ void *_upRef;
public:
SoundDriver();
virtual ~SoundDriver() {};
@@ -101,6 +105,8 @@ public:
virtual void proc38(int channel, int cmd, int value) {} // Method #19
virtual void setPitch(int channel, int pitchBlend) {} // Method #20
virtual void proc42(int channel, int v0, int v1) {} // Method #21
+
+ virtual void setUpdateCallback(UpdateCallback upCb, void *ref) {}
};
struct VoiceStructEntryType0 {
@@ -171,6 +177,8 @@ public:
Common::List<Sound *> _soundList;
Common::List<SoundDriverEntry> _availableDrivers;
bool _needToRethink;
+ int _updateTicksCounter;
+ int _eventsDelay;
// Misc flags
bool _soTimeIndexFlag;
public:
@@ -181,6 +189,7 @@ public:
virtual void listenerSynchronize(Serializer &s);
virtual void postInit();
void syncSounds();
+ void update();
static void saveNotifier(bool postFlag);
void saveNotifierProc(bool postFlag);
@@ -243,6 +252,7 @@ public:
static void _sfProcessFading();
static void _sfUpdateVoiceStructs();
static void _sfUpdateVoiceStructs2();
+ static void _sfUpdateCallback(void *ref);
};
class Sound: public EventHandler {
@@ -387,11 +397,12 @@ public:
#define ADLIB_CHANNEL_COUNT 9
-class AdlibSoundDriver: public SoundDriver {
+class AdlibSoundDriver: public SoundDriver, Audio::AudioStream {
private:
GroupData _groupData;
Audio::Mixer *_mixer;
FM_OPL *_opl;
+ Audio::SoundHandle _soundHandle;
int _sampleRate;
byte _portContents[256];
const byte *_patchData;
@@ -428,6 +439,15 @@ public:
virtual void updateVoice(int channel);
virtual void proc38(int channel, int cmd, int value);
virtual void setPitch(int channel, int pitchBlend);
+ virtual void setUpdateCallback(UpdateCallback upCb, void *ref);
+
+ // AudioStream interface
+ virtual int readBuffer(int16 *buffer, const int numSamples);
+ virtual bool isStereo() const { return false; }
+ virtual bool endOfData() const { return false; }
+ virtual int getRate() const { return _sampleRate; }
+
+ void update(int16 *buf, int len);
};
} // End of namespace tSage
Commit: f8e0ff86c74e5ce24cf5f3d7b2308b810e3ebd41
https://github.com/scummvm/scummvm/commit/f8e0ff86c74e5ce24cf5f3d7b2308b810e3ebd41
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-06-20T02:57:33-07:00
Commit Message:
TSAGE: Bugfix for properly decrementing _disabledServerCount
Changed paths:
engines/tsage/sound.cpp
diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp
index 24c64bd..bbd1c40 100644
--- a/engines/tsage/sound.cpp
+++ b/engines/tsage/sound.cpp
@@ -215,12 +215,12 @@ void SoundManager::installDriver(int driverNum) {
// Unmute currently active sounds
for (Common::List<Sound *>::iterator i = _playList.begin(); i != _playList.end(); ++i)
(*i)->mute(false);
-
- enableSoundServer();
}
break;
}
}
+
+ enableSoundServer();
}
/**
@@ -355,7 +355,7 @@ void SoundManager::rethinkVoiceTypes() {
}
void SoundManager::_sfSoundServer() {
- if (!sfManager()._serverDisabledCount && !sfManager()._serverSuspendedCount)
+ if (sfManager()._serverDisabledCount || sfManager()._serverSuspendedCount)
return;
if (sfManager()._needToRethink) {
Commit: c22f824bedceca3dd89bded1bccbc8d2d1ef1b8c
https://github.com/scummvm/scummvm/commit/c22f824bedceca3dd89bded1bccbc8d2d1ef1b8c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-06-20T04:09:39-07:00
Commit Message:
TSAGE: Corrections to the sound fading code
Changed paths:
engines/tsage/sound.cpp
engines/tsage/sound.h
diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp
index bbd1c40..9d397c7 100644
--- a/engines/tsage/sound.cpp
+++ b/engines/tsage/sound.cpp
@@ -398,15 +398,11 @@ void SoundManager::_sfProcessFading() {
--s->_fadeCounter;
else {
if (s->_volume >= s->_fadeDest) {
- if ((s->_fadeDest - s->_volume) > s->_fadeSteps)
- s->_volume += s->_fadeSteps;
- else
- s->_volume = s->_fadeDest;
+ s->_volume = ((s->_volume - s->_fadeDest) > s->_fadeSteps) ?
+ s->_volume - s->_fadeSteps : s->_fadeDest;
} else {
- if (s->_fadeDest > s->_fadeSteps)
- s->_volume -= s->_fadeSteps;
- else
- s->_volume = s->_fadeDest;
+ s->_volume = ((s->_fadeDest - s->_volume) > s->_fadeSteps) ?
+ s->_volume + s->_fadeSteps : s->_fadeDest;
}
_sfDoUpdateVolume(s);
@@ -1606,7 +1602,7 @@ void Sound::mute(bool flag) {
_soundManager->restartSoundServer();
}
-void Sound::fade(int fadeDest, int fadeTicks, int fadeSteps, bool stopAfterFadeFlag) {
+void Sound::fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag) {
_soundManager->suspendSoundServer();
if (fadeDest > 127)
@@ -2346,11 +2342,11 @@ void ASound::unPrime() {
_action = NULL;
}
-void ASound::fade(int v1, int v2, int v3, int v4, Action *action) {
+void ASound::fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, Action *action) {
if (action)
_action = action;
- _sound.fade(v1, v2, v3, v4);
+ _sound.fade(fadeDest, fadeSteps, fadeTicks, stopAfterFadeFlag);
}
diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h
index ed93d33..9b76cd4 100644
--- a/engines/tsage/sound.h
+++ b/engines/tsage/sound.h
@@ -323,7 +323,7 @@ public:
bool isMuted() const;
void pause(bool flag);
void mute(bool flag);
- void fade(int fadeDest, int fadeTicks, int fadeSteps, bool stopAfterFadeFlag);
+ void fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag);
void setTimeIndex(uint32 timeIndex);
uint32 getTimeIndex() const;
int getCueValue() const;
@@ -380,9 +380,9 @@ public:
bool isMuted() const { return _sound.isMuted(); }
void pause(bool flag) { _sound.pause(flag); }
void mute(bool flag) { _sound.mute(flag); }
- void fadeIn() { fade(127, 5, 10, 0, NULL); }
- void fadeOut(Action *action) { fade(0, 5, 10, 1, action); }
- void fade(int v1, int v2, int v3, int v4, Action *action);
+ void fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, Action *action);
+ void fadeIn() { fade(127, 5, 10, false, NULL); }
+ void fadeOut(Action *action) { fade(0, 5, 10, true, action); }
void setTimeIndex(uint32 timeIndex) { _sound.setTimeIndex(timeIndex); }
uint32 getTimeIndex() const { return _sound.getTimeIndex(); }
void setPri(int v) { _sound.setPri(v); }
Commit: 7c733a538c5c333041cb35975f215d3b354468ea
https://github.com/scummvm/scummvm/commit/7c733a538c5c333041cb35975f215d3b354468ea
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-06-20T04:30:20-07:00
Commit Message:
TSAGE: Sound is now working!
Changed paths:
engines/tsage/sound.cpp
engines/tsage/sound.h
diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp
index 9d397c7..73eaa5f 100644
--- a/engines/tsage/sound.cpp
+++ b/engines/tsage/sound.cpp
@@ -51,8 +51,6 @@ SoundManager::SoundManager() {
_needToRethink = false;
_soTimeIndexFlag = false;
- _updateTicksCounter = 0;
- _eventsDelay = GAME_FRAME_TIME;
}
SoundManager::~SoundManager() {
@@ -117,11 +115,7 @@ void SoundManager::syncSounds() {
}
void SoundManager::update() {
- ++_updateTicksCounter;
- if (_updateTicksCounter > _eventsDelay) {
- _sfSoundServer();
- _updateTicksCounter = 0;
- }
+ _sfSoundServer();
}
Common::List<SoundDriverEntry> &SoundManager::buildDriverList(bool detectFlag) {
diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h
index 9b76cd4..722e33d 100644
--- a/engines/tsage/sound.h
+++ b/engines/tsage/sound.h
@@ -177,8 +177,6 @@ public:
Common::List<Sound *> _soundList;
Common::List<SoundDriverEntry> _availableDrivers;
bool _needToRethink;
- int _updateTicksCounter;
- int _eventsDelay;
// Misc flags
bool _soTimeIndexFlag;
public:
More information about the Scummvm-git-logs
mailing list