openshot-audio  0.1.2
juce_AudioProcessorGraph.h
Go to the documentation of this file.
1 /*
2  ==============================================================================
3 
4  This file is part of the JUCE library.
5  Copyright (c) 2015 - ROLI Ltd.
6 
7  Permission is granted to use this software under the terms of either:
8  a) the GPL v2 (or any later version)
9  b) the Affero GPL v3
10 
11  Details of these licenses can be found at: www.gnu.org/licenses
12 
13  JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
14  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15  A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 
17  ------------------------------------------------------------------------------
18 
19  To release a closed-source product which uses JUCE, commercial licenses are
20  available: visit www.juce.com for more information.
21 
22  ==============================================================================
23 */
24 
25 #ifndef JUCE_AUDIOPROCESSORGRAPH_H_INCLUDED
26 #define JUCE_AUDIOPROCESSORGRAPH_H_INCLUDED
27 
28 
29 //==============================================================================
44  private AsyncUpdater
45 {
46 public:
47  //==============================================================================
50 
55 
56  //==============================================================================
62  {
63  public:
64  //==============================================================================
68  const uint32 nodeId;
69 
71  AudioProcessor* getProcessor() const noexcept { return processor; }
72 
80 
81  //==============================================================================
84 
85  private:
86  //==============================================================================
87  friend class AudioProcessorGraph;
88 
89  const ScopedPointer<AudioProcessor> processor;
90  bool isPrepared;
91 
93 
94  void setParentGraph (AudioProcessorGraph*) const;
95  void prepare (double sampleRate, int blockSize, AudioProcessorGraph*);
96  void unprepare();
97 
99  };
100 
101  //==============================================================================
107  {
108  public:
109  //==============================================================================
110  Connection (uint32 sourceNodeId, int sourceChannelIndex,
111  uint32 destNodeId, int destChannelIndex) noexcept;
112 
113  //==============================================================================
118 
127 
132 
141 
142  private:
143  //==============================================================================
144  JUCE_LEAK_DETECTOR (Connection)
145  };
146 
147  //==============================================================================
151  void clear();
152 
154  int getNumNodes() const noexcept { return nodes.size(); }
155 
160  Node* getNode (const int index) const noexcept { return nodes [index]; }
161 
166  Node* getNodeForId (const uint32 nodeId) const;
167 
179  Node* addNode (AudioProcessor* newProcessor, uint32 nodeId = 0);
180 
185  bool removeNode (uint32 nodeId);
186 
187  //==============================================================================
189  int getNumConnections() const { return connections.size(); }
190 
192  const Connection* getConnection (int index) const { return connections [index]; }
193 
197  const Connection* getConnectionBetween (uint32 sourceNodeId,
198  int sourceChannelIndex,
199  uint32 destNodeId,
200  int destChannelIndex) const;
201 
205  bool isConnected (uint32 possibleSourceNodeId,
206  uint32 possibleDestNodeId) const;
207 
209  bool canConnect (uint32 sourceNodeId, int sourceChannelIndex,
210  uint32 destNodeId, int destChannelIndex) const;
211 
217  bool addConnection (uint32 sourceNodeId, int sourceChannelIndex,
218  uint32 destNodeId, int destChannelIndex);
219 
221  void removeConnection (int index);
222 
226  bool removeConnection (uint32 sourceNodeId, int sourceChannelIndex,
227  uint32 destNodeId, int destChannelIndex);
228 
230  bool disconnectNode (uint32 nodeId);
231 
237  bool isConnectionLegal (const Connection* connection) const;
238 
245 
246  //==============================================================================
252  static const int midiChannelIndex;
253 
254 
255  //==============================================================================
270  {
271  public:
275  {
276  audioInputNode,
279  audioOutputNode,
282  midiInputNode,
285  midiOutputNode
288  };
289 
290  //==============================================================================
292  IODeviceType getType() const noexcept { return type; }
293 
297 
299  bool isInput() const noexcept;
301  bool isOutput() const noexcept;
302 
303  //==============================================================================
304  AudioGraphIOProcessor (const IODeviceType type);
306 
307  const String getName() const override;
308  void fillInPluginDescription (PluginDescription&) const override;
309  void prepareToPlay (double sampleRate, int estimatedSamplesPerBlock) override;
310  void releaseResources() override;
311  void processBlock (AudioSampleBuffer&, MidiBuffer&) override;
312 
313  const String getInputChannelName (int channelIndex) const override;
314  const String getOutputChannelName (int channelIndex) const override;
315  bool isInputChannelStereoPair (int index) const override;
316  bool isOutputChannelStereoPair (int index) const override;
317  bool silenceInProducesSilenceOut() const override;
318  double getTailLengthSeconds() const override;
319  bool acceptsMidi() const override;
320  bool producesMidi() const override;
321 
322  bool hasEditor() const override;
324 
325  int getNumPrograms() override;
326  int getCurrentProgram() override;
327  void setCurrentProgram (int) override;
328  const String getProgramName (int) override;
329  void changeProgramName (int, const String&) override;
330 
331  void getStateInformation (juce::MemoryBlock& destData) override;
332  void setStateInformation (const void* data, int sizeInBytes) override;
333 
335  void setParentGraph (AudioProcessorGraph*);
336 
337  private:
338  const IODeviceType type;
339  AudioProcessorGraph* graph;
340 
342  };
343 
344  //==============================================================================
345  const String getName() const override;
346  void prepareToPlay (double, int) override;
347  void releaseResources() override;
348  void processBlock (AudioSampleBuffer&, MidiBuffer&) override;
349 
350  void reset() override;
351  void setNonRealtime (bool) noexcept override;
352  void setPlayHead (AudioPlayHead*) override;
353 
354  const String getInputChannelName (int) const override;
355  const String getOutputChannelName (int) const override;
356  bool isInputChannelStereoPair (int) const override;
357  bool isOutputChannelStereoPair (int) const override;
358 
359  bool silenceInProducesSilenceOut() const override;
360  double getTailLengthSeconds() const override;
361  bool acceptsMidi() const override;
362  bool producesMidi() const override;
363 
364  bool hasEditor() const override { return false; }
365  AudioProcessorEditor* createEditor() override { return nullptr; }
366  int getNumPrograms() override { return 0; }
367  int getCurrentProgram() override { return 0; }
368  void setCurrentProgram (int) override { }
369  const String getProgramName (int) override { return String(); }
370  void changeProgramName (int, const String&) override { }
371  void getStateInformation (juce::MemoryBlock&) override;
372  void setStateInformation (const void* data, int sizeInBytes) override;
373 
374 private:
375  //==============================================================================
377  OwnedArray<Connection> connections;
378  uint32 lastNodeId;
379  AudioSampleBuffer renderingBuffers;
380  OwnedArray<MidiBuffer> midiBuffers;
381  Array<void*> renderingOps;
382 
383  friend class AudioGraphIOProcessor;
384  AudioSampleBuffer* currentAudioInputBuffer;
385  AudioSampleBuffer currentAudioOutputBuffer;
386  MidiBuffer* currentMidiInputBuffer;
387  MidiBuffer currentMidiOutputBuffer;
388 
389  void handleAsyncUpdate() override;
390  void clearRenderingSequence();
391  void buildRenderingSequence();
392  bool isAnInputTo (uint32 possibleInputId, uint32 possibleDestinationId, int recursionCheck) const;
393 
395 };
396 
397 
398 #endif // JUCE_AUDIOPROCESSORGRAPH_H_INCLUDED
Definition: juce_AudioSampleBuffer.h:34
const Connection * getConnectionBetween(uint32 sourceNodeId, int sourceChannelIndex, uint32 destNodeId, int destChannelIndex) const
Definition: juce_AudioProcessorGraph.cpp:991
virtual void reset()
Definition: juce_AudioProcessor.cpp:321
virtual const String getProgramName(int index)=0
virtual void processBlock(AudioSampleBuffer &buffer, MidiBuffer &midiMessages)=0
virtual void setPlayHead(AudioPlayHead *newPlayHead)
Definition: juce_AudioProcessor.cpp:58
virtual void setStateInformation(const void *data, int sizeInBytes)=0
virtual const String getName() const =0
IODeviceType
Definition: juce_AudioProcessorGraph.h:274
AudioProcessor * getProcessor() const noexcept
Definition: juce_AudioProcessorGraph.h:71
bool isConnectionLegal(const Connection *connection) const
Definition: juce_AudioProcessorGraph.cpp:1108
#define noexcept
Definition: juce_CompilerSupport.h:141
Node * addNode(AudioProcessor *newProcessor, uint32 nodeId=0)
Definition: juce_AudioProcessorGraph.cpp:931
int getNumNodes() const noexcept
Definition: juce_AudioProcessorGraph.h:154
bool canConnect(uint32 sourceNodeId, int sourceChannelIndex, uint32 destNodeId, int destChannelIndex) const
Definition: juce_AudioProcessorGraph.cpp:1018
Definition: juce_AudioProcessorEditor.h:38
AudioProcessorGraph * getParentGraph() const noexcept
Definition: juce_AudioProcessorGraph.h:296
virtual const String getInputChannelName(int channelIndex) const =0
static const int midiChannelIndex
Definition: juce_AudioProcessorGraph.h:252
AudioProcessorEditor * createEditor() override
Definition: juce_AudioProcessorGraph.h:365
virtual void changeProgramName(int index, const String &newName)=0
virtual int getCurrentProgram()=0
virtual bool isOutputChannelStereoPair(int index) const =0
Definition: juce_String.h:43
virtual void setCurrentProgram(int index)=0
Node * getNode(const int index) const noexcept
Definition: juce_AudioProcessorGraph.h:160
const uint32 nodeId
Definition: juce_AudioProcessorGraph.h:68
#define JUCE_API
Definition: juce_StandardHeader.h:139
IODeviceType getType() const noexcept
Definition: juce_AudioProcessorGraph.h:292
#define const
Definition: juce_AsyncUpdater.h:39
Definition: juce_ReferenceCountedArray.h:55
Definition: juce_ReferenceCountedObject.h:65
void removeConnection(int index)
Definition: juce_AudioProcessorGraph.cpp:1062
virtual bool producesMidi() const =0
Definition: juce_AudioPlayHead.h:39
Definition: juce_AudioProcessorGraph.h:61
NamedValueSet properties
Definition: juce_AudioProcessorGraph.h:79
Definition: juce_NamedValueSet.h:39
ReferenceCountedObjectPtr< Node > Ptr
Definition: juce_AudioProcessorGraph.h:83
unsigned int uint32
Definition: juce_MathsFunctions.h:51
virtual AudioProcessorEditor * createEditor()=0
Definition: juce_AudioProcessorGraph.h:269
Node * getNodeForId(const uint32 nodeId) const
Definition: juce_AudioProcessorGraph.cpp:922
const Connection * getConnection(int index) const
Definition: juce_AudioProcessorGraph.h:192
Definition: juce_AudioProcessorGraph.h:106
Definition: juce_ReferenceCountedObject.h:227
Definition: juce_PluginDescription.h:40
uint32 sourceNodeId
Definition: juce_AudioProcessorGraph.h:117
bool removeNode(uint32 nodeId)
Definition: juce_AudioProcessorGraph.cpp:972
void clear()
Definition: juce_AudioProcessorGraph.cpp:915
virtual bool silenceInProducesSilenceOut() const =0
virtual void setNonRealtime(bool isNonRealtime) noexcept
Definition: juce_AudioProcessor.cpp:100
bool removeIllegalConnections()
Definition: juce_AudioProcessorGraph.cpp:1123
virtual const String getOutputChannelName(int channelIndex) const =0
virtual double getTailLengthSeconds() const =0
virtual void getStateInformation(juce::MemoryBlock &destData)=0
uint32 destNodeId
Definition: juce_AudioProcessorGraph.h:131
virtual bool hasEditor() const =0
Definition: juce_OwnedArray.h:55
int sourceChannelIndex
Definition: juce_AudioProcessorGraph.h:126
bool addConnection(uint32 sourceNodeId, int sourceChannelIndex, uint32 destNodeId, int destChannelIndex)
Definition: juce_AudioProcessorGraph.cpp:1047
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
Definition: juce_PlatformDefs.h:198
virtual void releaseResources()=0
int getNumPrograms() override
Definition: juce_AudioProcessorGraph.h:366
Definition: juce_AudioProcessor.h:43
Definition: juce_AudioProcessorGraph.h:43
virtual void prepareToPlay(double sampleRate, int estimatedSamplesPerBlock)=0
virtual bool isInputChannelStereoPair(int index) const =0
void changeProgramName(int, const String &) override
Definition: juce_AudioProcessorGraph.h:370
Definition: juce_AudioPluginInstance.h:42
JSAMPIMAGE data
Definition: jpeglib.h:945
void setCurrentProgram(int) override
Definition: juce_AudioProcessorGraph.h:368
#define JUCE_LEAK_DETECTOR(OwnerClass)
Definition: juce_LeakedObjectDetector.h:141
int getCurrentProgram() override
Definition: juce_AudioProcessorGraph.h:367
const String getProgramName(int) override
Definition: juce_AudioProcessorGraph.h:369
Definition: juce_MidiBuffer.h:43
virtual int getNumPrograms()=0
int destChannelIndex
Definition: juce_AudioProcessorGraph.h:140
Definition: juce_core.h:39
bool hasEditor() const override
Definition: juce_AudioProcessorGraph.h:364
int getNumConnections() const
Definition: juce_AudioProcessorGraph.h:189
bool isConnected(uint32 possibleSourceNodeId, uint32 possibleDestNodeId) const
Definition: juce_AudioProcessorGraph.cpp:1001
virtual bool acceptsMidi() const =0
virtual void fillInPluginDescription(PluginDescription &description) const =0
bool disconnectNode(uint32 nodeId)
Definition: juce_AudioProcessorGraph.cpp:1090