osci-render/Source/components/VisualiserComponent.h

49 wiersze
1.6 KiB
C
Czysty Zwykły widok Historia

#pragma once
2023-11-07 18:59:57 +00:00
#define NOMINMAX
#include <algorithm>
#include <JuceHeader.h>
#include "../concurrency/BufferConsumer.h"
#include "../PluginProcessor.h"
#include "LabelledTextBox.h"
class VisualiserComponent : public juce::Component, public juce::Timer, public juce::Thread, public juce::MouseListener {
public:
VisualiserComponent(int numChannels, OscirenderAudioProcessor& p);
~VisualiserComponent() override;
void setBuffer(std::vector<float>& buffer);
void setColours(juce::Colour backgroundColour, juce::Colour waveformColour);
void paintChannel(juce::Graphics&, juce::Rectangle<float> bounds, int channel);
void paintXY(juce::Graphics&, juce::Rectangle<float> bounds);
void paint(juce::Graphics&) override;
void timerCallback() override;
void run() override;
void mouseDown(const juce::MouseEvent& event) override;
private:
const double BUFFER_LENGTH_SECS = 0.02;
const double DEFAULT_SAMPLE_RATE = 192000.0;
juce::CriticalSection lock;
std::vector<float> buffer;
2023-11-07 18:59:57 +00:00
std::vector<juce::Line<float>> prevLines;
int numChannels = 2;
juce::Colour backgroundColour, waveformColour;
OscirenderAudioProcessor& audioProcessor;
int sampleRate = DEFAULT_SAMPLE_RATE;
LabelledTextBox roughness{"Roughness", 1, 8, 1};
LabelledTextBox intensity{"Intensity", 0, 1, 0.01};
std::vector<float> tempBuffer;
int precision = 4;
std::atomic<bool> active = true;
2023-09-05 19:46:05 +00:00
std::shared_ptr<BufferConsumer> consumer;
void resetBuffer();
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(VisualiserComponent)
};