OpenShot Audio Library | OpenShotAudio  0.6.0
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 
23 namespace juce
24 {
25 
26 //==============================================================================
47 {
48 public:
49  //==============================================================================
52 
60  MPESynthesiserBase (MPEInstrument& instrument);
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 
183 protected:
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 
199 protected:
200  //==============================================================================
203 
204 private:
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