25#ifndef LMMS_AUDIO_ENGINE_H
26#define LMMS_AUDIO_ENGINE_H
31#include <samplerate.h>
130 void setAudioDevice(
AudioDevice* _dev,
bool startNow);
131 void storeAudioDevice();
132 void restoreAudioDevice();
229 bool criticalXRuns()
const;
272 std::span<const SampleFrame> renderNextPeriod();
293 void requestChangeInModel();
294 void doneChangeInModel();
301 static bool isAudioDevNameValid(QString
name);
302 static bool isMidiDevNameValid(QString
name);
319 for (
auto frame =
f_cnt_t{0}; frame < dst.frames(); ++frame)
324 switch (dst.channels())
339 for (
auto channel = 2; channel < dst.channels(); ++channel)
341 dst.sample(channel, frame) = 0.f;
360 void renderStageNoteSetup();
361 void renderStageInstruments();
362 void renderStageEffects();
363 void renderStageMix();
368 void clearInternal();
#define nullptr
Definition DistrhoDefines.h:75
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Job between PlayHandle and MixerChannel.
Definition AudioBusHandle.h:55
Definition AudioDevice.h:44
RAII helper for requestChangesInModel. Used by AudioEngine::requestChangesGuard.
Definition AudioEngine.h:73
friend class AudioEngine
Definition AudioEngine.h:74
RequestChangesGuard(const RequestChangesGuard &)=delete
RequestChangesGuard(RequestChangesGuard &&other)
Definition AudioEngine.h:89
~RequestChangesGuard()
Definition AudioEngine.h:99
RequestChangesGuard(AudioEngine *audioEngine)
Definition AudioEngine.h:77
RequestChangesGuard & operator=(const RequestChangesGuard &)=delete
RequestChangesGuard()
Definition AudioEngine.h:84
AudioEngine * m_audioEngine
Definition AudioEngine.h:106
Definition AudioEngine.h:66
std::unique_ptr< SampleFrame[]> m_outputBufferRead
Definition AudioEngine.h:384
int m_inputBufferWrite
Definition AudioEngine.h:382
bool m_clearSignal
Definition AudioEngine.h:413
sample_rate_t m_baseSampleRate
Definition AudioEngine.h:376
int m_inputBufferRead
Definition AudioEngine.h:381
LocklessList< PlayHandle * > m_newPlayHandles
Definition AudioEngine.h:395
QString m_midiClientName
Definition AudioEngine.h:409
std::vector< AudioEngineWorkerThread * > m_workers
Definition AudioEngine.h:389
bool audioDevStartFailed() const
Definition AudioEngine.h:123
int m_numWorkers
Definition AudioEngine.h:390
void renderNextBuffer(InterleavedBufferView< float > dst)
Renders an audio buffer into dst.
Definition AudioEngine.h:287
std::atomic< bool > m_sanitizationEnabled
Definition AudioEngine.h:414
f_cnt_t inputBufferFrames() const
Definition AudioEngine.h:238
void clearNewPlayHandles()
Definition AudioEngine.cpp:357
bool renderOnly() const
Definition AudioEngine.h:116
friend class Engine
Definition AudioEngine.h:418
ConstPlayHandleList m_playHandlesToRemove
Definition AudioEngine.h:396
std::span< const SampleFrame > renderNextPeriod()
Renders the next audio period.
Definition AudioEngine.cpp:320
void renderNextBuffer(AudioBufferView< float > auto dst)
Definition AudioEngine.h:317
f_cnt_t m_framesPerPeriod
Definition AudioEngine.h:375
void addAudioBusHandle(AudioBusHandle *busHandle)
Definition AudioEngine.h:140
PlayHandleList m_playHandles
Definition AudioEngine.h:393
AudioEngineProfiler & profiler()
Definition AudioEngine.h:174
MidiClient * midiClient()
Definition AudioEngine.h:156
void startProcessing()
Definition AudioEngine.h:353
void initDevices()
Definition AudioEngine.cpp:148
sample_rate_t baseSampleRate() const
Definition AudioEngine.h:189
QString m_audioDevName
Definition AudioEngine.h:404
std::unique_ptr< SampleFrame[]> m_outputBufferWrite
Definition AudioEngine.h:385
std::recursive_mutex m_changeMutex
Definition AudioEngine.h:416
int cpuLoad() const
Definition AudioEngine.h:179
bool m_audioDevStartFailed
Definition AudioEngine.h:405
float m_masterGain
Definition AudioEngine.h:398
void doneChangeInModel()
Definition AudioEngine.cpp:575
AudioEngine(bool renderOnly)
Definition AudioEngine.cpp:70
void doSetAudioDevice(AudioDevice *_dev)
Definition AudioEngine.cpp:385
float masterGain() const
Definition AudioEngine.h:204
void setSanitizationEnabled(bool enabled)
Enable/disable sanitization of inf/nan values.
Definition AudioEngine.h:308
bool m_renderOnly
Definition AudioEngine.h:370
void stopProcessing()
Definition AudioEngine.h:354
f_cnt_t m_outputBufferReadIndex
Definition AudioEngine.h:386
void qualitySettingsChanged()
int detailLoad(const AudioEngineProfiler::DetailType type) const
Definition AudioEngine.h:184
AudioDevice * audioDev()
Definition AudioEngine.h:133
AudioDevice * m_oldAudioDev
Definition AudioEngine.h:403
void nextAudioBuffer(const lmms::SampleFrame *buffer)
std::vector< AudioBusHandle * > m_audioBusHandles
Definition AudioEngine.h:372
f_cnt_t framesPerPeriod() const
Definition AudioEngine.h:248
sample_rate_t inputSampleRate() const
Definition AudioEngine.h:198
f_cnt_t m_inputBufferFrames[2]
Definition AudioEngine.h:379
void renderNextBuffer(PlanarBufferView< float > dst)
Renders an audio buffer into dst.
Definition AudioEngine.h:290
static sample_t clip(const sample_t s)
Definition AudioEngine.h:215
void setMasterGain(const float mo)
Definition AudioEngine.h:209
AudioDevice * m_audioDev
Definition AudioEngine.h:402
MidiClient * m_midiClient
Definition AudioEngine.h:408
SampleFrame * m_inputBuffer[2]
Definition AudioEngine.h:378
PlayHandleList & playHandles()
Definition AudioEngine.h:167
f_cnt_t framesPerAudioBuffer() const
Definition AudioEngine.h:256
void clear()
Definition AudioEngine.cpp:349
const QString & audioDevName() const
Definition AudioEngine.h:119
sample_rate_t outputSampleRate() const
Definition AudioEngine.h:192
void requestChangeInModel()
Block until a change in model can be done (i.e. wait for audio thread).
Definition AudioEngine.cpp:569
f_cnt_t m_framesPerAudioBuffer
Definition AudioEngine.h:374
f_cnt_t m_inputBufferSize[2]
Definition AudioEngine.h:380
RequestChangesGuard requestChangesGuard()
Definition AudioEngine.h:296
bool sanitizationEnabled()
Definition AudioEngine.h:305
const QString & midiClientName() const
Definition AudioEngine.h:151
AudioEngineProfiler m_profiler
Definition AudioEngine.h:411
const SampleFrame * inputBuffer()
Definition AudioEngine.h:233
friend class ProjectRenderer
Definition AudioEngine.h:420
friend class AudioEngineWorkerThread
Definition AudioEngine.h:419
Definition AudioEngineProfiler.h:39
DetailType
Definition AudioEngineProfiler.h:58
Definition AudioEngineWorkerThread.h:41
Definition AudioBufferView.h:291
Definition LocklessList.h:37
Definition MidiClient.h:46
Definition AudioBufferView.h:481
Definition PlayHandle.h:47
Flags< Type > Types
Definition PlayHandle.h:56
Definition SampleFrame.h:41
Base-class for all tracks.
Definition Track.h:68
Concept for any audio buffer view, interleaved or planar.
Definition AudioBufferView.h:576
unsigned s
Definition inflate.c:1555
static const char * name
Definition pugl.h:1582
Definition AudioAlsa.cpp:35
constexpr int BYTES_PER_FRAME
Definition AudioEngine.h:58
QList< PlayHandle * > PlayHandleList
Definition PlayHandle.h:162
constexpr f_cnt_t MAXIMUM_BUFFER_SIZE
Definition AudioEngine.h:54
std::uint32_t sample_rate_t
Definition LmmsTypes.h:42
float sample_t
Definition LmmsTypes.h:39
constexpr auto SUPPORTED_SAMPLERATES
Definition AudioEngine.h:62
constexpr int BYTES_PER_SAMPLE
Definition AudioEngine.h:56
constexpr int BYTES_PER_INT_SAMPLE
Definition AudioEngine.h:57
std::int16_t int_sample_t
Definition LmmsTypes.h:40
constexpr f_cnt_t DEFAULT_BUFFER_SIZE
Definition AudioEngine.h:53
QList< const PlayHandle * > ConstPlayHandleList
Definition PlayHandle.h:163
std::uint64_t f_cnt_t
Definition LmmsTypes.h:43
constexpr auto SUPPORTED_BITRATES
Definition AudioEngine.h:63
constexpr float OUTPUT_SAMPLE_MULTIPLIER
Definition AudioEngine.h:60
constexpr f_cnt_t MINIMUM_BUFFER_SIZE
Definition AudioEngine.h:52
mo
Definition zipinfo.c:2287