TracktionEngine
Classes | Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | List of all members
tracktion::engine::MidiInputDevice Class Referenceabstract
Inheritance diagram for tracktion::engine::MidiInputDevice:

Classes

struct  MidiKeyChangeDispatcher
 Gets notified (lazily, not in real-time) when any MidiInputDevice's key's state changes. More...
 

Public Types

enum class  MergeMode { always , never , optional }
 
- Public Types inherited from tracktion::engine::InputDevice
enum  DeviceType {
  waveDevice , trackWaveDevice , physicalMidiDevice , virtualMidiDevice ,
  trackMidiDevice
}
 enum to allow quick querying of the device type. More...
 
- Public Types inherited from tracktion::engine::Selectable
using WeakRef = juce::WeakReference< Selectable >
 

Public Member Functions

 MidiInputDevice (Engine &, const juce::String &type, const juce::String &name)
 
 ~MidiInputDevice () override
 
void setEnabled (bool) override
 
bool isMidi () const override
 
MidiChannel getChannelToUse () const noexcept
 
void setChannelToUse (int)
 
int getProgramToUse () const noexcept
 
void setProgramToUse (int)
 
void setBankToUse (int)
 
int getBankToUse () const
 
void setChannelAllowed (int midiChannel, bool)
 
bool isChannelAllowed (int midiChannel) const
 
void setEndToEndEnabled (bool)
 
bool isEndToEndEnabled () const
 
void setOverridingNoteVelocities (bool)
 
bool isOverridingNoteVelocities () const
 
void setManualAdjustmentMs (double)
 
double getManualAdjustmentMs () const
 
bool isMPEDevice () const
 Returns true if the given device is an MPE device and so should always record incoming MIDI to Note Expression. More...
 
void flipEndToEnd () override
 
void masterTimeUpdate (double time) override
 This is a bit of a hack but allows the time for MIDI devices to be set through the base class interface. More...
 
void connectionStateChanged ()
 
void addInstance (MidiInputDeviceInstanceBase *)
 
void removeInstance (MidiInputDeviceInstanceBase *)
 
virtual void loadProps ()=0
 
virtual void saveProps ()=0
 
ClipaddMidiToTrackAsTransaction (Clip *takeClip, AudioTrack &, juce::MidiMessageSequence &, TimeRange position, MergeMode, MidiChannel, SelectionManager *)
 
void handleIncomingMidiMessage (juce::MidiInput *, const juce::MidiMessage &) override
 
virtual void handleIncomingMidiMessage (const juce::MidiMessage &)=0
 
RetrospectiveMidiBuffer * getRetrospectiveMidiBuffer () const
 
void updateRetrospectiveBufferLength (double length) override
 
double getAdjustSecs () const
 
juce::Array< AudioTrack * > getDestinationTracks ()
 
MidiChannel getMidiChannelFor (int rawChannelNumber) const
 
MidiMessageArray::MPESourceID getMPESourceID () const
 
- Public Member Functions inherited from tracktion::engine::InputDevice
 InputDevice (Engine &, const juce::String &type, const juce::String &name)
 
 ~InputDevice () override
 
const juce::String & getName () const
 
const juce::String & getType () const
 
virtual DeviceType getDeviceType () const =0
 
bool isTrackDevice () const
 
juce::String getAlias () const
 the alias is the name shown in the draggable input device components More...
 
void setAlias (const juce::String &newAlias)
 
void initialiseDefaultAlias ()
 Called after all devices are constructed, so it can use all the device names in its calculations. More...
 
virtual bool isAvailableToEdit () const
 
bool isEnabled () const
 
bool isEndToEndEnabled () const
 
virtual InputDeviceInstancecreateInstance (EditPlaybackContext &)=0
 Creates an instance to use for a given playback context. More...
 
juce::String getSelectableDescription () override
 Subclasses must return a description of what they are. More...
 
juce::String getGlobalPropertyName () const
 
- Public Member Functions inherited from tracktion::engine::Selectable
 Selectable ()
 
virtual ~Selectable ()
 
virtual void selectionStatusChanged (bool isNowSelected)
 Can be overridden to tell this object that it has just been selected or deselected. More...
 
virtual void changed ()
 This should be called to send a change notification to any SelectableListeners that are registered with this object. More...
 
virtual void selectableAboutToBeDeleted ()
 Called just before the selectable is about to be deleted so any subclasses should still be valid at this point. More...
 
