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

#include <AudioEngine.h>

Inheritance diagram for lmms::AudioEngine:

Classes

class  RequestChangesGuard
 RAII helper for requestChangesInModel. Used by AudioEngine::requestChangesGuard. More...
class  fifoWriter

Signals

void qualitySettingsChanged ()
void sampleRateChanged ()
void nextAudioBuffer (const lmms::SampleFrame *buffer)

Public Member Functions

void initDevices ()
void clear ()
void clearNewPlayHandles ()
bool renderOnly () const
const QString & audioDevName () const
bool audioDevStartFailed () const
void setAudioDevice (AudioDevice *_dev, bool _needs_fifo, bool startNow)
void storeAudioDevice ()
void restoreAudioDevice ()
AudioDeviceaudioDev ()
void addAudioBusHandle (AudioBusHandle *busHandle)
void removeAudioBusHandle (AudioBusHandle *busHandle)
const QString & midiClientName () const
MidiClientmidiClient ()
bool addPlayHandle (PlayHandle *handle)
void removePlayHandle (PlayHandle *handle)
PlayHandleListplayHandles ()
void removePlayHandlesOfTypes (Track *track, PlayHandle::Types types)
f_cnt_t framesPerPeriod () const
AudioEngineProfilerprofiler ()
int cpuLoad () const
int detailLoad (const AudioEngineProfiler::DetailType type) const
sample_rate_t baseSampleRate () const
sample_rate_t outputSampleRate () const
sample_rate_t inputSampleRate () const
float masterGain () const
void setMasterGain (const float mo)
bool criticalXRuns () const
bool hasFifoWriter () const
void pushInputFrames (SampleFrame *_ab, const f_cnt_t _frames)
const SampleFrameinputBuffer ()
f_cnt_t inputBufferFrames () const
const SampleFramenextBuffer ()
void requestChangeInModel ()
 Block until a change in model can be done (i.e. wait for audio thread).
void doneChangeInModel ()
RequestChangesGuard requestChangesGuard ()

Static Public Member Functions

static sample_t clip (const sample_t s)
static bool isAudioDevNameValid (QString name)
static bool isMidiDevNameValid (QString name)

Private Types

using Fifo = FifoBuffer<SampleFrame*>

Private Member Functions

 AudioEngine (bool renderOnly)
 ~AudioEngine () override
void startProcessing (bool needsFifo=true)
void stopProcessing ()
AudioDevicetryAudioDevices ()
MidiClienttryMidiClients ()
void renderStageNoteSetup ()
void renderStageInstruments ()
void renderStageEffects ()
void renderStageMix ()
const SampleFramerenderNextBuffer ()
void swapBuffers ()
void clearInternal ()
void doSetAudioDevice (AudioDevice *_dev)

Private Attributes

bool m_renderOnly
std::vector< AudioBusHandle * > m_audioBusHandles
f_cnt_t m_framesPerPeriod
SampleFramem_inputBuffer [2]
f_cnt_t m_inputBufferFrames [2]
f_cnt_t m_inputBufferSize [2]
sample_rate_t m_baseSampleRate
int m_inputBufferRead
int m_inputBufferWrite
std::unique_ptr< SampleFrame[]> m_outputBufferRead
std::unique_ptr< SampleFrame[]> m_outputBufferWrite
std::vector< AudioEngineWorkerThread * > m_workers
int m_numWorkers
PlayHandleList m_playHandles
LocklessList< PlayHandle * > m_newPlayHandles
ConstPlayHandleList m_playHandlesToRemove
float m_masterGain
AudioDevicem_audioDev
AudioDevicem_oldAudioDev
QString m_audioDevName
bool m_audioDevStartFailed
MidiClientm_midiClient
QString m_midiClientName
Fifom_fifo
fifoWriterm_fifoWriter
AudioEngineProfiler m_profiler
bool m_clearSignal
std::recursive_mutex m_changeMutex

Friends

class Engine
class AudioEngineWorkerThread
class ProjectRenderer

Member Typedef Documentation

◆ Fifo

Constructor & Destructor Documentation

◆ AudioEngine()

ableton::link::AudioEngine::AudioEngine ( bool renderOnly)
private

◆ ~AudioEngine()

lmms::AudioEngine::~AudioEngine ( )
overrideprivate

Member Function Documentation

◆ addAudioBusHandle()

void lmms::AudioEngine::addAudioBusHandle ( AudioBusHandle * busHandle)
inline

◆ addPlayHandle()

