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,
const std::string& plotFilePath)
19 hassert (input.hasSampleRate());
20 hassert (output.hasSampleRate());
21 hassert (! floatsEqual (input.getSampleRateHz(), 0.0));
22 hassert (! floatsEqual (output.getSampleRateHz(), 0.0));
23 hassert (floatsEqual (input.getSampleRateHz(), output.getSampleRateHz()));
25 const double bufferSizeSeconds = output.getLengthSeconds();
26 const double timeIncrementSeconds = 1.0 / output.getSampleRateHz();
28 signalsmith::plot::Figure figure;
29 auto& inputSignalPlot = figure (0, 0).plot (1200, 200);
30 auto& outputSignalPlot = figure (0, 1).plot (1200, 200);
32 inputSignalPlot.y.major (0).label (
"Value");
33 outputSignalPlot.y.major (0).label (
"Value");
34 inputSignalPlot.x.major (0);
35 outputSignalPlot.x.major (0).label(
"Time (s)");
36 inputSignalPlot.title (
"Input audio");
37 outputSignalPlot.title (
"Output audio");
39 const SampleType inputSamplePeak = input.getMagnitude (0, input.getNumFrames());
40 inputSignalPlot.y.minor (inputSamplePeak).minor (-inputSamplePeak);
41 const SampleType outputSamplePeak = output.getMagnitude (0, output.getNumFrames());
42 outputSignalPlot.y.minor (outputSamplePeak).minor (-outputSamplePeak);
44 for (
double t = 0.1; t < bufferSizeSeconds + 1e-6; t += 0.1)
46 inputSignalPlot.x.minor (t);
47 outputSignalPlot.x.minor (t);
50 for (
double t = 1.0; t < bufferSizeSeconds + 1e-6; t += 1.0)
52 inputSignalPlot.x.major (t);
53 outputSignalPlot.x.major (t);
56 double timeSeconds = 0.0;
58 for (size_t channel = 0; channel < input.getNumChannels(); ++channel)
60 auto &inputSignalLine = inputSignalPlot.line();
62 for (size_t frame = 0; frame < input.getNumFrames(); ++frame)
64 inputSignalLine.add (timeSeconds, input[channel][frame]);
65 timeSeconds += timeIncrementSeconds;
71 for (size_t channel = 0; channel < output.getNumChannels(); ++channel)
73 auto &outputSignalLine = outputSignalPlot.line();
75 for (size_t frame = 0; frame < output.getNumFrames(); ++frame)
77 outputSignalLine.add (timeSeconds, output[channel][frame]);
78 timeSeconds += timeIncrementSeconds;
82 figure.write (plotFilePath);
Container for audio data.
#define hassert(condition)
Triggers a HartAssertException if the condition is false