25 return latencyNumSamples == o.latencyNumSamples
26 && sampleRate == o.sampleRate
27 && fifo.getNumChannels() == o.fifo.getNumChannels();
31 bool hasConfiguration (
int numLatencySamples,
double preparedSampleRate,
int numberOfChannels)
const
33 return latencyNumSamples == numLatencySamples
34 && sampleRate == preparedSampleRate
35 && fifo.getNumChannels() == (choc::buffer::ChannelCount) numberOfChannels;
38 int getLatencyNumSamples()
const
40 return latencyNumSamples;
43 void setLatencyNumSamples (
int numLatencySamples)
45 assert (numLatencySamples < (196'000 * 60) &&
"Invalid latency size");
46 latencyNumSamples = numLatencySamples;
49 void prepareToPlay (
double sampleRateToUse,
int blockSize,
int numChannels)
51 sampleRate = sampleRateToUse;
52 latencyTimeSeconds = sampleToTime (latencyNumSamples, sampleRate);
54 fifo.setSize ((choc::buffer::ChannelCount) numChannels, (choc::buffer::FrameCount) (latencyNumSamples + blockSize + 1));
55 fifo.writeSilence ((choc::buffer::FrameCount) latencyNumSamples);
56 jassert (fifo.getNumReady() == latencyNumSamples);
59 void writeAudio (choc::buffer::ChannelArrayView<float> src)
61 if (fifo.getNumChannels() == 0)
64 jassert (fifo.getNumChannels() >= src.getNumChannels());
70 midi.mergeFromWithOffset (src, latencyTimeSeconds);
73 void readAudioAdding (choc::buffer::ChannelArrayView<float> dst)
75 if (fifo.getNumChannels() == 0)
78 jassert (fifo.getNumReady() >= (
int) dst.getNumFrames());
79 fifo.readAdding (dst);
82 void readAudioOverwriting (choc::buffer::ChannelArrayView<float> dst)
84 if (fifo.getNumChannels() == 0)
87 jassert (fifo.getNumReady() >= (
int) dst.getNumFrames());
88 fifo.readOverwriting (dst);
94 const double blockTimeSeconds =
sampleToTime (numSamples, sampleRate);
96 for (
int i = midi.size(); --i >= 0;)
100 if (m.getTimeStamp() <= blockTimeSeconds)
109 midi.addToTimestamps (-blockTimeSeconds);
115 jassert (m.getTimeStamp() >= 0.0);
119 void clearAudio (
int numSamples)
121 fifo.removeSamples (numSamples);
124 void clearMIDI (
int numSamples)
127 const double blockTimeSeconds =
sampleToTime (numSamples, sampleRate);
130 for (
int i = midi.size(); --i >= 0;)
131 if (midi[i].getTimeStamp() <= blockTimeSeconds)
135 midi.addToTimestamps (-blockTimeSeconds);
141 jassert (m.getTimeStamp() >= 0.0);
146 int latencyNumSamples = 0;
147 double sampleRate = 44100.0;
148 double latencyTimeSeconds = 0.0;
149 AudioFifo fifo { 1, 32 };