LMMS
Loading...
Searching...
No Matches
lmms::NotePlayHandle Class Reference

#include <NotePlayHandle.h>

Inheritance diagram for lmms::NotePlayHandle:
lmms::PlayHandle lmms::Note lmms::ThreadableJob lmms::SerializingObject

Classes

class  BaseDetuning

Public Types

enum class  Origin { MidiClip , MidiInput , NoteStacking , Arpeggio }
Public Types inherited from lmms::PlayHandle
enum class  Type { NotePlayHandle = 0x01 , InstrumentPlayHandle = 0x02 , SamplePlayHandle = 0x04 , PresetPreviewHandle = 0x08 }
using Types = Flags<Type>
Public Types inherited from lmms::ThreadableJob
enum class  ProcessingState : int { Unstarted , Queued , InProgress , Done }
Public Types inherited from lmms::Note
enum class  Type { Regular = 0 , Step }
enum class  ParameterType { Detuning = 0 }
 Types of per-note automation. Currently only detuning/pitch bending is supported. More...

Public Member Functions

 NotePlayHandle (InstrumentTrack *instrumentTrack, const f_cnt_t offset, const f_cnt_t frames, const Note &noteToPlay, NotePlayHandle *parent=nullptr, int midiEventChannel=-1, Origin origin=Origin::MidiClip)
 ~NotePlayHandle () override
voidoperator new (size_t size, void *p)
void setVolume (volume_t volume) override
void setPanning (panning_t panning) override
int midiKey () const
int midiChannel () const
f_cnt_t noteOffset () const
const float & frequency () const
float unpitchedFrequency () const
float currentDetuning () const
 Get the current per-note detuning for this note.
void play (SampleFrame *buffer) override
bool isFinished () const override
f_cnt_t framesLeft () const
f_cnt_t framesLeftForCurrentPeriod () const
bool isFromTrack (const Track *_track) const override
void noteOff (const f_cnt_t offset=0)
f_cnt_t framesBeforeRelease () const
f_cnt_t releaseFramesDone () const
f_cnt_t actualReleaseFramesToDo () const
f_cnt_t frames () const
void setFrames (const f_cnt_t _frames)
bool isReleased () const
bool isReleaseStarted () const
f_cnt_t totalFramesPlayed () const
float volumeLevel (const f_cnt_t frame)
const InstrumentTrackinstrumentTrack () const
InstrumentTrackinstrumentTrack ()
bool hasParent () const
Origin origin () const
bool isMasterNote () const
void setMasterNote ()
bool isMuted () const
void mute ()
int index () const
bool operator== (const NotePlayHandle &_nph) const
bool isPatternTrackMuted ()
void setPatternTrack (Track *t)
void processTimePos (const TimePos &time, float pitchValue, bool isRecording)
void resize (const bpm_t newTempo)
void setSongGlobalParentOffset (const TimePos &offset)
const TimePossongGlobalParentOffset () const
void setFrequencyUpdate ()
Public Member Functions inherited from lmms::PlayHandle
 PlayHandle (const Type type, f_cnt_t offset=0)
PlayHandleoperator= (PlayHandle &p)
virtual ~PlayHandle ()
virtual bool affinityMatters () const
const QThread * affinity () const
Type type () const
void doProcessing () override
bool requiresProcessing () const override
void lock ()
void unlock ()
bool tryLock ()
f_cnt_t offset () const
void setOffset (f_cnt_t _offset)
bool usesBuffer () const
void setUsesBuffer (const bool b)
AudioBusHandleaudioBusHandle ()
void setAudioBusHandle (AudioBusHandle *busHandle)
void releaseBuffer ()
SampleFramebuffer ()
Public Member Functions inherited from lmms::ThreadableJob
 ThreadableJob ()
ProcessingState state () const
void reset ()
void queue ()
void done ()
void process ()
Public Member Functions inherited from lmms::Note
 Note (const TimePos &length=TimePos(0), const TimePos &pos=TimePos(0), int key=DefaultKey, volume_t volume=DefaultVolume, panning_t panning=DefaultPanning, std::shared_ptr< DetuningHelper > detuning=nullptr)
 Note (const Note &note)
 ~Note () override
Noteoperator= (const Note &note)
Noteclone () const
 Performs a deep copy and returns an owning raw pointer.
