Krotos Modules 3
Loading...
Searching...
No Matches
krotos::KwidgetProcessorGraph Class Reference

Uses juce::AudioProcessorGraph to store Kwidgets and their audio connections, and process audio through them. More...

#include <KwidgetProcessorGraph.h>

Public Types

using Node = AudioProcessorGraph::Node
 
using NodeID = AudioProcessorGraph::NodeID
 
using IOProcessor = AudioProcessorGraph::AudioGraphIOProcessor
 
using Connection = AudioProcessorGraph::Connection
 

Public Member Functions

 KwidgetProcessorGraph (int numVoices, int inputChannels, int outputChannels)
 
 ~KwidgetProcessorGraph ()=default
 
void prepareToPlay (double sampleRate, int samplesPerBlock)
 
int getNumVoices () const
 
void noteOn (int voiceIdx, int midiNote, float velocity)
 
void noteOff (int voiceIdx, float velocity)
 
void noteCleared (int voiceIdx)
 
bool isActive (int voiceIdx)
 
void processVoice (int voiceIdx, AudioBuffer< float > &buffer)
 
void addKwidget (std::unique_ptr< Kwidget > kwidgetToAdd)
 
void removeKwidget (Kwidget *kwidget)
 
const OwnedArray< Kwidget > & getKwidgets () const
 
bool canConnect (Kwidget *src, Kwidget *dest)
 
void addConnection (Kwidget *src, Kwidget *dest, int baseChannel, int numConnections)
 
void removeConnection (Kwidget *src, Kwidget *dest)
 
void connectToInputNode (Kwidget *dest, int baseChannel, int numConnections)
 
void connectToOutputNode (Kwidget *src, int baseChannel, int numChannels)
 
void clearKwidgets ()
 
void clearConnections ()
 
void debugConnections () const
 

Private Member Functions

NodeID getNodeID (Kwidget *k)
 
bool canConnect (NodeID src, NodeID dest)
 
void addMultipleConnections (NodeID src, NodeID dest, int baseChannel, int numConnections)
 
void addMultipleConnectionsToOutputNode (NodeID src, int baseChannel, int numConnections)
 
void removeConnection (NodeID src, NodeID dest)
 

Private Attributes

const int m_numVoices
 
OwnedArray< Kwidgetm_kwidgets
 
std::map< Kwidget *, NodeIDm_nodeIDs
 
OwnedArray< AudioProcessorGraph > m_graphs
 
double m_sampleRate {0.0}
 
int m_blockSize {0}
 
int m_numInputChannels
 
int m_numOutputChannels
 
Array< Node::Ptr > m_audioInputNodes
 
Array< Node::Ptr > m_audioOutputNodes
 
Array< Node::Ptr > m_midiInputNodes
 
Array< Node::Ptr > m_midiOutputNodes
 

Detailed Description

Uses juce::AudioProcessorGraph to store Kwidgets and their audio connections, and process audio through them.

This class holds an instance of AudioProcessorGraph and allows for audio processing nodes to be added and connected as Kwidgets.

When a new Kwidget is added, it transfers ownership of its KwidgetProcessor to this class. Currently, there is no method to return ownership of the KwidgetProcessor to its Kwidget, meaning both classes must be destroyed simultaneously.

See also
Kwidget, AudioProcessorGraph

Member Typedef Documentation

◆ Connection

using krotos::KwidgetProcessorGraph::Connection = AudioProcessorGraph::Connection

◆ IOProcessor

using krotos::KwidgetProcessorGraph::IOProcessor = AudioProcessorGraph::AudioGraphIOProcessor

◆ Node

using krotos::KwidgetProcessorGraph::Node = AudioProcessorGraph::Node

◆ NodeID

using krotos::KwidgetProcessorGraph::NodeID = AudioProcessorGraph::NodeID

Constructor & Destructor Documentation

◆ KwidgetProcessorGraph()

krotos::KwidgetProcessorGraph::KwidgetProcessorGraph ( int numVoices,
int inputChannels,
int outputChannels )

Constructor.

◆ ~KwidgetProcessorGraph()

krotos::KwidgetProcessorGraph::~KwidgetProcessorGraph ( )
default

Destructor.

Member Function Documentation

◆ addConnection()

void krotos::KwidgetProcessorGraph::addConnection ( Kwidget * src,
Kwidget * dest,
int baseChannel,
int numConnections )

Attempts to connect the audio of two Kwidgets.

Parameters
srcThe source Kwidget.
destThe destination Kwidget.
baseChannelThe the channel number in the destintation where we start connecting from
numConnectionsThe number of connections we want to make

◆ addKwidget()

void krotos::KwidgetProcessorGraph::addKwidget ( std::unique_ptr< Kwidget > kwidgetToAdd)

Adds a Kwidget that is owned and managed by this class.

Parameters
kwidgetToAddThe Kwidget you would like to add. This is a std::unique_ptr to emphasize that the Kwidget will be owned by this class.

◆ addMultipleConnections()

void krotos::KwidgetProcessorGraph::addMultipleConnections ( NodeID src,
NodeID dest,
int baseChannel,
int numConnections )
private

◆ addMultipleConnectionsToOutputNode()

void krotos::KwidgetProcessorGraph::addMultipleConnectionsToOutputNode ( NodeID src,
int baseChannel,
int numConnections )
private

