72 if (voice->isCurrentlyPlayingNote (changedNote))
74 voice->currentlyPlayingNote = changedNote;
75 voice->notePressureChanged();
86 if (voice->isCurrentlyPlayingNote (changedNote))
88 voice->currentlyPlayingNote = changedNote;
89 voice->notePitchbendChanged();
100 if (voice->isCurrentlyPlayingNote (changedNote))
102 voice->currentlyPlayingNote = changedNote;
103 voice->noteTimbreChanged();
112 for (
auto* voice :
voices)
114 if (voice->isCurrentlyPlayingNote (changedNote))
116 voice->currentlyPlayingNote = changedNote;
117 voice->noteKeyStateChanged();
126 for (
auto i =
voices.size(); --
i >= 0;)
128 auto* voice =
voices.getUnchecked (
i);
130 if (voice->isCurrentlyPlayingNote (finishedNote))
143 for (
auto i =
voices.size(); --
i >= 0;)
144 voices.getUnchecked (
i)->setCurrentSampleRate (newRate);
149 if (
m.isController())
151 else if (
m.isProgramChange())
161 for (
auto* voice :
voices)
163 if (! voice->isActive())
167 if (stealIfNoneAvailable)
191 for (
auto* voice :
voices)
195 usableVoices.
add (voice);
204 std::sort (usableVoices.
begin(), usableVoices.
end(), Sorter());
206 if (! voice->isPlayingButReleased())
208 auto noteNumber = voice->getCurrentlyPlayingNote().initialNote;
210 if (low ==
nullptr || noteNumber < low->getCurrentlyPlayingNote().initialNote)
224 if (noteToStealVoiceFor.
isValid())
225 for (
auto* voice : usableVoices)
226 if (voice->getCurrentlyPlayingNote().initialNote == noteToStealVoiceFor.
initialNote)
230 for (
auto* voice : usableVoices)
235 for (
auto* voice : usableVoices)
236 if (voice != low && voice != top
242 for (
auto* voice : usableVoices)
243 if (voice != low && voice != top)
289 while (
voices.size() > newNumVoices)
292 voices.removeObject (voice);
305 for (
auto* voice :
voices)
310 voice->noteStopped (allowTailOff);
323 for (
auto* voice :
voices)
325 if (voice->isActive())
326 voice->renderNextBlock (buffer, startSample, numSamples);
334 for (
auto* voice :
voices)
336 if (voice->isActive())
337 voice->renderNextBlock (buffer, startSample, numSamples);
uint8_t a
Definition Spc_Cpu.h:141
Definition juce_Array.h:56
void ensureStorageAllocated(int minNumElements)
Definition juce_Array.h:1065
ElementType * begin() noexcept
Definition juce_Array.h:328
ElementType * end() noexcept
Definition juce_Array.h:344
void add(const ElementType &newElement)
Definition juce_Array.h:418
Definition juce_AudioSampleBuffer.h:34
Definition juce_MPEInstrument.h:54
void removeVoice(int index)
Definition juce_MPESynthesiser.cpp:276
void reduceNumVoices(int newNumVoices)
Definition juce_MPESynthesiser.cpp:282
virtual MPESynthesiserVoice * findFreeVoice(MPENote noteToFindVoiceFor, bool stealIfNoneAvailable) const
Definition juce_MPESynthesiser.cpp:157
CriticalSection voicesLock
Definition juce_MPESynthesiser.h:301
MPESynthesiser()
Definition juce_MPESynthesiser.cpp:26
void stopVoice(MPESynthesiserVoice *voice, MPENote noteToStop, bool allowTailOff)
Definition juce_MPESynthesiser.cpp:49
void setCurrentPlaybackSampleRate(double newRate) override
Definition juce_MPESynthesiser.cpp:135
void startVoice(MPESynthesiserVoice *voice, MPENote noteToStart)
Definition juce_MPESynthesiser.cpp:40
void notePressureChanged(MPENote changedNote) override
Definition juce_MPESynthesiser.cpp:66
void noteReleased(MPENote finishedNote) override
Definition juce_MPESynthesiser.cpp:122
void clearVoices()
Definition juce_MPESynthesiser.cpp:264
void addVoice(MPESynthesiserVoice *newVoice)
Definition juce_MPESynthesiser.cpp:257
~MPESynthesiser() override
Definition juce_MPESynthesiser.cpp:35
OwnedArray< MPESynthesiserVoice > voices
Definition juce_MPESynthesiser.h:300
virtual MPESynthesiserVoice * findVoiceToSteal(MPENote noteToStealVoiceFor=MPENote()) const
Definition juce_MPESynthesiser.cpp:173
void noteTimbreChanged(MPENote changedNote) override
Definition juce_MPESynthesiser.cpp:94
void noteAdded(MPENote newNote) override
Definition juce_MPESynthesiser.cpp:58
MPESynthesiserVoice * getVoice(int index) const
Definition juce_MPESynthesiser.cpp:270
void noteKeyStateChanged(MPENote changedNote) override
Definition juce_MPESynthesiser.cpp:108
std::atomic< bool > shouldStealVoices
Definition juce_MPESynthesiser.h:305
virtual void turnOffAllVoices(bool allowTailOff)
Definition juce_MPESynthesiser.cpp:298
uint32 lastNoteOnCounter
Definition juce_MPESynthesiser.h:306
virtual void handleProgramChange(int, int)
Definition juce_MPESynthesiser.h:173
void renderNextSubBlock(AudioBuffer< float > &outputAudio, int startSample, int numSamples) override
Definition juce_MPESynthesiser.cpp:319
void notePitchbendChanged(MPENote changedNote) override
Definition juce_MPESynthesiser.cpp:80
void handleMidiEvent(const MidiMessage &) override
Definition juce_MPESynthesiser.cpp:147
virtual void handleController(int, int, int)
Definition juce_MPESynthesiser.h:162
Definition juce_MPESynthesiserVoice.h:38
virtual void setCurrentSampleRate(double newRate)
Definition juce_MPESynthesiserVoice.h:152
MPENote getCurrentlyPlayingNote() const noexcept
Definition juce_MPESynthesiserVoice.h:51
virtual void noteStarted()=0
uint32 noteOnTime
Definition juce_MPESynthesiserVoice.h:162
virtual void noteStopped(bool allowTailOff)=0
MPENote currentlyPlayingNote
Definition juce_MPESynthesiserVoice.h:182
bool isPlayingButReleased() const noexcept
Definition juce_MPESynthesiserVoice.cpp:40
static MPEValue from7BitInt(int value) noexcept
Definition juce_MPEValue.cpp:30
Definition juce_MidiMessage.h:35
unsigned * m
Definition inflate.c:1559
register unsigned i
Definition inflate.c:1575
virtual ASIOError getSampleRate(ASIOSampleRate *sampleRate)=0
Definition carla_juce.cpp:31
CriticalSection::ScopedLockType ScopedLock
Definition juce_CriticalSection.h:186
Definition juce_MPENote.h:40
@ keyDown
Definition juce_MPENote.h:46
@ off
Definition juce_MPENote.h:45
@ keyDownAndSustained
Definition juce_MPENote.h:48
uint8 initialNote
Definition juce_MPENote.h:108
KeyState keyState
Definition juce_MPENote.h:169
bool isValid() const noexcept
Definition juce_MPENote.cpp:62
virtual void handleMidiEvent(const MidiMessage &)
Definition juce_MPESynthesiserBase.cpp:97
MPEInstrument & instrument
Definition juce_MPESynthesiserBase.h:202
virtual void setCurrentPlaybackSampleRate(double sampleRate)
Definition juce_MPESynthesiserBase.cpp:145
MPESynthesiserBase()
Definition juce_MPESynthesiserBase.cpp:26