TracktionEngine
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | List of all members
engine::MidiInputDevice Class Referenceabstract

#include <tracktion_MidiInputDevice.h>

Inheritance diagram for engine::MidiInputDevice:

Classes

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

Public Types

enum class  MergeMode { always , never , optional }
 
- Public Types inherited from engine::InputDevice
enum  DeviceType {
  waveDevice , trackWaveDevice , physicalMidiDevice , virtualMidiDevice ,
  trackMidiDevice
}
 enum to allow quick querying of the device type. More...
 
enum class  MonitorMode { off , automatic , on }
 Enum to describe monitor modes. More...
 

Public Member Functions

 MidiInputDevice (Engine &, juce::String name, juce::String deviceID)
 
 ~MidiInputDevice () override
 
virtual juce::String openDevice ()=0
 
virtual void closeDevice ()=0
 
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 setNoteFilterRange (NoteFilterRange)
 
NoteFilterRange getNoteFilterRange () const
 
void setOverridingNoteVelocities (bool)
 
bool isOverridingNoteVelocities () const
 
void setManualAdjustmentMs (double)
 
double getManualAdjustmentMs () const
 
void setMinimumLengthMs (double)
 
double getMinimumLengthMs () const
 
bool isMPEDevice () const
 Returns true if the given device is an MPE device and so should always record incoming MIDI to Note Expression.
 
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.
 
void connectionStateChanged ()
 
bool handleIncomingMessage (juce::MidiMessage &)
 Updates the timestamp of the message and handles sending it out to listeners.
 
void addInstance (MidiInputDeviceInstanceBase *)
 
void removeInstance (MidiInputDeviceInstanceBase *)
 
virtual void loadProps ()=0
 
ClipaddMidiAsTransaction (Edit &, EditItemID targetID, Clip *takeClip, juce::MidiMessageSequence, TimeRange markedRange, MergeMode, MidiChannel)
 
void handleIncomingMidiMessage (juce::MidiInput *, const juce::MidiMessage &) override
 
virtual void handleIncomingMidiMessage (const juce::MidiMessage &, MPESourceID)=0
 
RetrospectiveMidiBuffer * getRetrospectiveMidiBuffer () const
 
void updateRetrospectiveBufferLength (double length) override
 
double getAdjustSecs () const
 
juce::Array< AudioTrack * > getDestinationTracks ()
 
MidiChannel getMidiChannelFor (int rawChannelNumber) const
 
MPESourceID getMPESourceID () const
 
- Public Member Functions inherited from engine::InputDevice
 InputDevice (Engine &, juce::String name, juce::String deviceID)
 
 ~InputDevice () override
 
virtual DeviceType getDeviceType () const =0
 
bool isTrackDevice () const override
 
virtual bool isAvailableToEdit () const
 
bool isMidi () const override
 
MonitorMode getMonitorMode () const
 
void setMonitorMode (MonitorMode)
 
virtual InputDeviceInstancecreateInstance (EditPlaybackContext &)=0
 Creates an instance to use for a given playback context.
 
virtual void saveProps ()=0
 

Public Attributes

bool mergeRecordings = true
 
bool recordingEnabled = true
 
bool replaceExistingClips = false
 
bool recordToNoteAutomation = false
 
QuantisationType quantisation
 
juce::MidiKeyboardState keyboardState
 
- Public Attributes inherited from engine::InputDevice
LevelMeasurer levelMeasurer
 

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 loadMidiProps (const juce::XmlElement *)
 
void saveMidiProps (juce::XmlElement &)
 
void sendMessageToInstances (const juce::MidiMessage &, MPESourceID)
 

Protected Attributes

std::atomic< double > adjustSecs { 0 }
 
double manualAdjustMs = 0
 
double minimumLengthMs = 0
 
bool overrideNoteVels = false
 
bool eventReceivedFromDevice = false
 
juce::BigInteger disallowedChannels
 
MidiChannel channelToUse
 
int programToUse = 0
 
int bankToUse = 0
 
NoteFilterRange noteFilterRange
 
MPESourceID midiSourceID = createUniqueMPESourceID()
 
std::unique_ptr< NoteDispatcher > noteDispatcher
 
std::vector< double > lastNoteOns
 
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 engine::InputDevice
MonitorMode monitorMode = MonitorMode::automatic
 
MonitorMode defaultMonitorMode = MonitorMode::automatic
 
bool retrospectiveRecordLock = false
 

Additional Inherited Members

- Static Public Member Functions inherited from engine::InputDevice
static void setRetrospectiveLock (Engine &, const juce::Array< InputDeviceInstance * > &, bool lock)
 

Member Enumeration Documentation

◆ MergeMode

Enumerator
always 
never 
optional 

Constructor & Destructor Documentation

◆ MidiInputDevice()

engine::MidiInputDevice::MidiInputDevice ( Engine ,
juce::String  name,
juce::String  deviceID 
)

◆ ~MidiInputDevice()

engine::MidiInputDevice::~MidiInputDevice ( )
override

Member Function Documentation

◆ openDevice()

virtual juce::String engine::MidiInputDevice::openDevice ( )
pure virtual

◆ closeDevice()

virtual void engine::MidiInputDevice::closeDevice ( )
pure virtual

◆ setEnabled()

void engine::MidiInputDevice::setEnabled ( bool  )
override

◆ isMidi()