void addSelectableListener (SelectableListener *)
 
void removeSelectableListener (SelectableListener *)
 
void cancelAnyPendingUpdates ()
 If changed() has been called, this will cancel any pending async change notificaions. More...
 
void deselect ()
 
void propertiesChanged ()
 
void notifyListenersOfDeletion ()
 
WeakRef getWeakRef ()
 

Public Attributes

bool mergeRecordings = true
 
bool recordingEnabled = true
 
bool replaceExistingClips = false
 
bool livePlayOver = false
 
bool recordToNoteAutomation = false
 
QuantisationType quantisation
 
juce::MidiKeyboardState keyboardState
 
- Public Attributes inherited from tracktion::engine::InputDevice
Engineengine
 
LevelMeasurer levelMeasurer
 
- Public Attributes inherited from tracktion::engine::Selectable
WeakRef::Master masterReference
 

Protected Member Functions

void handleNoteOn (juce::MidiKeyboardState *, int midiChannel, int midiNoteNumber, float velocity) override
 
void handleNoteOff (juce::MidiKeyboardState *, int midiChannel, int midiNoteNumber, float velocity) override
 
void timerCallback () override
 
void sendNoteOnToMidiKeyListeners (juce::MidiMessage &)
 
void loadProps (const juce::XmlElement *)
 
void saveProps (juce::XmlElement &)
 
void sendMessageToInstances (const juce::MidiMessage &)
 
virtual juce::String openDevice ()=0
 
virtual void closeDevice ()=0
 

Protected Attributes

std::atomic< double > adjustSecs { 0 }
 
double manualAdjustMs = 0
 
bool overrideNoteVels = false
 
bool eventReceivedFromDevice = false
 
juce::BigInteger disallowedChannels
 
MidiChannel channelToUse
 
int programToUse = 0
 
bool firstSetEnabledCall = true
 
int bankToUse = 0
 
MidiMessageArray::MPESourceID midiSourceID = MidiMessageArray::createUniqueMPESourceID()
 
juce::CriticalSection noteLock
 
bool keysDown [128]
 
bool keysUp [128]
 
uint8_t keyDownVelocities [128]
 
juce::SharedResourcePointer< MidiKeyChangeDispatchermidiKeyChangeDispatcher
 
juce::CriticalSection instanceLock
 
juce::Array< MidiInputDeviceInstanceBase * > instances
 
std::unique_ptr< RetrospectiveMidiBuffer > retrospectiveBuffer
 
- Protected Attributes inherited from tracktion::engine::InputDevice
std::atomic< bool > enabled { false }
 
bool endToEndEnabled = false
 
bool retrospectiveRecordLock = false
 

Additional Inherited Members

- Static Public Member Functions inherited from tracktion::engine::InputDevice
static void setRetrospectiveLock (Engine &engine, const juce::Array< InputDeviceInstance * > &devices, bool lock)
 
- Static Public Member Functions inherited from tracktion::engine::Selectable
static void initialise ()
 
static bool isSelectableValid (const Selectable *) noexcept
 checks whether this object has been deleted. More...
 

Member Enumeration Documentation

◆ MergeMode

Enumerator
always 
never 
optional 

Constructor & Destructor Documentation

◆ MidiInputDevice()

tracktion::engine::MidiInputDevice::MidiInputDevice ( Engine ,
const juce::String &  type,
const juce::String &  name 
)

◆ ~MidiInputDevice()

tracktion::engine::MidiInputDevice::~MidiInputDevice ( )
override

Member Function Documentation

◆ setEnabled()

void tracktion::engine::MidiInputDevice::setEnabled ( bool  )
overridevirtual

◆ isMidi()

bool tracktion::engine::MidiInputDevice::isMidi ( ) const
overridevirtual

Reimplemented from tracktion::engine::InputDevice.

◆ getChannelToUse()

MidiChannel tracktion::engine::MidiInputDevice::getChannelToUse ( ) const
noexcept

References channelToUse.

◆ setChannelToUse()

void tracktion::engine::MidiInputDevice::setChannelToUse ( int  )

◆ getProgramToUse()

int tracktion::engine::MidiInputDevice::getProgramToUse ( ) const
noexcept

References programToUse.

◆ setProgramToUse()

void tracktion::engine::MidiInputDevice::setProgramToUse ( int  )

◆ setBankToUse()

void tracktion::engine::MidiInputDevice::setBankToUse ( int  )

◆ getBankToUse()