Type type () const
void setType (Type t)
AutomationClipparameterCurve (ParameterType paramType)
void setSelected (const bool selected)
void setOldKey (const int oldKey)
void setOldPos (const TimePos &oldPos)
void setOldLength (const TimePos &oldLength)
void setIsPlaying (const bool isPlaying)
void setLength (const TimePos &length)
void setPos (const TimePos &pos)
void setKey (const int key)
void quantizeLength (const int qGrid)
void quantizePos (const int qGrid)
bool selected () const
int oldKey () const
TimePos oldPos () const
TimePos oldLength () const
bool isPlaying () const
TimePos endPos () const
const TimePoslength () const
const TimePospos () const
TimePos pos (TimePos basePos) const
int key () const
volume_t getVolume () const
int midiVelocity (int midiBaseVelocity) const
panning_t getPanning () const
QString nodeName () const override
const std::shared_ptr< DetuningHelper > & detuning () const
bool hasDetuningInfo () const
bool withinRange (int tickStart, int tickEnd) const
void createDetuning ()
Public Member Functions inherited from lmms::SerializingObject
 SerializingObject ()
virtual ~SerializingObject ()
virtual QDomElement saveState (QDomDocument &_doc, QDomElement &_parent)
virtual void restoreState (const QDomElement &_this)
void setHook (SerializingObjectHook *_hook)
SerializingObjectHookhook ()

Static Public Member Functions

static ConstNotePlayHandleList nphsOfInstrumentTrack (const InstrumentTrack *Track, bool allPlayHandles=false)
Static Public Member Functions inherited from lmms::Note
static bool lessThan (const Note *lhs, const Note *rhs)
static QString classNodeName ()
static TimePos quantized (const TimePos &m, const int qGrid)

Public Attributes

voidm_pluginData
std::unique_ptr< BasicFilters<> > m_filter
f_cnt_t m_fadeInLength

Private Member Functions

void updateFrequency ()

Private Attributes

InstrumentTrackm_instrumentTrack
f_cnt_t m_frames
f_cnt_t m_totalFramesPlayed
f_cnt_t m_framesBeforeRelease
f_cnt_t m_releaseFramesToDo
f_cnt_t m_releaseFramesDone
NotePlayHandleList m_subNotes
volatile bool m_released
bool m_releaseStarted
bool m_hasMidiNote
bool m_hasParent
NotePlayHandlem_parent
bool m_hadChildren
bool m_muted
Trackm_patternTrack
bpm_t m_origTempo
f_cnt_t m_origFrames
int m_origBaseNote
float m_frequency
float m_unpitchedFrequency
BaseDetuningm_baseDetuning
TimePos m_songGlobalParentOffset
int m_midiChannel
Origin m_origin
bool m_frequencyNeedsUpdate

Additional Inherited Members

Static Public Attributes inherited from lmms::PlayHandle
static constexpr std::size_t MaxNumber = 1024
Protected Member Functions inherited from lmms::Note
void saveSettings (QDomDocument &doc, QDomElement &parent) override
void loadSettings (const QDomElement &_this) override
Protected Attributes inherited from lmms::ThreadableJob
std::atomic< ProcessingStatem_state

Member Enumeration Documentation

◆ Origin

enum class lmms::NotePlayHandle::Origin
strong
Enumerator
MidiClip 
MidiInput 

playback of a note from a MIDI clip

NoteStacking 

playback of a MIDI note input event

Arpeggio 

created by note stacking instrument function

Constructor & Destructor Documentation

◆ NotePlayHandle()

lmms::NotePlayHandle::NotePlayHandle ( InstrumentTrack * instrumentTrack,
const f_cnt_t offset,
const f_cnt_t frames,
const Note & noteToPlay,
NotePlayHandle * parent = nullptr,
int midiEventChannel = -1,
Origin origin = Origin::MidiClip )

◆ ~NotePlayHandle()

lmms::NotePlayHandle::~NotePlayHandle ( )
override

Member Function Documentation

◆ actualReleaseFramesToDo()

f_cnt_t lmms::NotePlayHandle::actualReleaseFramesToDo ( ) const

Returns the number of frames to be played after release according to the release times in the envelopes

◆ currentDetuning()

float lmms::NotePlayHandle::currentDetuning ( ) const
inline

Get the current per-note detuning for this note.

◆ frames()

f_cnt_t lmms::NotePlayHandle::frames ( ) const
inline

Returns total numbers of frames to play (including release frames)

◆ framesBeforeRelease()

f_cnt_t lmms::NotePlayHandle::framesBeforeRelease ( ) const
inline

Returns number of frames to be played until the note is going to be released