bool engine::MidiInputDevice::isMidi ( ) const
override

◆ getChannelToUse()

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

◆ setChannelToUse()

void engine::MidiInputDevice::setChannelToUse ( int  )

◆ getProgramToUse()

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

◆ setProgramToUse()

void engine::MidiInputDevice::setProgramToUse ( int  )

◆ setBankToUse()

void engine::MidiInputDevice::setBankToUse ( int  )

◆ getBankToUse()

int engine::MidiInputDevice::getBankToUse ( ) const

◆ setChannelAllowed()

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

◆ isChannelAllowed()

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

◆ setNoteFilterRange()

void engine::MidiInputDevice::setNoteFilterRange ( NoteFilterRange  )

◆ getNoteFilterRange()

NoteFilterRange engine::MidiInputDevice::getNoteFilterRange ( ) const

◆ setOverridingNoteVelocities()

void engine::MidiInputDevice::setOverridingNoteVelocities ( bool  )

◆ isOverridingNoteVelocities()

bool engine::MidiInputDevice::isOverridingNoteVelocities ( ) const

◆ setManualAdjustmentMs()

void engine::MidiInputDevice::setManualAdjustmentMs ( double  )

◆ getManualAdjustmentMs()

double engine::MidiInputDevice::getManualAdjustmentMs ( ) const

◆ setMinimumLengthMs()

void engine::MidiInputDevice::setMinimumLengthMs ( double  )

◆ getMinimumLengthMs()

double engine::MidiInputDevice::getMinimumLengthMs ( ) const

◆ isMPEDevice()

bool engine::MidiInputDevice::isMPEDevice ( ) const

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

◆ masterTimeUpdate()

void 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 engine::InputDevice.

◆ connectionStateChanged()

void engine::MidiInputDevice::connectionStateChanged ( )

◆ handleIncomingMessage()

bool engine::MidiInputDevice::handleIncomingMessage ( juce::MidiMessage &  )

Updates the timestamp of the message and handles sending it out to listeners.

false if the given message has been filtered out by channel or number.

◆ addInstance()

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

◆ removeInstance()

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

◆ loadProps()

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

◆ addMidiAsTransaction()

Clip * engine::MidiInputDevice::addMidiAsTransaction ( Edit ,
EditItemID  targetID,
Clip takeClip,
juce::MidiMessageSequence  ,
TimeRange  markedRange,
MergeMode  ,
MidiChannel   
)

◆ handleIncomingMidiMessage() [1/2]

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

◆ handleIncomingMidiMessage() [2/2]

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

◆ getRetrospectiveMidiBuffer()

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

◆ updateRetrospectiveBufferLength()

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

Implements engine::InputDevice.

◆ getAdjustSecs()

double engine::MidiInputDevice::getAdjustSecs ( ) const

◆ getDestinationTracks()

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

◆ getMidiChannelFor()

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

◆ getMPESourceID()

MPESourceID engine::MidiInputDevice::getMPESourceID ( ) const

◆ handleNoteOn()

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

◆ handleNoteOff()

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

◆ timerCallback()

void engine::MidiInputDevice::timerCallback ( )
overrideprotected

◆ sendNoteOnToMidiKeyListeners()

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

◆ loadMidiProps()

void engine::MidiInputDevice::loadMidiProps ( const juce::XmlElement *  )
protected

◆ saveMidiProps()

void engine::MidiInputDevice::saveMidiProps ( juce::XmlElement &  )
protected

◆ sendMessageToInstances()

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

Member Data Documentation

◆ mergeRecordings

bool engine::MidiInputDevice::mergeRecordings = true

◆ recordingEnabled

bool engine::MidiInputDevice::recordingEnabled = true

◆ replaceExistingClips

bool engine::MidiInputDevice::replaceExistingClips = false

◆ recordToNoteAutomation

bool engine::MidiInputDevice::recordToNoteAutomation = false

◆ quantisation

QuantisationType engine::MidiInputDevice::quantisation

◆ keyboardState

juce::MidiKeyboardState engine::MidiInputDevice::keyboardState

◆ adjustSecs

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

◆ manualAdjustMs

double engine::MidiInputDevice::manualAdjustMs = 0
protected

◆ minimumLengthMs

double engine::MidiInputDevice::minimumLengthMs = 0
protected

◆ overrideNoteVels

bool engine::MidiInputDevice::overrideNoteVels = false
protected

◆ eventReceivedFromDevice

bool engine::MidiInputDevice::eventReceivedFromDevice = false
protected

◆ disallowedChannels

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

◆ channelToUse

MidiChannel engine::MidiInputDevice::channelToUse
protected

◆ programToUse

int engine::MidiInputDevice::programToUse = 0
protected

◆ bankToUse

int engine::MidiInputDevice::bankToUse = 0
protected

◆ noteFilterRange

NoteFilterRange engine::MidiInputDevice::noteFilterRange
protected

◆ midiSourceID

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

◆ noteDispatcher

std::unique_ptr<NoteDispatcher> engine::MidiInputDevice::noteDispatcher
protected

◆ lastNoteOns

std::vector<double> engine::MidiInputDevice::lastNoteOns
protected

◆ noteLock

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

◆ keysDown

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

◆ keysUp

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

◆ keyDownVelocities

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

◆ midiKeyChangeDispatcher

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

◆ instanceLock

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

◆ instances

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

◆ retrospectiveBuffer

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

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