int tracktion::engine::MidiInputDevice::getBankToUse ( ) const

References bankToUse.

◆ setChannelAllowed()

void tracktion::engine::MidiInputDevice::setChannelAllowed ( int  midiChannel,
bool   
)

◆ isChannelAllowed()

bool tracktion::engine::MidiInputDevice::isChannelAllowed ( int  midiChannel) const

References disallowedChannels.

◆ setEndToEndEnabled()

void tracktion::engine::MidiInputDevice::setEndToEndEnabled ( bool  )

◆ isEndToEndEnabled()

bool tracktion::engine::MidiInputDevice::isEndToEndEnabled ( ) const

◆ setOverridingNoteVelocities()

void tracktion::engine::MidiInputDevice::setOverridingNoteVelocities ( bool  )

◆ isOverridingNoteVelocities()

bool tracktion::engine::MidiInputDevice::isOverridingNoteVelocities ( ) const

References overrideNoteVels.

◆ setManualAdjustmentMs()

void tracktion::engine::MidiInputDevice::setManualAdjustmentMs ( double  )

◆ getManualAdjustmentMs()

double tracktion::engine::MidiInputDevice::getManualAdjustmentMs ( ) const

References manualAdjustMs.

◆ isMPEDevice()

bool tracktion::engine::MidiInputDevice::isMPEDevice ( ) const

Returns true if the given device is an MPE device and so should always record incoming MIDI to Note Expression.

◆ flipEndToEnd()

void tracktion::engine::MidiInputDevice::flipEndToEnd ( )
overridevirtual

◆ masterTimeUpdate()

void tracktion::engine::MidiInputDevice::masterTimeUpdate ( double  time)
overridevirtual

This is a bit of a hack but allows the time for MIDI devices to be set through the base class interface.

Implements tracktion::engine::InputDevice.

◆ connectionStateChanged()

void tracktion::engine::MidiInputDevice::connectionStateChanged ( )

◆ addInstance()

void tracktion::engine::MidiInputDevice::addInstance ( MidiInputDeviceInstanceBase *  )

◆ removeInstance()

void tracktion::engine::MidiInputDevice::removeInstance ( MidiInputDeviceInstanceBase *  )

◆ loadProps() [1/2]

virtual void tracktion::engine::MidiInputDevice::loadProps ( )
pure virtual

◆ saveProps() [1/2]

virtual void tracktion::engine::MidiInputDevice::saveProps ( )
pure virtual

◆ addMidiToTrackAsTransaction()

Clip* tracktion::engine::MidiInputDevice::addMidiToTrackAsTransaction ( Clip takeClip,
AudioTrack ,
juce::MidiMessageSequence &  ,
TimeRange  position,
MergeMode  ,
MidiChannel  ,
SelectionManager  
)

◆ handleIncomingMidiMessage() [1/2]

void tracktion::engine::MidiInputDevice::handleIncomingMidiMessage ( juce::MidiInput *  ,
const juce::MidiMessage &   
)
override

◆ handleIncomingMidiMessage() [2/2]

virtual void tracktion::engine::MidiInputDevice::handleIncomingMidiMessage ( const juce::MidiMessage &  )
pure virtual

◆ getRetrospectiveMidiBuffer()

RetrospectiveMidiBuffer* tracktion::engine::MidiInputDevice::getRetrospectiveMidiBuffer ( ) const

References retrospectiveBuffer.

◆ updateRetrospectiveBufferLength()

void tracktion::engine::MidiInputDevice::updateRetrospectiveBufferLength ( double  length)
overridevirtual

◆ getAdjustSecs()

double tracktion::engine::MidiInputDevice::getAdjustSecs ( ) const

References adjustSecs.

◆ getDestinationTracks()

juce::Array<AudioTrack*> tracktion::engine::MidiInputDevice::getDestinationTracks ( )

◆ getMidiChannelFor()

MidiChannel tracktion::engine::MidiInputDevice::getMidiChannelFor ( int  rawChannelNumber) const

◆ getMPESourceID()

MidiMessageArray::MPESourceID tracktion::engine::MidiInputDevice::getMPESourceID ( ) const

References midiSourceID.

◆ handleNoteOn()

void tracktion::engine::MidiInputDevice::handleNoteOn ( juce::MidiKeyboardState *  ,
int  midiChannel,
int  midiNoteNumber,
float  velocity 
)
overrideprotected

◆ handleNoteOff()