bool lmms::AudioEngine::addPlayHandle ( PlayHandle * handle)

◆ audioDev()

AudioDevice * lmms::AudioEngine::audioDev ( )
inline

◆ audioDevName()

const QString & lmms::AudioEngine::audioDevName ( ) const
inline

◆ audioDevStartFailed()

bool lmms::AudioEngine::audioDevStartFailed ( ) const
inline

◆ baseSampleRate()

sample_rate_t lmms::AudioEngine::baseSampleRate ( ) const
inline

◆ clear()

void lmms::AudioEngine::clear ( )

◆ clearInternal()

void lmms::AudioEngine::clearInternal ( )
private

◆ clearNewPlayHandles()

void lmms::AudioEngine::clearNewPlayHandles ( )

◆ clip()

sample_t lmms::AudioEngine::clip ( const sample_t s)
inlinestatic

◆ cpuLoad()

int lmms::AudioEngine::cpuLoad ( ) const
inline

◆ criticalXRuns()

bool lmms::AudioEngine::criticalXRuns ( ) const

◆ detailLoad()

int lmms::AudioEngine::detailLoad ( const AudioEngineProfiler::DetailType type) const
inline

◆ doneChangeInModel()

void lmms::AudioEngine::doneChangeInModel ( )

◆ doSetAudioDevice()

void lmms::AudioEngine::doSetAudioDevice ( AudioDevice * _dev)
private

◆ framesPerPeriod()

f_cnt_t lmms::AudioEngine::framesPerPeriod ( ) const
inline

◆ hasFifoWriter()

bool lmms::AudioEngine::hasFifoWriter ( ) const
inline

◆ initDevices()

void lmms::AudioEngine::initDevices ( )

◆ inputBuffer()

const SampleFrame * lmms::AudioEngine::inputBuffer ( )
inline

◆ inputBufferFrames()

f_cnt_t lmms::AudioEngine::inputBufferFrames ( ) const
inline

◆ inputSampleRate()

sample_rate_t lmms::AudioEngine::inputSampleRate ( ) const
inline

◆ isAudioDevNameValid()

bool lmms::AudioEngine::isAudioDevNameValid ( QString name)
static

◆ isMidiDevNameValid()

bool lmms::AudioEngine::isMidiDevNameValid ( QString name)
static

◆ masterGain()

float lmms::AudioEngine::masterGain ( ) const
inline

◆ midiClient()

MidiClient * lmms::AudioEngine::midiClient ( )
inline

◆ midiClientName()

const QString & lmms::AudioEngine::midiClientName ( ) const
inline

◆ nextAudioBuffer

void lmms::AudioEngine::nextAudioBuffer ( const lmms::SampleFrame * buffer)
signal

◆ nextBuffer()

const SampleFrame * lmms::AudioEngine::nextBuffer ( )
inline

◆ outputSampleRate()

sample_rate_t lmms::AudioEngine::outputSampleRate ( ) const
inline

◆ playHandles()

PlayHandleList & lmms::AudioEngine::playHandles ( )
inline

◆ profiler()

AudioEngineProfiler & lmms::AudioEngine::profiler ( )
inline

◆ pushInputFrames()

void lmms::AudioEngine::pushInputFrames ( SampleFrame * _ab,
const f_cnt_t _frames )

◆ qualitySettingsChanged

void lmms::AudioEngine::qualitySettingsChanged ( )
signal

◆ removeAudioBusHandle()

void lmms::AudioEngine::removeAudioBusHandle ( AudioBusHandle * busHandle)

◆ removePlayHandle()

void lmms::AudioEngine::removePlayHandle ( PlayHandle * handle)

◆ removePlayHandlesOfTypes()

void lmms::AudioEngine::removePlayHandlesOfTypes ( Track * track,
PlayHandle::Types types )

◆ renderNextBuffer()

const SampleFrame * lmms::AudioEngine::renderNextBuffer ( )
private

◆ renderOnly()

bool lmms::AudioEngine::renderOnly ( ) const
inline

◆ renderStageEffects()

void lmms::AudioEngine::renderStageEffects ( )
private

◆ renderStageInstruments()

void lmms::AudioEngine::renderStageInstruments ( )
private

◆ renderStageMix()

void lmms::AudioEngine::renderStageMix ( )
private

◆ renderStageNoteSetup()

void lmms::AudioEngine::renderStageNoteSetup ( )
private

◆ requestChangeInModel()

void lmms::AudioEngine::requestChangeInModel ( )

