16 !aProcessor.getTreeState()->getParameterAsValue(
"slopeButtonTriggered").getValue(),
17 aProcessor.getTreeState()->getParameterAsValue(
"autoTriggered").getValue()
21 float decayTimeRelative = aProcessor.
getTreeState()->getParameterAsValue(
"decayTime").getValue();
22 decayTimeRelative = std::max(
static_cast<float>(0.05), decayTimeRelative);
28 decayTimeRelative * OSCILLOSCOPE_MAX_DECAY_TIME()));
29 aProcessor.
getTreeState()->addParameterListener(
"decayTime", decayCounter.get());
32 aProcessor.
getTreeState()->addParameterListener(
"autoTriggered", &sampleFinder);
53 currentlyDisplayedData.resize(
sampleData.size());
60 const int offset = sampleFinder.
findFirstSample(triggerLevel, currentlyDisplayedData);
61 firstSampleToPlot = currentlyDisplayedData.begin() + offset;
66 std::fill(currentlyDisplayedData.begin(), currentlyDisplayedData.end(), 0.);
67 firstSampleToPlot = currentlyDisplayedData.begin();
71void TriggeredOscilloscope::plot(juce::Graphics &g, juce::Rectangle<float> rect,
float scaler,
float offset)
74 auto data = currentlyDisplayedData.begin();
75 auto numSamples = currentlyDisplayedData.size();
78 auto w = rect.getWidth();
79 auto h = rect.getHeight();
80 auto right = rect.getRight();
81 auto center = rect.getBottom() - offset;
82 auto gain = h * scaler;
83 g.setColour(WAVEFORMCOLOUR());
86 int sampleOffset = std::distance(data, firstSampleToPlot);
89 float widthRatio = sampleOffset / numSamples;
92 for (
size_t i = 1; i < numSamples - sampleOffset; ++i)
94 auto xMapPrevious = juce::jmap(
97 float(numSamples - 1),
99 float(right * (1 - widthRatio)));
100 auto xMap = juce::jmap(
103 float(numSamples - 1),
105 float(right * (1 - widthRatio)));
107 g.drawLine({xMapPrevious,
108 center - gain * firstSampleToPlot[i - 1],
110 center - gain * firstSampleToPlot[i]});
114void TriggeredOscilloscope::subclassSpecificCallback()
117 if (decayCounter.get()->refreshNeeded())
Oscilloscope audio processor.
int getEditorRefreshRate()
juce::AudioProcessorValueTreeState * getTreeState()
OscilloscopeAudioProcessor & audioProcessor
std::vector< float > sampleData
ManualSampleFinder manualFinder
AutoSampleFinder autoFinder
int findFirstSample(float triggerLevel, std::vector< float > currentlyDisplayedData)
TriggeredOscilloscope(OscilloscopeAudioProcessor &aProcessor, int sampleRate)