[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