diff options
author | bmdhacks <bmd@bmdhacks.com> | 2025-02-13 16:01:47 -0800 |
---|---|---|
committer | bmdhacks <bmd@bmdhacks.com> | 2025-02-15 14:37:57 -0800 |
commit | 4ece0d79210c0f0351c16a0611f40308ceb8efb0 (patch) | |
tree | 7f27a77ccc27cdf0486d45feb6aa5ca484474e84 /source/core/StarBuffer.cpp | |
parent | eedd20da00e873ae188634f5e9af4a2e9efe8607 (diff) |
Streaming Audio
Problem: The current implementation reads the entire sound file in to memory in order to play it.
For OGG background music, this uses 91 Megs of RAM by injesting all ogg songs as well as all
wav assets.
Solution: Change StarAudio to play the asset from a file handle and stream it off the disk.
This results in a massive savings of RAM and doesn't really affect audio quality unless you're
doing massive disk operations such as compiling Starbound.
Diffstat (limited to 'source/core/StarBuffer.cpp')
-rw-r--r-- | source/core/StarBuffer.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/source/core/StarBuffer.cpp b/source/core/StarBuffer.cpp index 5b5b2e4..e8184e3 100644 --- a/source/core/StarBuffer.cpp +++ b/source/core/StarBuffer.cpp @@ -2,6 +2,7 @@ #include "StarMathCommon.hpp" #include "StarIODevice.hpp" #include "StarFormat.hpp" +#include "StarLogging.hpp" namespace Star { @@ -273,6 +274,18 @@ void ExternalBuffer::reset(char const* externalData, size_t len) { m_size = len; } +IODevicePtr Buffer::clone() { + auto cloned = make_shared<Buffer>(*this); + // Reset position to 0 while preserving mode and data + cloned->seek(0); + return cloned; +} + +IODevicePtr ExternalBuffer::clone() { + Logger::info("Cloning ExternalBuffer from position {}"); + return make_shared<ExternalBuffer>(*this); +} + size_t ExternalBuffer::doRead(size_t pos, char* data, size_t len) { if (len == 0) return 0; |