◆ framesLeft()

f_cnt_t lmms::NotePlayHandle::framesLeft ( ) const

Returns number of frames left for playback

◆ framesLeftForCurrentPeriod()

f_cnt_t lmms::NotePlayHandle::framesLeftForCurrentPeriod ( ) const

Returns how many frames have to be rendered in current period

◆ frequency()

const float & lmms::NotePlayHandle::frequency ( ) const
inline

◆ hasParent()

bool lmms::NotePlayHandle::hasParent ( ) const
inline

Returns whether note has a parent, e.g. is not part of an arpeggio or a chord

◆ index()

int lmms::NotePlayHandle::index ( ) const

Returns index of NotePlayHandle in vector of note-play-handles belonging to this instrument track - used by arpeggiator. Ignores child note-play-handles, returns -1 when called on one

◆ instrumentTrack() [1/2]

InstrumentTrack * lmms::NotePlayHandle::instrumentTrack ( )
inline

Returns instrument track which is being played by this handle

◆ instrumentTrack() [2/2]

const InstrumentTrack * lmms::NotePlayHandle::instrumentTrack ( ) const
inline

Returns instrument track which is being played by this handle (const version)

◆ isFinished()

bool lmms::NotePlayHandle::isFinished ( ) const
inlineoverridevirtual

Returns whether playback of note is finished and thus handle can be deleted

Implements lmms::PlayHandle.

◆ isFromTrack()

bool lmms::NotePlayHandle::isFromTrack ( const Track * _track) const
overridevirtual

Returns whether the play handle plays on a certain track

Implements lmms::PlayHandle.

◆ isMasterNote()

bool lmms::NotePlayHandle::isMasterNote ( ) const
inline

Returns whether note has children

◆ isMuted()

bool lmms::NotePlayHandle::isMuted ( ) const
inline

Returns whether note is muted

◆ isPatternTrackMuted()

bool lmms::NotePlayHandle::isPatternTrackMuted ( )
inline

Returns whether NotePlayHandle belongs to pattern track and pattern track is muted

◆ isReleased()

bool lmms::NotePlayHandle::isReleased ( ) const
inline

Returns whether note was released

◆ isReleaseStarted()

bool lmms::NotePlayHandle::isReleaseStarted ( ) const
inline

◆ midiChannel()

int lmms::NotePlayHandle::midiChannel ( ) const
inline

◆ midiKey()

int lmms::NotePlayHandle::midiKey ( ) const

◆ mute()

void lmms::NotePlayHandle::mute ( )

Mutes playback of note

◆ noteOff()

void lmms::NotePlayHandle::noteOff ( const f_cnt_t offset = 0)

Releases the note (and plays release frames)

◆ noteOffset()

f_cnt_t lmms::NotePlayHandle::noteOffset ( ) const
inline

convenience function that returns offset for the first period and zero otherwise, used by instruments to handle the offset: instruments have to check this property and add the correct number of empty frames in the beginning of the period

◆ nphsOfInstrumentTrack()

ConstNotePlayHandleList lmms::NotePlayHandle::nphsOfInstrumentTrack ( const InstrumentTrack * Track,
bool allPlayHandles = false )
static

Returns list of note-play-handles belonging to given instrument track. If allPlayHandles = true, also released note-play-handles and children are returned

◆ operator new()

void * lmms::NotePlayHandle::operator new ( size_t size,
void * p )
inline

◆ operator==()

bool lmms::NotePlayHandle::operator== ( const NotePlayHandle & _nph) const

Returns whether given NotePlayHandle instance is equal to *this

◆ origin()

Origin lmms::NotePlayHandle::origin ( ) const
inline

Returns origin of note

◆ play()

void lmms::NotePlayHandle::play ( SampleFrame * buffer)
overridevirtual

Renders one chunk using the attached instrument into the buffer

Implements lmms::PlayHandle.

◆ processTimePos()

void lmms::NotePlayHandle::processTimePos ( const TimePos & time,
float pitchValue,
bool isRecording )

Process note detuning automation

◆ releaseFramesDone()

f_cnt_t lmms::NotePlayHandle::releaseFramesDone ( ) const
inline

Returns how many frames were played since release

◆ resize()

void lmms::NotePlayHandle::resize ( const bpm_t newTempo)

Updates total length (m_frames) depending on a new tempo

◆ setFrames()

void lmms::NotePlayHandle::setFrames ( const f_cnt_t _frames)

Sets the total number of frames to play (including release frames)

