3#include "../dependencies/choc/platform/choc_DisableAllWarnings.h"
4#include "../dependencies/signalsmith/plot.h"
5#include "../dependencies/choc/platform/choc_ReenableAllWarnings.h"
13template <
typename SampleType>
14void plotData (
const AudioBuffer<SampleType>& input,
const AudioBuffer<SampleType>& output,
double sampleRateHz,
const std::string& plotFilePath)
16 const double bufferSizeSeconds =
static_cast <
double> (output.getNumFrames()) / sampleRateHz;
17 const double timeIncrementSeconds = 1.0 / sampleRateHz;
19 signalsmith::plot::Figure figure;
20 auto& inputSignalPlot = figure (0, 0).plot (1200, 200);
21 auto& outputSignalPlot = figure (0, 1).plot (1200, 200);
23 inputSignalPlot.y.major (0).label (
"Value");
24 outputSignalPlot.y.major (0).label (
"Value");
25 inputSignalPlot.x.major (0);
26 outputSignalPlot.x.major (0).label(
"Time (s)");
27 inputSignalPlot.title (
"Input audio");
28 outputSignalPlot.title (
"Output audio");
30 const SampleType inputSamplePeak = input.getMagnitude (0, input.getNumFrames());
31 inputSignalPlot.y.minor (inputSamplePeak).minor (-inputSamplePeak);
32 const SampleType outputSamplePeak = output.getMagnitude (0, output.getNumFrames());
33 outputSignalPlot.y.minor (outputSamplePeak).minor (-outputSamplePeak);
35 for (
double t = 0.1; t < bufferSizeSeconds + 1e-6; t += 0.1)
37 inputSignalPlot.x.minor (t);
38 outputSignalPlot.x.minor (t);
41 for (
double t = 1.0; t < bufferSizeSeconds + 1e-6; t += 1.0)
43 inputSignalPlot.x.major (t);
44 outputSignalPlot.x.major (t);
47 double timeSeconds = 0.0;
49 for (size_t channel = 0; channel < input.getNumChannels(); ++channel)
51 auto &inputSignalLine = inputSignalPlot.line();
53 for (size_t frame = 0; frame < input.getNumFrames(); ++frame)
55 inputSignalLine.add (timeSeconds, input[channel][frame]);
56 timeSeconds += timeIncrementSeconds;
62 for (size_t channel = 0; channel < output.getNumChannels(); ++channel)
64 auto &outputSignalLine = outputSignalPlot.line();
66 for (size_t frame = 0; frame < output.getNumFrames(); ++frame)
68 outputSignalLine.add (timeSeconds, output[channel][frame]);
69 timeSeconds += timeIncrementSeconds;
73 figure.write (plotFilePath);