OpenShot Audio Library | OpenShotAudio 0.4.0
Loading...
Searching...
No Matches
juce_MPESynthesiserBase.h
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 The code included in this file is provided under the terms of the ISC license
11 http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12 To use, copy, modify, and/or distribute this software for any purpose with or
13 without fee is hereby granted provided that the above copyright notice and
14 this permission notice appear in all copies.
15
16 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18 DISCLAIMED.
19
20 ==============================================================================
21*/
22
23namespace juce
24{
25
26//==============================================================================
47{
48public:
49 //==============================================================================
52
61
62 //==============================================================================
66 MPEZoneLayout getZoneLayout() const noexcept;
67
72 void setZoneLayout (MPEZoneLayout newLayout);
73
74 //==============================================================================
78 virtual void setCurrentPlaybackSampleRate (double sampleRate);
79
83 double getSampleRate() const noexcept { return sampleRate; }
84
85 //==============================================================================
99 template <typename floatType>
100 void renderNextBlock (AudioBuffer<floatType>& outputAudio,
101 const MidiBuffer& inputMidi,
102 int startSample,
103 int numSamples);
104
105 //==============================================================================
117 virtual void handleMidiEvent (const MidiMessage&);
118
119 //==============================================================================
140 void setMinimumRenderingSubdivisionSize (int numSamples, bool shouldBeStrict = false) noexcept;
141
142 //==============================================================================
153 void enableLegacyMode (int pitchbendRange = 2,
154 Range<int> channelRange = Range<int> (1, 17));
155
157 bool isLegacyModeEnabled() const noexcept;
158
160 Range<int> getLegacyModeChannelRange() const noexcept;
161
163 void setLegacyModeChannelRange (Range<int> channelRange);
164
166 int getLegacyModePitchbendRange() const noexcept;
167
169 void setLegacyModePitchbendRange (int pitchbendRange);
170
171 //==============================================================================
172 using TrackingMode = MPEInstrument::TrackingMode;
173
175 void setPressureTrackingMode (TrackingMode modeToUse);
176
178 void setPitchbendTrackingMode (TrackingMode modeToUse);
179
181 void setTimbreTrackingMode (TrackingMode modeToUse);
182
184 //==============================================================================
188 virtual void renderNextSubBlock (AudioBuffer<float>& outputAudio,
189 int startSample,
190 int numSamples) = 0;
191
195 virtual void renderNextSubBlock (AudioBuffer<double>& /*outputAudio*/,
196 int /*startSample*/,
197 int /*numSamples*/) {}
198
199protected:
200 //==============================================================================
203
204private:
205 //==============================================================================
206 MPEInstrument defaultInstrument { MPEZone (MPEZone::Type::lower, 15) };
207
208 CriticalSection noteStateLock;
209 double sampleRate = 0.0;
210 int minimumSubBlockSize = 32;
211 bool subBlockSubdivisionIsStrict = false;
212
213 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MPESynthesiserBase)
214};
215
216} // namespace juce
double getSampleRate() const noexcept