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);
314 for (
auto frame =
f_cnt_t{0}; frame < dst.frames(); ++frame)
319 switch (dst.channels())
334 for (
auto channel = 2; channel < dst.channels(); ++channel)
336 dst.sample(channel, frame) = 0.f;
355 void renderStageNoteSetup();
356 void renderStageInstruments();
357 void renderStageEffects();
358 void renderStageMix();
363 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:379
int m_inputBufferWrite
Definition AudioEngine.h:377
bool m_clearSignal
Definition AudioEngine.h:408
sample_rate_t m_baseSampleRate
Definition AudioEngine.h:371
int m_inputBufferRead
Definition AudioEngine.h:376
LocklessList< PlayHandle * > m_newPlayHandles
Definition AudioEngine.h:390
QString m_midiClientName
Definition AudioEngine.h:404
std::vector< AudioEngineWorkerThread * > m_workers
Definition AudioEngine.h:384
bool audioDevStartFailed() const
Definition AudioEngine.h:123
int m_numWorkers
Definition AudioEngine.h:385
void renderNextBuffer(InterleavedBufferView< float > dst)
Renders an audio buffer into dst.
Definition AudioEngine.h:287
f_cnt_t inputBufferFrames() const
Definition AudioEngine.h:238
void clearNewPlayHandles()
Definition AudioEngine.cpp:356
bool renderOnly() const
Definition AudioEngine.h:116
friend class Engine
Definition AudioEngine.h:412
ConstPlayHandleList m_playHandlesToRemove
Definition AudioEngine.h:391
std::span< const SampleFrame > renderNextPeriod()
Renders the next audio period.
Definition AudioEngine.cpp:319
void renderNextBuffer(AudioBufferView< float > auto dst)
Definition AudioEngine.h:312
f_cnt_t m_framesPerPeriod
Definition AudioEngine.h:370
void addAudioBusHandle(AudioBusHandle *busHandle)
Definition AudioEngine.h:140
PlayHandleList m_playHandles
Definition AudioEngine.h:388
AudioEngineProfiler & profiler()
Definition AudioEngine.h:174
MidiClient * midiClient()
Definition AudioEngine.h:156
void startProcessing()
Definition AudioEngine.h:348
void initDevices()
Definition AudioEngine.cpp:147
sample_rate_t baseSampleRate() const
Definition AudioEngine.h:189
QString m_audioDevName
Definition AudioEngine.h:399
std::unique_ptr< SampleFrame[]> m_outputBufferWrite
Definition AudioEngine.h:380
std::recursive_mutex m_changeMutex
Definition AudioEngine.h:410
int cpuLoad() const
Definition AudioEngine.h:179
bool m_audioDevStartFailed
Definition AudioEngine.h:400
float m_masterGain
Definition AudioEngine.h:393
void doneChangeInModel()
Definition AudioEngine.cpp:574
AudioEngine(bool renderOnly)
Definition AudioEngine.cpp:70
void doSetAudioDevice(AudioDevice *_dev)
Definition AudioEngine.cpp:384
float masterGain() const
Definition AudioEngine.h:204
bool m_renderOnly
Definition AudioEngine.h:365
void stopProcessing()
Definition AudioEngine.h:349
f_cnt_t m_outputBufferReadIndex
Definition AudioEngine.h:381
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:398
void nextAudioBuffer(const lmms::SampleFrame *buffer)
std::vector< AudioBusHandle * > m_audioBusHandles
Definition AudioEngine.h:367
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:374
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:397
MidiClient * m_midiClient
Definition AudioEngine.h:403
SampleFrame * m_inputBuffer[2]
Definition AudioEngine.h:373
PlayHandleList & playHandles()
Definition AudioEngine.h:167
f_cnt_t framesPerAudioBuffer() const
Definition AudioEngine.h:256
void clear()
Definition AudioEngine.cpp:348
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:568
f_cnt_t m_framesPerAudioBuffer
Definition AudioEngine.h:369
f_cnt_t m_inputBufferSize[2]
Definition AudioEngine.h:375
RequestChangesGuard requestChangesGuard()
Definition AudioEngine.h:296
const QString & midiClientName() const
Definition AudioEngine.h:151
AudioEngineProfiler m_profiler
Definition AudioEngine.h:406
const SampleFrame * inputBuffer()
Definition AudioEngine.h:233
friend class ProjectRenderer
Definition AudioEngine.h:414
friend class AudioEngineWorkerThread
Definition AudioEngine.h:413
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