◆ canConnect() [1/2]

bool krotos::KwidgetProcessorGraph::canConnect ( Kwidget * src,
Kwidget * dest )

Check if a potential audio connection can be made between two Kwidgets.

◆ canConnect() [2/2]

bool krotos::KwidgetProcessorGraph::canConnect ( NodeID src,
NodeID dest )
private

◆ clearConnections()

void krotos::KwidgetProcessorGraph::clearConnections ( )

Clears all connections in the AudioProcessorGraph.

◆ clearKwidgets()

void krotos::KwidgetProcessorGraph::clearKwidgets ( )

Clears all connections and Kwidgets in the AudioProcessorGraph.

◆ connectToInputNode()

void krotos::KwidgetProcessorGraph::connectToInputNode ( Kwidget * dest,
int baseChannel,
int numConnections )

Connects the audio input channels of the plugin to a Kwidget.

Parameters
baseChannelThe the channel number in the destintation where we start connecting from
numConnectionsThe number of connections we want to make

◆ connectToOutputNode()

void krotos::KwidgetProcessorGraph::connectToOutputNode ( Kwidget * src,
int baseChannel,
int numChannels )

Connects a Kwidget to the audio out node

◆ debugConnections()

void krotos::KwidgetProcessorGraph::debugConnections ( ) const

Output a list of the current connections to the console:

  • If the source is blank, then the Kwidget is receiving audio from the audio input node.
  • If the destination is blank, then the Kwidget is sending its audio to the audio output node.

◆ getKwidgets()

const OwnedArray< Kwidget > & krotos::KwidgetProcessorGraph::getKwidgets ( ) const
inline

Get a list of all the Kwidget objects currently owned by this KwidgetProcessorGraph.

◆ getNodeID()

AudioProcessorGraph::NodeID krotos::KwidgetProcessorGraph::getNodeID ( Kwidget * k)
private

◆ getNumVoices()

int krotos::KwidgetProcessorGraph::getNumVoices ( ) const
inline

Get the number of voices this KwidgetProcessorGraph is capable of producing.

◆ isActive()

bool krotos::KwidgetProcessorGraph::isActive ( int voiceIdx)

◆ noteCleared()

void krotos::KwidgetProcessorGraph::noteCleared ( int voiceIdx)

Send a message to all Kwidgets of a particular voice that the voice is done rendering.

◆ noteOff()

void krotos::KwidgetProcessorGraph::noteOff ( int voiceIdx,
float velocity )

Send a 'note off' event to all the Kwidgets of a particular voice.

◆ noteOn()

void krotos::KwidgetProcessorGraph::noteOn ( int voiceIdx,
int midiNote,
float velocity )

Send a 'note on' event to all the Kwidgets of a particular voice.

◆ prepareToPlay()

void krotos::KwidgetProcessorGraph::prepareToPlay ( double sampleRate,
int samplesPerBlock )

Prepare the AudioProcessorGraph and all of its nodes for audio processing.

◆ processVoice()

void krotos::KwidgetProcessorGraph::processVoice ( int voiceIdx,
AudioBuffer< float > & buffer )

Process audio through all of the Kwidgets of a particular voice.

◆ removeConnection() [1/2]

void krotos::KwidgetProcessorGraph::removeConnection ( Kwidget * src,
Kwidget * dest )

Removes an audio connection. If the connection is not found, nothing happens.

Parameters
srcThe source Kwidget.
destThe destination Kwidget.

◆ removeConnection() [2/2]

void krotos::KwidgetProcessorGraph::removeConnection ( NodeID src,
NodeID dest )
private

◆ removeKwidget()

void krotos::KwidgetProcessorGraph::removeKwidget ( Kwidget * kwidget)

Removes a Kwidget and deletes it.

Parameters
kwidgetA pointer to the Kwidget you want to remove.

Member Data Documentation

◆ m_audioInputNodes

Array<Node::Ptr> krotos::KwidgetProcessorGraph::m_audioInputNodes
private

◆ m_audioOutputNodes

Array<Node::Ptr> krotos::KwidgetProcessorGraph::m_audioOutputNodes
private

◆ m_blockSize

int krotos::KwidgetProcessorGraph::m_blockSize {0}
private

◆ m_graphs

OwnedArray<AudioProcessorGraph> krotos::KwidgetProcessorGraph::m_graphs
private

◆ m_kwidgets

OwnedArray<Kwidget> krotos::KwidgetProcessorGraph::m_kwidgets
private

◆ m_midiInputNodes

Array<Node::Ptr> krotos::KwidgetProcessorGraph::m_midiInputNodes
private

◆ m_midiOutputNodes

Array<Node::Ptr> krotos::KwidgetProcessorGraph::m_midiOutputNodes
private

◆ m_nodeIDs

std::map<Kwidget*, NodeID> krotos::KwidgetProcessorGraph::m_nodeIDs
private

◆ m_numInputChannels

int krotos::KwidgetProcessorGraph::m_numInputChannels
private

◆ m_numOutputChannels

int krotos::KwidgetProcessorGraph::m_numOutputChannels
private

◆ m_numVoices

const int krotos::KwidgetProcessorGraph::m_numVoices
private

◆ m_sampleRate

double krotos::KwidgetProcessorGraph::m_sampleRate {0.0}
private

The documentation for this class was generated from the following files: