diff --git a/src/audio/include/stream_info.hpp b/src/audio/include/stream_info.hpp index d31e035c..7cf9e847 100644 --- a/src/audio/include/stream_info.hpp +++ b/src/audio/include/stream_info.hpp @@ -16,6 +16,7 @@ #include #include +#include "esp_heap_caps.h" #include "freertos/FreeRTOS.h" #include "freertos/ringbuf.h" #include "freertos/stream_buffer.h" @@ -110,6 +111,7 @@ class OutputStream; class RawStream { public: explicit RawStream(std::size_t size); + RawStream(std::size_t size, uint32_t); ~RawStream(); auto info() -> StreamInfo& { return info_; } diff --git a/src/audio/sink_mixer.cpp b/src/audio/sink_mixer.cpp index 072dc9b7..79e6f3d3 100644 --- a/src/audio/sink_mixer.cpp +++ b/src/audio/sink_mixer.cpp @@ -20,11 +20,11 @@ static constexpr char kTag[] = "mixer"; -static constexpr std::size_t kSourceBufferLength = 4 * 1024; -static constexpr std::size_t kInputBufferLength = 4 * 1024; -static constexpr std::size_t kReformatBufferLength = 4 * 1024; +static constexpr std::size_t kSourceBufferLength = 2 * 1024; +static constexpr std::size_t kInputBufferLength = 2 * 1024; +static constexpr std::size_t kReformatBufferLength = 8 * 1024; static constexpr std::size_t kResampleBufferLength = kReformatBufferLength; -static constexpr std::size_t kQuantisedBufferLength = 2 * 1024; +static constexpr std::size_t kQuantisedBufferLength = 1 * 1024; namespace audio { @@ -35,8 +35,8 @@ SinkMixer::SinkMixer(StreamBufferHandle_t dest) source_(xStreamBufferCreate(kSourceBufferLength, 1)), sink_(dest) { input_stream_.reset(new RawStream(kInputBufferLength)); - floating_point_stream_.reset(new RawStream(kReformatBufferLength)); - resampled_stream_.reset(new RawStream(kResampleBufferLength)); + floating_point_stream_.reset(new RawStream(kReformatBufferLength, MALLOC_CAP_SPIRAM)); + resampled_stream_.reset(new RawStream(kResampleBufferLength, MALLOC_CAP_SPIRAM)); quantisation_buffer_ = { reinterpret_cast(heap_caps_malloc( diff --git a/src/audio/stream_info.cpp b/src/audio/stream_info.cpp index 6efe297e..749e880e 100644 --- a/src/audio/stream_info.cpp +++ b/src/audio/stream_info.cpp @@ -30,6 +30,14 @@ RawStream::RawStream(std::size_t size) assert(buffer_ != NULL); } +RawStream::RawStream(std::size_t size, uint32_t caps) + : info_(), + buffer_size_(size), + buffer_(reinterpret_cast( + heap_caps_malloc(size, caps))) { + assert(buffer_ != NULL); +} + RawStream::~RawStream() { heap_caps_free(buffer_); }