From 984cd9b01875ae1cfcf6fb6fa12293e9e125a73b Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Fri, 3 Apr 2015 16:48:33 -0400 Subject: CINE: Use the built-in OPL timer --- engines/cine/sound.cpp | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) (limited to 'engines/cine') diff --git a/engines/cine/sound.cpp b/engines/cine/sound.cpp index 2ac0f91cac..a20ad5d330 100644 --- a/engines/cine/sound.cpp +++ b/engines/cine/sound.cpp @@ -119,7 +119,7 @@ public: virtual int getRate() const { return _sampleRate; } void initCard(); - void update(int16 *buf, int len); + void onTimer(); void setupInstrument(const byte *data, int channel); void loadRegisterInstrument(const byte *data, AdLibRegisterSoundInstrument *reg); virtual void loadInstrument(const byte *data, AdLibSoundInstrument *asi) = 0; @@ -291,6 +291,7 @@ AdLibSoundDriver::AdLibSoundDriver(Audio::Mixer *mixer) memset(_channelsVolumeTable, 0, sizeof(_channelsVolumeTable)); memset(_instrumentsTable, 0, sizeof(_instrumentsTable)); initCard(); + _opl->start(new Common::Functor0Mem(this, &AdLibSoundDriver::onTimer), 50); _mixer->playStream(Audio::Mixer::kPlainSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); } @@ -346,8 +347,7 @@ void AdLibSoundDriver::stopAll() { } int AdLibSoundDriver::readBuffer(int16 *buffer, const int numSamples) { - update(buffer, numSamples); - return numSamples; + return _opl->readBuffer(buffer, numSamples); } void AdLibSoundDriver::initCard() { @@ -374,23 +374,9 @@ void AdLibSoundDriver::initCard() { _opl->writeReg(1, 0); } -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; - _opl->readBuffer(buf, count); - if (samplesLeft == 0) { - if (_upCb) { - (*_upCb)(_upRef); - } - samplesLeft = _sampleRate / 50; - } - buf += count; +void AdLibSoundDriver::onTimer() { + if (_upCb) { + (*_upCb)(_upRef); } } -- cgit v1.2.3