scope checkpoint
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
|
||||
#include "Scope.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
ScopeBuffer::ScopeBuffer(size_t size) : buffer_(size) {
|
||||
|
||||
}
|
||||
|
||||
void ScopeBuffer::push(float sample) {
|
||||
|
||||
size_t w = writeIndex_.fetch_add(1, std::memory_order_relaxed);
|
||||
buffer_[w % buffer_.size()] = sample;
|
||||
}
|
||||
|
||||
void ScopeBuffer::read(std::vector<float>& out) {
|
||||
|
||||
size_t w = writeIndex_.load(std::memory_order_relaxed);
|
||||
for(size_t i = 0; i < buffer_.size(); i++) {
|
||||
size_t idx = (w + trigger_ + i * wavelength_ / out.size()) % buffer_.size();
|
||||
out[i] = buffer_[idx];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Scope::Scope(QQuickItem *parent) : QQuickPaintedItem(parent) {
|
||||
setAntialiasing(true);
|
||||
}
|
||||
|
||||
void Scope::paint(QPainter *painter) {
|
||||
|
||||
//std::cout << "onPaint" << std::endl;
|
||||
|
||||
static float phase = 0.0f;
|
||||
phase += 0.1f;
|
||||
float sample = sin(phase);
|
||||
|
||||
QPen pen(Qt::blue, 4);
|
||||
painter->setPen(pen);
|
||||
painter->setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
painter->drawRect(10, 10, width() - 20*sample, height() - 20*sample);
|
||||
|
||||
painter->setPen(QPen(Qt::red, 2));
|
||||
painter->drawLine(0, 0, width(), height());
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user