void tracktion::engine::MidiInputDevice::handleNoteOff ( juce::MidiKeyboardState *  ,
int  midiChannel,
int  midiNoteNumber,
float  velocity 
)
overrideprotected

◆ timerCallback()

void tracktion::engine::MidiInputDevice::timerCallback ( )
overrideprotected

◆ sendNoteOnToMidiKeyListeners()

void tracktion::engine::MidiInputDevice::sendNoteOnToMidiKeyListeners ( juce::MidiMessage &  )
protected

◆ loadProps() [2/2]

void tracktion::engine::MidiInputDevice::loadProps ( const juce::XmlElement *  )
protected

◆ saveProps() [2/2]

void tracktion::engine::MidiInputDevice::saveProps ( juce::XmlElement &  )
protected

◆ sendMessageToInstances()

void tracktion::engine::MidiInputDevice::sendMessageToInstances ( const juce::MidiMessage &  )
protected

◆ openDevice()

virtual juce::String tracktion::engine::MidiInputDevice::openDevice ( )
protectedpure virtual

◆ closeDevice()

virtual void tracktion::engine::MidiInputDevice::closeDevice ( )
protectedpure virtual

Member Data Documentation

◆ mergeRecordings

bool tracktion::engine::MidiInputDevice::mergeRecordings = true

◆ recordingEnabled

bool tracktion::engine::MidiInputDevice::recordingEnabled = true

◆ replaceExistingClips

bool tracktion::engine::MidiInputDevice::replaceExistingClips = false

◆ livePlayOver

bool tracktion::engine::MidiInputDevice::livePlayOver = false

◆ recordToNoteAutomation

bool tracktion::engine::MidiInputDevice::recordToNoteAutomation = false

◆ quantisation

QuantisationType tracktion::engine::MidiInputDevice::quantisation

◆ keyboardState

juce::MidiKeyboardState tracktion::engine::MidiInputDevice::keyboardState

◆ adjustSecs

std::atomic<double> tracktion::engine::MidiInputDevice::adjustSecs { 0 }
protected

Referenced by getAdjustSecs().

◆ manualAdjustMs

double tracktion::engine::MidiInputDevice::manualAdjustMs = 0
protected

Referenced by getManualAdjustmentMs().

◆ overrideNoteVels

bool tracktion::engine::MidiInputDevice::overrideNoteVels = false
protected

◆ eventReceivedFromDevice

bool tracktion::engine::MidiInputDevice::eventReceivedFromDevice = false
protected

◆ disallowedChannels

juce::BigInteger tracktion::engine::MidiInputDevice::disallowedChannels
protected

Referenced by isChannelAllowed().

◆ channelToUse

MidiChannel tracktion::engine::MidiInputDevice::channelToUse
protected

Referenced by getChannelToUse().

◆ programToUse

int tracktion::engine::MidiInputDevice::programToUse = 0
protected

Referenced by getProgramToUse().

◆ firstSetEnabledCall

bool tracktion::engine::MidiInputDevice::firstSetEnabledCall = true
protected

◆ bankToUse

int tracktion::engine::MidiInputDevice::bankToUse = 0
protected

Referenced by getBankToUse().

◆ midiSourceID

MidiMessageArray::MPESourceID tracktion::engine::MidiInputDevice::midiSourceID = MidiMessageArray::createUniqueMPESourceID()
protected

Referenced by getMPESourceID().

◆ noteLock

juce::CriticalSection tracktion::engine::MidiInputDevice::noteLock
protected

◆ keysDown

bool tracktion::engine::MidiInputDevice::keysDown[128]
protected

◆ keysUp

bool tracktion::engine::MidiInputDevice::keysUp[128]
protected

◆ keyDownVelocities

uint8_t tracktion::engine::MidiInputDevice::keyDownVelocities[128]
protected

◆ midiKeyChangeDispatcher

juce::SharedResourcePointer<MidiKeyChangeDispatcher> tracktion::engine::MidiInputDevice::midiKeyChangeDispatcher
protected

◆ instanceLock

juce::CriticalSection tracktion::engine::MidiInputDevice::instanceLock
protected

◆ instances

juce::Array<MidiInputDeviceInstanceBase*> tracktion::engine::MidiInputDevice::instances
protected

◆ retrospectiveBuffer

std::unique_ptr<RetrospectiveMidiBuffer> tracktion::engine::MidiInputDevice::retrospectiveBuffer
protected

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