forked from Cycling74/rnbo.adapter.juce
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRNBO_JuceAudioProcessorUtils.h
85 lines (64 loc) · 2.36 KB
/
RNBO_JuceAudioProcessorUtils.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//
// RNBO_JuceAudioProcessorUtils.h
//
// Created by Rob Sussman on 8/14/15.
//
//
#ifndef _RNBO_JuceAudioProcessorUtils_h
#define _RNBO_JuceAudioProcessorUtils_h
#include "RNBO.h"
#include "RNBO_TimeConverter.h"
#include <juce_audio_formats/juce_audio_formats.h>
namespace RNBO {
// TODO: chop this file, and related
namespace JuceAudioProcessorUtils
{
void fillCurrentEventsFromMidiBuffer(EventList<EventVariant>& currentEvents,
const TimeConverter& timeConverter,
juce::MidiBuffer& midiMessages);
void fillAudioInputBuffers(const std::vector<SampleValue*>& audioInputs,
size_t sampleFrames,
juce::AudioSampleBuffer& buffer);
void fillAudioOutputBuffers(const std::vector<SampleValue*>& audioOutputs,
size_t sampleFrames,
juce::AudioSampleBuffer& buffer);
void sendOutgoingMidiEvents(EventList<MidiEvent>& midiEvents,
MillisecondTime endTime,
TimeConverter timeConverter,
juce::MidiBuffer& midiMessages);
class ProcessBlockImpl
{
public:
ProcessBlockImpl(juce::AudioSampleBuffer& buffer, juce::MidiBuffer& midiMessages)
: _buffer(buffer)
, _midiMessages(midiMessages)
{
}
template <class T>
void fillCurrentEvents(EventList<EventVariant>& currentEvents, T timeConverter ) const
{
JuceAudioProcessorUtils::fillCurrentEventsFromMidiBuffer(currentEvents, timeConverter, _midiMessages);
}
void fillAudioInputBuffers(std::vector<SampleValue*>& audioInputs, size_t sampleFrames) const
{
JuceAudioProcessorUtils::fillAudioInputBuffers(audioInputs, sampleFrames, _buffer);
}
void fillAudioOutputBuffers(std::vector<SampleValue*>& audioOutputs, size_t sampleFrames) const
{
JuceAudioProcessorUtils::fillAudioOutputBuffers(audioOutputs, sampleFrames, _buffer);
RNBO_ASSERT((int) sampleFrames == _buffer.getNumSamples());
}
void sendOutgoingMidiEvents(EventList<MidiEvent>& midiEvents,
MillisecondTime endTime,
TimeConverter timeConverter)
{
JuceAudioProcessorUtils::sendOutgoingMidiEvents(midiEvents, endTime, timeConverter, _midiMessages);
}
private:
ProcessBlockImpl& operator=(const ProcessBlockImpl&) = delete;
juce::AudioSampleBuffer& _buffer;
juce::MidiBuffer& _midiMessages;
};
} // namespace JuceAudioProcessorUtils
} // namespace RNBO
#endif // _RNBO_JuceAudioProcessorUtils_h