From c37df279a85b72c121318acb5c48c87624db090b Mon Sep 17 00:00:00 2001 From: Leandro Nini Date: Thu, 24 Oct 2024 20:36:56 +0200 Subject: [PATCH] Properly clear buffer (#52) --- src/audio/AudioBase.h | 3 +++ src/audio/AudioConfig.h | 2 ++ src/audio/AudioDrv.h | 1 + src/audio/IAudio.h | 1 + src/player.cpp | 2 +- 5 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/audio/AudioBase.h b/src/audio/AudioBase.h index 5f41b60..863fef5 100644 --- a/src/audio/AudioBase.h +++ b/src/audio/AudioBase.h @@ -23,6 +23,7 @@ #define AUDIOBASE_H #include +#include #include "IAudio.h" #include "AudioConfig.h" @@ -69,6 +70,8 @@ class AudioBase : public IAudio short *buffer() const override { return _sampleBuffer; } + void clearBuffer() override { std::memset(_sampleBuffer, 0, _settings.getBufBytes()); } + void getConfig(AudioConfig &cfg) const override { cfg = _settings; diff --git a/src/audio/AudioConfig.h b/src/audio/AudioConfig.h index dc5f7c5..b75efbe 100644 --- a/src/audio/AudioConfig.h +++ b/src/audio/AudioConfig.h @@ -36,6 +36,8 @@ class AudioConfig precision(16), channels(1), bufSize(0) {} + + uint_least32_t getBufBytes() const { return bufSize * channels * (precision/8); } }; #endif // AUDIOCONFIG_H diff --git a/src/audio/AudioDrv.h b/src/audio/AudioDrv.h index 605a655..c7fd57c 100644 --- a/src/audio/AudioDrv.h +++ b/src/audio/AudioDrv.h @@ -41,6 +41,7 @@ class audioDrv : public IAudio void close() override { audio->close(); } void pause() override { audio->pause(); } short *buffer() const override { return audio->buffer(); } + void clearBuffer() override { audio->clearBuffer(); } void getConfig(AudioConfig &cfg) const override { audio->getConfig(cfg); } const char *getErrorString() const override { return audio->getErrorString(); } }; diff --git a/src/audio/IAudio.h b/src/audio/IAudio.h index c4711c0..8d5594d 100644 --- a/src/audio/IAudio.h +++ b/src/audio/IAudio.h @@ -37,6 +37,7 @@ class IAudio virtual void close() = 0; virtual void pause() = 0; virtual short *buffer() const = 0; + virtual void clearBuffer() = 0; virtual void getConfig(AudioConfig &cfg) const = 0; virtual const char *getErrorString() const = 0; }; diff --git a/src/player.cpp b/src/player.cpp index 7dcd304..2963ba0 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -1026,7 +1026,7 @@ uint_least32_t ConsolePlayer::getBufSize() { // Switch audio drivers. m_timer.starting = false; m_driver.selected = m_driver.device; - memset(m_driver.selected->buffer (), 0, m_driver.cfg.bufSize); // FIXME + m_driver.selected->clearBuffer(); m_speed.current = 1; m_engine.fastForward(100); if (m_cpudebug)