Files
metabalus/src/synth/ScopeBuffer.cpp
2026-01-14 23:06:56 -06:00

22 lines
652 B
C++

#include "ScopeBuffer.h"
ScopeBuffer::ScopeBuffer(size_t size) : buffer_(size) {
}
// add a single sample to the scope buffer, called by synth
void ScopeBuffer::push(float sample) {
size_t w = writeIndex_.fetch_add(1, std::memory_order_relaxed);
buffer_[w % buffer_.size()] = sample;
}
// outputs value from the scope buffer, called by the scope widget
void ScopeBuffer::read(std::vector<float>& out) const {
size_t w = writeIndex_.load(std::memory_order_relaxed);
for (size_t i = 0; i < out.size(); i++) {
size_t idx = (w + trigger_ + i * wavelength_ / out.size()) % buffer_.size();
out[i] = buffer_[idx];
}
}