Block until a change in model can be done (i.e. wait for audio thread).

◆ requestChangesGuard()

RequestChangesGuard lmms::AudioEngine::requestChangesGuard ( )
inline

◆ restoreAudioDevice()

void lmms::AudioEngine::restoreAudioDevice ( )

◆ sampleRateChanged

void lmms::AudioEngine::sampleRateChanged ( )
signal

◆ setAudioDevice()

void lmms::AudioEngine::setAudioDevice ( AudioDevice * _dev,
bool _needs_fifo,
bool startNow )

Set new audio device. Old device will be deleted, unless it's stored using storeAudioDevice

◆ setMasterGain()

void lmms::AudioEngine::setMasterGain ( const float mo)
inline

◆ startProcessing()

void lmms::AudioEngine::startProcessing ( bool needsFifo = true)
private

◆ stopProcessing()

void lmms::AudioEngine::stopProcessing ( )
private

◆ storeAudioDevice()

void lmms::AudioEngine::storeAudioDevice ( )

◆ swapBuffers()

void lmms::AudioEngine::swapBuffers ( )
private

◆ tryAudioDevices()

AudioDevice * lmms::AudioEngine::tryAudioDevices ( )
private

◆ tryMidiClients()

MidiClient * lmms::AudioEngine::tryMidiClients ( )
private

◆ AudioEngineWorkerThread

friend class AudioEngineWorkerThread
friend

◆ Engine

friend class Engine
friend

◆ ProjectRenderer

friend class ProjectRenderer
friend

Member Data Documentation

◆ m_audioBusHandles

std::vector<AudioBusHandle*> lmms::AudioEngine::m_audioBusHandles
private

◆ m_audioDev

AudioDevice* lmms::AudioEngine::m_audioDev
private

◆ m_audioDevName

QString lmms::AudioEngine::m_audioDevName
private

◆ m_audioDevStartFailed

bool lmms::AudioEngine::m_audioDevStartFailed
private

◆ m_baseSampleRate

sample_rate_t lmms::AudioEngine::m_baseSampleRate
private

◆ m_changeMutex

std::recursive_mutex lmms::AudioEngine::m_changeMutex
private

◆ m_clearSignal

bool lmms::AudioEngine::m_clearSignal
private

◆ m_fifo

Fifo* lmms::AudioEngine::m_fifo
private

◆ m_fifoWriter

fifoWriter* lmms::AudioEngine::m_fifoWriter
private

◆ m_framesPerPeriod

f_cnt_t lmms::AudioEngine::m_framesPerPeriod
private

◆ m_inputBuffer

SampleFrame* lmms::AudioEngine::m_inputBuffer[2]
private

◆ m_inputBufferFrames

f_cnt_t lmms::AudioEngine::m_inputBufferFrames[2]
private

◆ m_inputBufferRead

int lmms::AudioEngine::m_inputBufferRead
private

◆ m_inputBufferSize

f_cnt_t lmms::AudioEngine::m_inputBufferSize[2]
private

◆ m_inputBufferWrite

int lmms::AudioEngine::m_inputBufferWrite
private

◆ m_masterGain

float lmms::AudioEngine::m_masterGain
private

◆ m_midiClient

MidiClient* lmms::AudioEngine::m_midiClient
private

◆ m_midiClientName

QString lmms::AudioEngine::m_midiClientName
private

◆ m_newPlayHandles

LocklessList<PlayHandle *> lmms::AudioEngine::m_newPlayHandles
private

◆ m_numWorkers

int lmms::AudioEngine::m_numWorkers
private

◆ m_oldAudioDev

AudioDevice* lmms::AudioEngine::m_oldAudioDev
private

◆ m_outputBufferRead

std::unique_ptr<SampleFrame[]> lmms::AudioEngine::m_outputBufferRead
private

◆ m_outputBufferWrite

std::unique_ptr<SampleFrame[]> lmms::AudioEngine::m_outputBufferWrite
private

◆ m_playHandles

PlayHandleList lmms::AudioEngine::m_playHandles
private

◆ m_playHandlesToRemove

ConstPlayHandleList lmms::AudioEngine::m_playHandlesToRemove
private

◆ m_profiler

AudioEngineProfiler lmms::AudioEngine::m_profiler
private

◆ m_renderOnly

bool lmms::AudioEngine::m_renderOnly
private

◆ m_workers

std::vector<AudioEngineWorkerThread *> lmms::AudioEngine::m_workers
private

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