◆ setFrequencyUpdate()

void lmms::NotePlayHandle::setFrequencyUpdate ( )
inline

◆ setMasterNote()

void lmms::NotePlayHandle::setMasterNote ( )
inline

◆ setPanning()

void lmms::NotePlayHandle::setPanning ( panning_t panning)
overridevirtual

Reimplemented from lmms::Note.

◆ setPatternTrack()

void lmms::NotePlayHandle::setPatternTrack ( Track * t)
inline

Sets attached pattern track

◆ setSongGlobalParentOffset()

void lmms::NotePlayHandle::setSongGlobalParentOffset ( const TimePos & offset)
inline

Set song-global offset (relative to containing MIDI clip) in order to properly perform the note detuning

◆ setVolume()

void lmms::NotePlayHandle::setVolume ( volume_t volume)
overridevirtual

Reimplemented from lmms::Note.

◆ songGlobalParentOffset()

const TimePos & lmms::NotePlayHandle::songGlobalParentOffset ( ) const
inline

Returns song-global offset

◆ totalFramesPlayed()

f_cnt_t lmms::NotePlayHandle::totalFramesPlayed ( ) const
inline

Returns total numbers of frames played so far

◆ unpitchedFrequency()

float lmms::NotePlayHandle::unpitchedFrequency ( ) const
inline

Returns frequency without pitch wheel influence

◆ updateFrequency()

void lmms::NotePlayHandle::updateFrequency ( )
private

◆ volumeLevel()

float lmms::NotePlayHandle::volumeLevel ( const f_cnt_t frame)

Returns volume level at given frame (envelope/LFO)

Member Data Documentation

◆ m_baseDetuning

BaseDetuning* lmms::NotePlayHandle::m_baseDetuning
private

◆ m_fadeInLength

f_cnt_t lmms::NotePlayHandle::m_fadeInLength

◆ m_filter

std::unique_ptr<BasicFilters<> > lmms::NotePlayHandle::m_filter

◆ m_frames

f_cnt_t lmms::NotePlayHandle::m_frames
private

◆ m_framesBeforeRelease

f_cnt_t lmms::NotePlayHandle::m_framesBeforeRelease
private

◆ m_frequency

float lmms::NotePlayHandle::m_frequency
private

◆ m_frequencyNeedsUpdate

bool lmms::NotePlayHandle::m_frequencyNeedsUpdate
private

◆ m_hadChildren

bool lmms::NotePlayHandle::m_hadChildren
private

◆ m_hasMidiNote

bool lmms::NotePlayHandle::m_hasMidiNote
private

◆ m_hasParent

bool lmms::NotePlayHandle::m_hasParent
private

◆ m_instrumentTrack

InstrumentTrack* lmms::NotePlayHandle::m_instrumentTrack
private

◆ m_midiChannel

int lmms::NotePlayHandle::m_midiChannel
private

◆ m_muted

bool lmms::NotePlayHandle::m_muted
private

◆ m_origBaseNote

int lmms::NotePlayHandle::m_origBaseNote
private

◆ m_origFrames

f_cnt_t lmms::NotePlayHandle::m_origFrames
private

◆ m_origin

Origin lmms::NotePlayHandle::m_origin
private

◆ m_origTempo

bpm_t lmms::NotePlayHandle::m_origTempo
private

◆ m_parent

NotePlayHandle* lmms::NotePlayHandle::m_parent
private

◆ m_patternTrack

Track* lmms::NotePlayHandle::m_patternTrack
private

◆ m_pluginData

void* lmms::NotePlayHandle::m_pluginData

◆ m_released

volatile bool lmms::NotePlayHandle::m_released
private

◆ m_releaseFramesDone

f_cnt_t lmms::NotePlayHandle::m_releaseFramesDone
private

◆ m_releaseFramesToDo

f_cnt_t lmms::NotePlayHandle::m_releaseFramesToDo
private

◆ m_releaseStarted

bool lmms::NotePlayHandle::m_releaseStarted
private

◆ m_songGlobalParentOffset

TimePos lmms::NotePlayHandle::m_songGlobalParentOffset
private

◆ m_subNotes

NotePlayHandleList lmms::NotePlayHandle::m_subNotes
private

◆ m_totalFramesPlayed

f_cnt_t lmms::NotePlayHandle::m_totalFramesPlayed
private

◆ m_unpitchedFrequency

float lmms::NotePlayHandle::m_unpitchedFrequency
private

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