aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/sound.cpp
diff options
context:
space:
mode:
authorSven Hesse2007-02-15 22:07:44 +0000
committerSven Hesse2007-02-15 22:07:44 +0000
commit15043066f2d7644ee7e885b1c57227bfeec34c3a (patch)
tree41a104d10d66f0edcc28e6c9d84eac9de7b0e18d /engines/gob/sound.cpp
parente3e76b59b6022054433c6c1df994b5ef97d8fa82 (diff)
downloadscummvm-rg350-15043066f2d7644ee7e885b1c57227bfeec34c3a.tar.gz
scummvm-rg350-15043066f2d7644ee7e885b1c57227bfeec34c3a.tar.bz2
scummvm-rg350-15043066f2d7644ee7e885b1c57227bfeec34c3a.zip
- Changed the speaker stuff again
- Added the spanish gob2 version from bug report #1659884 svn-id: r25615
Diffstat (limited to 'engines/gob/sound.cpp')
-rw-r--r--engines/gob/sound.cpp32
1 files changed, 31 insertions, 1 deletions
diff --git a/engines/gob/sound.cpp b/engines/gob/sound.cpp
index c39eb1165d..fd8d7488cb 100644
--- a/engines/gob/sound.cpp
+++ b/engines/gob/sound.cpp
@@ -36,6 +36,7 @@ Snd::SquareWaveStream::SquareWaveStream() {
_periodSamples = 0;
_remainingSamples = 0;
_sampleValue = 0;
+ _mixedSamples = 0;
}
void Snd::SquareWaveStream::playNote(int freq, int32 ms, uint rate) {
@@ -50,6 +51,29 @@ void Snd::SquareWaveStream::playNote(int freq, int32 ms, uint rate) {
_remainingSamples = (_rate * ms) / 1000;
_beepForever = false;
}
+ _mixedSamples = 0;
+}
+
+void Snd::SquareWaveStream::stop(uint32 milis) {
+ if (!_beepForever)
+ return;
+
+ if (milis)
+ update(milis);
+ else
+ _remainingSamples = 0;
+}
+
+void Snd::SquareWaveStream::update(uint32 milis) {
+ uint32 neededSamples;
+
+ if (!_beepForever || !_remainingSamples)
+ return;
+
+ neededSamples = (_rate * milis) / 1000;
+ _remainingSamples =
+ neededSamples > _mixedSamples ? neededSamples - _mixedSamples : 0;
+ _beepForever = false;
}
int Snd::SquareWaveStream::readBuffer(int16 *buffer, const int numSamples) {
@@ -65,6 +89,7 @@ int Snd::SquareWaveStream::readBuffer(int16 *buffer, const int numSamples) {
}
if (!_beepForever)
_remainingSamples--;
+ _mixedSamples++;
}
return numSamples;
@@ -107,10 +132,15 @@ void Snd::setBlasterPort(int16 port) {return;}
void Snd::speakerOn(int16 frequency, int32 length) {
_speakerStream.playNote(frequency, length, _vm->_mixer->getOutputRate());
+ _speakerStartTimeKey = _vm->_util->getTimeKey();
}
void Snd::speakerOff(void) {
- _speakerStream.stop();
+ _speakerStream.stop(_vm->_util->getTimeKey() - _speakerStartTimeKey);
+}
+
+void Snd::speakerOnUpdate(uint32 milis) {
+ _speakerStream.update(milis);
}
void Snd::stopSound(int16 fadeLength)