Krotos Modules 3
Loading...
Searching...
No Matches
KwidgetSynthesiser.h
Go to the documentation of this file.
1namespace krotos
2{
3 //==============================================================================
7 class KwidgetSynthSound : public SynthesiserSound
8 {
9 public:
10 KwidgetSynthSound() = default;
11 ~KwidgetSynthSound() override = default;
12
13 bool appliesToNote(int midiNoteNumber) override;
14 bool appliesToChannel(int midiChannel) override;
15
16 private:
17 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(KwidgetSynthSound)
18 };
19
20 //==============================================================================
24 class KwidgetSynthVoice : public SynthesiserVoice
25 {
26 public:
27 KwidgetSynthVoice(int idx, int numOutputChannels, std::vector<KwidgetProcessorGraph*> processors);
28 ~KwidgetSynthVoice() override = default;
29
30 bool canPlaySound(SynthesiserSound* sound) override;
31
32 void startNote(int midiNote, float velocity, SynthesiserSound* sound, int) override;
33 void stopNote(float velocity, bool allowTailOff) override;
34
35 void pitchWheelMoved(int) override;
36 void controllerMoved(int, int) override;
37
38 void renderNextBlock(AudioBuffer<float>& buffer, int startSample, int numSamples) override;
39
40 private:
41// #define USE_VOICE_DEBUG_PRINTOUT
42#ifdef USE_VOICE_DEBUG_PRINTOUT
43 bool isActive_old = false;
44#endif
45
47
48 const int m_voiceIndex;
49 AudioBuffer<float> m_workingBuffer;
50
51 Array<KwidgetProcessorGraph*> m_processors;
52
53 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(KwidgetSynthVoice)
54 };
55
56 //==============================================================================
61 class KwidgetSynth : public Synthesiser, public Timer
62 {
63 public:
64 KwidgetSynth(KwidgetProcessorGraph& mainGraph, KwidgetProcessorGraph& modulatorGraph, int voicesOffset = 0,
65 int forceNumVoices = 0, int numOutputChannels = 10);
66
67 ~KwidgetSynth() = default;
68
69 void processBlock(AudioBuffer<float>& buffer, MidiBuffer& midi);
70
73
75 void setSamePitchNoteStealingEnable(bool newState);
76
77 SynthesiserVoice* findVoiceToSteal(SynthesiserSound* soundToPlay, int midiChannel,
78 int midiNoteNumber) const override;
79
80 void noteOff(int midiChannel, int midiNoteNumber, float velocity, bool allowTailOff) override;
81
82 private:
83 const int NOTE_UP_NOTE_LENGTH_MS{100};
84
86 void timerCallback() override;
87
94 void noteOnThenDelayedNoteOff(int midiChannel, int midiNoteNumber, float velocity, bool allowTailOff);
95
104
106 std::vector<midiMessage> m_messageBuffer;
107
109
110 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(KwidgetSynth)
111 };
112} // namespace krotos
Uses juce::AudioProcessorGraph to store Kwidgets and their audio connections, and process audio throu...
Definition KwidgetProcessorGraph.h:18
A subclass of juce::Synthesiser for creating polyphonic output from a modular arrangement of Kwidgets...
Definition KwidgetSynthesiser.h:62
void processBlock(AudioBuffer< float > &buffer, MidiBuffer &midi)
Definition KwidgetSynthesiser.cpp:158
bool m_samePitchNoteStealingEnabled
Definition KwidgetSynthesiser.h:108
void setSamePitchNoteStealingEnable(bool newState)
Definition KwidgetSynthesiser.cpp:175
SynthesiserVoice * findVoiceToSteal(SynthesiserSound *soundToPlay, int midiChannel, int midiNoteNumber) const override
Definition KwidgetSynthesiser.cpp:177
void noteOnThenDelayedNoteOff(int midiChannel, int midiNoteNumber, float velocity, bool allowTailOff)
Sends a note on message, then after a delay sends a corresponding note-off message.
Definition KwidgetSynthesiser.cpp:286
int getNumActiveVoices()
Definition KwidgetSynthesiser.cpp:163
std::vector< midiMessage > m_messageBuffer
Definition KwidgetSynthesiser.h:106
void timerCallback() override
Definition KwidgetSynthesiser.cpp:275
KwidgetSynth(KwidgetProcessorGraph &mainGraph, KwidgetProcessorGraph &modulatorGraph, int voicesOffset=0, int forceNumVoices=0, int numOutputChannels=10)
Definition KwidgetSynthesiser.cpp:139
const int NOTE_UP_NOTE_LENGTH_MS
Definition KwidgetSynthesiser.h:83
void noteOff(int midiChannel, int midiNoteNumber, float velocity, bool allowTailOff) override
Definition KwidgetSynthesiser.cpp:266
Concrete subclass of juce::SynthesiserSound.
Definition KwidgetSynthesiser.h:8
bool appliesToNote(int midiNoteNumber) override
Definition KwidgetSynthesiser.cpp:3
~KwidgetSynthSound() override=default
bool appliesToChannel(int midiChannel) override
Definition KwidgetSynthesiser.cpp:4
Adapter for using KwidgetProcessorGraph objects with juce::Synthesiser.
Definition KwidgetSynthesiser.h:25
void addProcessor(KwidgetProcessorGraph *p)
Definition KwidgetSynthesiser.cpp:133
void renderNextBlock(AudioBuffer< float > &buffer, int startSample, int numSamples) override
Definition KwidgetSynthesiser.cpp:61
const int m_voiceIndex
Definition KwidgetSynthesiser.h:48
KwidgetSynthVoice(int idx, int numOutputChannels, std::vector< KwidgetProcessorGraph * > processors)
Definition KwidgetSynthesiser.cpp:6
Array< KwidgetProcessorGraph * > m_processors
Definition KwidgetSynthesiser.h:51
void startNote(int midiNote, float velocity, SynthesiserSound *sound, int) override
Definition KwidgetSynthesiser.cpp:37
void controllerMoved(int, int) override
Definition KwidgetSynthesiser.cpp:59
bool canPlaySound(SynthesiserSound *sound) override
Definition KwidgetSynthesiser.cpp:28
void stopNote(float velocity, bool allowTailOff) override
Definition KwidgetSynthesiser.cpp:44
~KwidgetSynthVoice() override=default
void pitchWheelMoved(int) override
Definition KwidgetSynthesiser.cpp:57
AudioBuffer< float > m_workingBuffer
Definition KwidgetSynthesiser.h:49
Definition AirAbsorptionFilter.cpp:2
Definition KwidgetSynthesiser.h:98
float velocity
Definition KwidgetSynthesiser.h:101
int midiChannel
Definition KwidgetSynthesiser.h:99
int midiNoteNumber
Definition KwidgetSynthesiser.h:100
bool allowTailOff
Definition KwidgetSynthesiser.h:102