Carla Backend
Loading...
Searching...
No Matches
CarlaEngine.hpp
Go to the documentation of this file.
1/*
2 * Carla Plugin Host
3 * Copyright (C) 2011-2022 Filipe Coelho <falktx@falktx.com>
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of
8 * the License, or any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * For a full copy of the GNU General Public License see the doc/GPL.txt file.
16 */
17
18#ifndef CARLA_ENGINE_HPP_INCLUDED
19#define CARLA_ENGINE_HPP_INCLUDED
20
21#include "CarlaBackend.h"
22#include "CarlaPluginPtr.hpp"
23
24namespace water {
25class MemoryOutputStream;
26class XmlDocument;
27}
28
29CARLA_BACKEND_START_NAMESPACE
30
31// -----------------------------------------------------------------------
32
39
85
113
135
171
175static const uint8_t kEngineEventNonMidiChannel = 0x30;
176
177// -----------------------------------------------------------------------
178
182struct CARLA_API EngineControlEvent {
184 uint16_t param;
185 int8_t midiValue;
187 bool handled;
188
193 uint8_t convertToMidiData(uint8_t channel, uint8_t data[3]) const noexcept;
194};
195
199struct CARLA_API EngineMidiEvent {
200 static const uint8_t kDataSize = 4;
201
202 uint8_t port;
203 uint8_t size;
204
209 uint8_t data[kDataSize];
210 const uint8_t* dataExt;
211};
212
216struct CARLA_API EngineEvent {
218 uint32_t time;
219 uint8_t channel;
220
224 union {
227 };
228
232 void fillFromMidiData(uint8_t size, const uint8_t* data, uint8_t midiPortOffset) noexcept;
233};
234
235// -----------------------------------------------------------------------
236
240struct CARLA_API EngineOptions {
243 const char* transportExtra;
244
253 float uiScale;
254
260 const char* audioDriver;
261 const char* audioDevice;
262
263#ifndef BUILD_BRIDGE
267#endif
268
269 const char* pathAudio;
270 const char* pathMIDI;
271
272 const char* pathLADSPA;
273 const char* pathDSSI;
274 const char* pathLV2;
275 const char* pathVST2;
276 const char* pathVST3;
277 const char* pathSF2;
278 const char* pathSFZ;
279 const char* pathJSFX;
280
281 const char* binaryDir;
282 const char* resourceDir;
283 const char* clientNamePrefix;
284
286 uintptr_t frontendWinId;
287
288#ifndef CARLA_OS_WIN
289 struct Wine {
290 const char* executable;
291
293 const char* fallbackPrefix;
294
295 bool rtPrio;
298
299 Wine() noexcept;
300 ~Wine() noexcept;
301 CARLA_DECLARE_NON_COPYABLE(Wine)
303#endif
304
305#ifndef DOXYGEN
306 EngineOptions() noexcept;
307 ~EngineOptions() noexcept;
308 CARLA_DECLARE_NON_COPYABLE(EngineOptions)
309#endif
310};
311
315struct CARLA_API EngineTimeInfoBBT {
316 bool valid;
317
318 int32_t bar;
319 int32_t beat;
320 double tick;
322
324 float beatType;
325
328
332 void clear() noexcept;
333
334#ifndef DOXYGEN
335 EngineTimeInfoBBT() noexcept;
336 EngineTimeInfoBBT(const EngineTimeInfoBBT&) noexcept;
337#endif
338};
339
343struct CARLA_API EngineTimeInfo {
345 uint64_t frame;
346 uint64_t usecs;
348
352 void clear() noexcept;
353
354#ifndef DOXYGEN
355 EngineTimeInfo() noexcept;
356 EngineTimeInfo(const EngineTimeInfo&) noexcept;
357 EngineTimeInfo& operator=(const EngineTimeInfo&) noexcept;
358
359 // fast comparison, doesn't check all values
360 bool compareIgnoringRollingFrames(const EngineTimeInfo& timeInfo, uint32_t maxFrames) const noexcept;
361
362 // quick operator, doesn't check all values
363 bool operator==(const EngineTimeInfo& timeInfo) const noexcept;
364 bool operator!=(const EngineTimeInfo& timeInfo) const noexcept;
365#endif
366};
367
368// -----------------------------------------------------------------------
369
374class CARLA_API CarlaEnginePort
375{
376protected:
381 CarlaEnginePort(const CarlaEngineClient& client, bool isInputPort, uint32_t indexOffset) noexcept;
382
383public:
387 virtual ~CarlaEnginePort() noexcept;
388
392 virtual EnginePortType getType() const noexcept = 0;
393
397 virtual void initBuffer() noexcept = 0;
398
402 inline bool isInput() const noexcept
403 {
404 return kIsInput;
405 }
406
410 inline uint32_t getIndexOffset() const noexcept
411 {
412 return kIndexOffset;
413 }
414
418 inline const CarlaEngineClient& getEngineClient() const noexcept
419 {
420 return kClient;
421 }
422
426 virtual void setMetaData(const char* key, const char* value, const char* type);
427
428#ifndef DOXYGEN
429protected:
430 const CarlaEngineClient& kClient;
431 const bool kIsInput;
432 const uint32_t kIndexOffset;
433
434 CARLA_DECLARE_NON_COPYABLE(CarlaEnginePort)
435#endif
436};
437
441class CARLA_API CarlaEngineAudioPort : public CarlaEnginePort
442{
443public:
448 CarlaEngineAudioPort(const CarlaEngineClient& client, bool isInputPort, uint32_t indexOffset) noexcept;
449
453 ~CarlaEngineAudioPort() noexcept override;
454
458 inline EnginePortType getType() const noexcept final
459 {
461 }
462
466 void initBuffer() noexcept override;
467
472 inline float* getBuffer() const noexcept
473 {
474 return fBuffer;
475 }
476
477#ifndef DOXYGEN
478protected:
479 float* fBuffer;
480
481 CARLA_DECLARE_NON_COPYABLE(CarlaEngineAudioPort)
482#endif
483};
484
488class CARLA_API CarlaEngineCVPort : public CarlaEnginePort
489{
490public:
495 CarlaEngineCVPort(const CarlaEngineClient& client, bool isInputPort, uint32_t indexOffset) noexcept;
496
500 ~CarlaEngineCVPort() noexcept override;
501
505 inline EnginePortType getType() const noexcept final
506 {
507 return kEnginePortTypeCV;
508 }
509
513 void initBuffer() noexcept override;
514
519 inline float* getBuffer() const noexcept
520 {
521 return fBuffer;
522 }
523
527 inline void getRange(float& min, float& max) const noexcept
528 {
529 min = fMinimum;
530 max = fMaximum;
531 }
532
536 void setRange(float min, float max) noexcept;
537
538#ifndef DOXYGEN
539protected:
540 float* fBuffer;
541 float fMinimum, fMaximum;
542
543 CARLA_DECLARE_NON_COPYABLE(CarlaEngineCVPort)
544#endif
545};
546
550class CARLA_API CarlaEngineEventPort : public CarlaEnginePort
551{
552public:
557 CarlaEngineEventPort(const CarlaEngineClient& client, bool isInputPort, uint32_t indexOffset) noexcept;
558
562 ~CarlaEngineEventPort() noexcept override;
563
567 inline EnginePortType getType() const noexcept final
568 {
570 }
571
575 void initBuffer() noexcept override;
576
581 virtual uint32_t getEventCount() const noexcept;
582
587 virtual EngineEvent& getEvent(uint32_t index) const noexcept;
588
592 virtual EngineEvent& getEventUnchecked(uint32_t index) const noexcept;
593
598 bool writeControlEvent(uint32_t time, uint8_t channel, const EngineControlEvent& ctrl) noexcept;
599
605 virtual bool writeControlEvent(uint32_t time, uint8_t channel, EngineControlEventType type,
606 uint16_t param, int8_t midiValue, float normalizedValue) noexcept;
607
612 bool writeMidiEvent(uint32_t time, uint8_t size, const uint8_t* data) noexcept;
613
618 bool writeMidiEvent(uint32_t time, uint8_t channel, const EngineMidiEvent& midi) noexcept;
619
625 virtual bool writeMidiEvent(uint32_t time, uint8_t channel, uint8_t size, const uint8_t* data) noexcept;
626
627#ifndef DOXYGEN
628protected:
629 const EngineProcessMode kProcessMode;
630 EngineEvent* fBuffer;
631 friend class CarlaPluginInstance;
632 friend class CarlaEngineCVSourcePorts;
633
634 CARLA_DECLARE_NON_COPYABLE(CarlaEngineEventPort)
635#endif
636};
637
638// -----------------------------------------------------------------------
639
645{
646public:
651
655 virtual bool addCVSource(CarlaEngineCVPort* port, uint32_t portIndexOffset, bool reconfigureNow);
656
660 virtual bool removeCVSource(uint32_t portIndexOffset);
661
666 virtual void initPortBuffers(const float* const* buffers, uint32_t frames,
667 bool sampleAccurate, CarlaEngineEventPort* eventPort);
668
672 bool setCVSourceRange(uint32_t portIndexOffset, float minimum, float maximum);
673
677 void cleanup();
678
679#ifndef DOXYGEN
680protected:
682 struct ProtectedData;
683 ProtectedData* const pData;
684
689
690 CARLA_DECLARE_NON_COPYABLE(CarlaEngineCVSourcePorts)
691#endif
692};
693
694// -----------------------------------------------------------------------
695
701class CARLA_API CarlaEngineClient
702{
703public:
707 virtual ~CarlaEngineClient() noexcept;
708
713 virtual void activate() noexcept;
714
719 virtual void deactivate(bool willClose) noexcept;
720
724 virtual bool isActive() const noexcept;
725
731 virtual bool isOk() const noexcept;
732
736 virtual uint32_t getLatency() const noexcept;
737
741 virtual void setLatency(uint32_t samples) noexcept;
742
747 virtual CarlaEnginePort* addPort(EnginePortType portType, const char* name, bool isInput, uint32_t indexOffset);
748
752 virtual bool removePort(EnginePortType portType, const char* name, bool isInput);
753
754#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
760#endif
761
765 const CarlaEngine& getEngine() const noexcept;
766
771
775 uint getPortCount(EnginePortType portType, bool isInput) const noexcept;
776
780 const char* getAudioPortName(bool isInput, uint index) const noexcept;
781
785 const char* getCVPortName(bool isInput, uint index) const noexcept;
786
790 const char* getEventPortName(bool isInput, uint index) const noexcept;
791
792#ifndef DOXYGEN
793protected:
795 struct ProtectedData;
796 ProtectedData* const pData;
797
801 CarlaEngineClient(ProtectedData* pData);
802
803 CARLA_DECLARE_NON_COPYABLE(CarlaEngineClient)
804#endif
805};
806
807// -----------------------------------------------------------------------
808
813class CARLA_API CarlaEngine
814{
815protected:
821
822public:
827 virtual ~CarlaEngine();
828
829 // -------------------------------------------------------------------
830 // Static calls
831
835 static uint getDriverCount();
836
840 static const char* getDriverName(uint index);
841
845 static const char* const* getDriverDeviceNames(uint index);
846
850 static const EngineDriverDeviceInfo* getDriverDeviceInfo(uint index, const char* driverName);
851
856 static bool showDriverDeviceControlPanel(uint index, const char* deviceName);
857
863 static CarlaEngine* newDriverByName(const char* driverName);
864
865 // -------------------------------------------------------------------
866 // Constant values
867
871 virtual uint getMaxClientNameSize() const noexcept;
872
876 virtual uint getMaxPortNameSize() const noexcept;
877
881 uint getCurrentPluginCount() const noexcept;
882
887 uint getMaxPluginNumber() const noexcept;
888
889 // -------------------------------------------------------------------
890 // Virtual, per-engine type calls
891
896 virtual bool init(const char* clientName) = 0;
897
903 virtual bool close();
904
908 virtual void idle() noexcept;
909
913 virtual bool isRunning() const noexcept = 0;
914
918 virtual bool isOffline() const noexcept = 0;
919
924 virtual bool usesConstantBufferSize() const noexcept;
925
929 virtual EngineType getType() const noexcept = 0;
930
934 virtual const char* getCurrentDriverName() const noexcept = 0;
935
941
945 virtual float getDSPLoad() const noexcept;
946
950 virtual uint32_t getTotalXruns() const noexcept;
951
955 virtual void clearXruns() const noexcept;
956
962 virtual bool setBufferSizeAndSampleRate(uint bufferSize, double sampleRate);
963
968 virtual bool showDeviceControlPanel() const noexcept;
969
970 // -------------------------------------------------------------------
971 // Plugin management
972
977 bool addPlugin(BinaryType btype, PluginType ptype,
978 const char* filename, const char* name, const char* label, int64_t uniqueId,
979 const void* extra, uint options = PLUGIN_OPTIONS_NULL);
980
986 const char* filename, const char* name, const char* label, int64_t uniqueId,
987 const void* extra);
988
993 virtual bool removePlugin(uint id);
994
999
1000#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
1007 virtual bool renamePlugin(uint id, const char* newName);
1008
1012 bool clonePlugin(uint id);
1013
1019 bool replacePlugin(uint id) noexcept;
1020
1024 virtual bool switchPlugins(uint idA, uint idB) noexcept;
1025#endif
1026
1034 virtual void touchPluginParameter(uint id, uint32_t parameterId, bool touch) noexcept;
1035
1039 CarlaPluginPtr getPlugin(uint id) const noexcept;
1040
1044 CarlaPluginPtr getPluginUnchecked(uint id) const noexcept;
1045
1050 const char* getUniquePluginName(const char* name) const;
1051
1052 // -------------------------------------------------------------------
1053 // Project management
1054
1060 bool loadFile(const char* filename);
1061
1066 bool loadProject(const char* filename, bool setAsCurrentProject);
1067
1071 bool saveProject(const char* filename, bool setAsCurrentProject);
1072
1073#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
1078 virtual const char* getCurrentProjectFolder() const noexcept;
1079
1084 const char* getCurrentProjectFilename() const noexcept;
1085
1090#endif
1091
1092 // -------------------------------------------------------------------
1093 // Information (base)
1094
1098 uint32_t getBufferSize() const noexcept;
1099
1103 double getSampleRate() const noexcept;
1104
1108 const char* getName() const noexcept;
1109
1114
1118 const EngineOptions& getOptions() const noexcept;
1119
1123 virtual EngineTimeInfo getTimeInfo() const noexcept;
1124
1125 // -------------------------------------------------------------------
1126 // Information (peaks)
1127
1132 const float* getPeaks(uint pluginId) const noexcept;
1133
1137 float getInputPeak(uint pluginId, bool isLeft) const noexcept;
1138
1142 float getOutputPeak(uint pluginId, bool isLeft) const noexcept;
1143
1144 // -------------------------------------------------------------------
1145 // Callback
1146
1151 virtual void callback(bool sendHost, bool sendOSC,
1152 EngineCallbackOpcode action, uint pluginId,
1153 int value1, int value2, int value3, float valuef, const char* valueStr) noexcept;
1154
1158 void setCallback(EngineCallbackFunc func, void* ptr) noexcept;
1159
1160 // -------------------------------------------------------------------
1161 // Callback
1162
1167 virtual const char* runFileCallback(FileCallbackOpcode action,
1168 bool isDir, const char* title, const char* filter) noexcept;
1169
1173 void setFileCallback(FileCallbackFunc func, void* ptr) noexcept;
1174
1175#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
1176 // -------------------------------------------------------------------
1177 // Patchbay
1178
1182 virtual bool patchbayConnect(bool external,
1183 uint groupA, uint portA,
1184 uint groupB, uint portB);
1185
1189 virtual bool patchbayDisconnect(bool external, uint connectionId);
1190
1194 virtual bool patchbaySetGroupPos(bool sendHost, bool sendOSC, bool external,
1195 uint groupId, int x1, int y1, int x2, int y2);
1196
1200 virtual bool patchbayRefresh(bool sendHost, bool sendOSC, bool external);
1201#endif
1202
1203 // -------------------------------------------------------------------
1204 // Transport
1205
1209 virtual void transportPlay() noexcept;
1210
1214 virtual void transportPause() noexcept;
1215
1219 virtual void transportBPM(double bpm) noexcept;
1220
1224 virtual void transportRelocate(uint64_t frame) noexcept;
1225
1226 // -------------------------------------------------------------------
1227 // Error handling
1228
1232 const char* getLastError() const noexcept;
1233
1237 void setLastError(const char* error) const noexcept;
1238
1239 // -------------------------------------------------------------------
1240 // Misc
1241
1245 bool isAboutToClose() const noexcept;
1246
1252 bool setAboutToClose() noexcept;
1253
1254#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
1258 bool isLoadingProject() const noexcept;
1259#endif
1260
1265 void setActionCanceled(bool canceled) noexcept;
1266
1270 bool wasActionCanceled() const noexcept;
1271
1272 // -------------------------------------------------------------------
1273 // Options
1274
1278 virtual void setOption(EngineOption option, int value, const char* valueStr) noexcept;
1279
1280 // -------------------------------------------------------------------
1281 // OSC Stuff
1282
1283#ifndef BUILD_BRIDGE
1287 bool isOscControlRegistered() const noexcept;
1288
1292 const char* getOscServerPathTCP() const noexcept;
1293
1297 const char* getOscServerPathUDP() const noexcept;
1298#endif
1299
1300 // -------------------------------------------------------------------
1301
1302protected:
1306 struct ProtectedData;
1307 ProtectedData* const pData;
1308
1313 friend class CarlaEngineOsc;
1314 friend class CarlaEngineRunner;
1318 friend class ScopedActionLock;
1321 friend class PatchbayGraph;
1322 friend struct ExternalGraph;
1323 friend struct RackGraph;
1324
1325 // -------------------------------------------------------------------
1326 // Internal stuff
1327
1331 void bufferSizeChanged(uint32_t newBufferSize);
1332
1337 void sampleRateChanged(double newSampleRate);
1338
1343
1348 void setPluginPeaksRT(uint pluginId, float const inPeaks[2], float const outPeaks[2]) noexcept;
1349
1350public:
1354 void saveProjectInternal(water::MemoryOutputStream& outStrm) const;
1355
1359 bool loadProjectInternal(water::XmlDocument& xmlDoc, bool alwaysLoadConnections);
1360
1361protected:
1362 // -------------------------------------------------------------------
1363 // Helper functions
1364
1369 EngineEvent* getInternalEventBuffer(bool isInput) const noexcept;
1370
1371#ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
1372 // -------------------------------------------------------------------
1373 // Patchbay stuff
1374
1379 struct PatchbayPosition { const char* name; int x1, y1, x2, y2, pluginId; bool dealloc; };
1380 virtual const char* const* getPatchbayConnections(bool external) const;
1381 virtual const PatchbayPosition* getPatchbayPositions(bool external, uint& count) const;
1382 virtual void restorePatchbayConnection(bool external, const char* sourcePort, const char* targetPort);
1383 // returns true if plugin name mapping found, ppos.name updated to its converted name
1384 virtual bool restorePatchbayGroupPosition(bool external, PatchbayPosition& ppos);
1385
1389 virtual bool connectExternalGraphPort(uint, uint, const char*);
1390 virtual bool disconnectExternalGraphPort(uint, uint, const char*);
1391#endif
1392
1393 // -------------------------------------------------------------------
1394
1395 CARLA_DECLARE_NON_COPYABLE(CarlaEngine)
1396};
1397
1399
1400// -----------------------------------------------------------------------
1401
1402CARLA_BACKEND_END_NAMESPACE
1403
1404#endif // CARLA_ENGINE_HPP_INCLUDED
CARLA_BACKEND_START_NAMESPACE typedef std::shared_ptr< CarlaPlugin > CarlaPluginPtr
Definition CarlaPluginPtr.hpp:267
Definition CarlaEngine.hpp:442
void initBuffer() noexcept override
CarlaEngineAudioPort(const CarlaEngineClient &client, bool isInputPort, uint32_t indexOffset) noexcept
~CarlaEngineAudioPort() noexcept override
EnginePortType getType() const noexcept final
Definition CarlaEngine.hpp:458
float * getBuffer() const noexcept
Definition CarlaEngine.hpp:472
Definition CarlaEngine.hpp:489
void getRange(float &min, float &max) const noexcept
Definition CarlaEngine.hpp:527
float * getBuffer() const noexcept
Definition CarlaEngine.hpp:519
~CarlaEngineCVPort() noexcept override
void initBuffer() noexcept override
CarlaEngineCVPort(const CarlaEngineClient &client, bool isInputPort, uint32_t indexOffset) noexcept
void setRange(float min, float max) noexcept
EnginePortType getType() const noexcept final
Definition CarlaEngine.hpp:505
Definition CarlaEngine.hpp:645
virtual void initPortBuffers(const float *const *buffers, uint32_t frames, bool sampleAccurate, CarlaEngineEventPort *eventPort)
bool setCVSourceRange(uint32_t portIndexOffset, float minimum, float maximum)
virtual bool addCVSource(CarlaEngineCVPort *port, uint32_t portIndexOffset, bool reconfigureNow)
virtual bool removeCVSource(uint32_t portIndexOffset)
virtual ~CarlaEngineCVSourcePorts()
Definition CarlaEngine.hpp:702
const char * getAudioPortName(bool isInput, uint index) const noexcept
const CarlaEngine & getEngine() const noexcept
const char * getEventPortName(bool isInput, uint index) const noexcept
virtual bool isOk() const noexcept
virtual void deactivate(bool willClose) noexcept
virtual bool removePort(EnginePortType portType, const char *name, bool isInput)
virtual ~CarlaEngineClient() noexcept
virtual bool isActive() const noexcept
uint getPortCount(EnginePortType portType, bool isInput) const noexcept
virtual void setLatency(uint32_t samples) noexcept
const char * getCVPortName(bool isInput, uint index) const noexcept
virtual uint32_t getLatency() const noexcept
EngineProcessMode getProcessMode() const noexcept
virtual CarlaEngineCVSourcePorts * createCVSourcePorts()
virtual void activate() noexcept
virtual CarlaEnginePort * addPort(EnginePortType portType, const char *name, bool isInput, uint32_t indexOffset)
Definition CarlaEngine.hpp:551
CarlaEngineEventPort(const CarlaEngineClient &client, bool isInputPort, uint32_t indexOffset) noexcept
EnginePortType getType() const noexcept final
Definition CarlaEngine.hpp:567
void initBuffer() noexcept override
virtual uint32_t getEventCount() const noexcept
~CarlaEngineEventPort() noexcept override
virtual EngineEvent & getEvent(uint32_t index) const noexcept
bool writeControlEvent(uint32_t time, uint8_t channel, const EngineControlEvent &ctrl) noexcept
virtual EngineEvent & getEventUnchecked(uint32_t index) const noexcept
bool writeMidiEvent(uint32_t time, uint8_t size, const uint8_t *data) noexcept
Definition CarlaEngine.hpp:375
virtual void setMetaData(const char *key, const char *value, const char *type)
virtual EnginePortType getType() const noexcept=0
virtual ~CarlaEnginePort() noexcept
uint32_t getIndexOffset() const noexcept
Definition CarlaEngine.hpp:410
const CarlaEngineClient & getEngineClient() const noexcept
Definition CarlaEngine.hpp:418
bool isInput() const noexcept
Definition CarlaEngine.hpp:402
CarlaEnginePort(const CarlaEngineClient &client, bool isInputPort, uint32_t indexOffset) noexcept
virtual void initBuffer() noexcept=0
Definition CarlaEngine.hpp:814
virtual void touchPluginParameter(uint id, uint32_t parameterId, bool touch) noexcept
virtual bool connectExternalGraphPort(uint, uint, const char *)
static uint getDriverCount()
virtual bool patchbayDisconnect(bool external, uint connectionId)
virtual bool renamePlugin(uint id, const char *newName)
virtual bool patchbayRefresh(bool sendHost, bool sendOSC, bool external)
virtual bool usesConstantBufferSize() const noexcept
bool setAboutToClose() noexcept
bool isOscControlRegistered() const noexcept
friend class CarlaEngineRunner
Definition CarlaEngine.hpp:1314
static CarlaEngine * newDriverByName(const char *driverName)
friend class ScopedEngineEnvironmentLocker
Definition CarlaEngine.hpp:1319
virtual uint getMaxClientNameSize() const noexcept
static bool showDriverDeviceControlPanel(uint index, const char *deviceName)
virtual bool disconnectExternalGraphPort(uint, uint, const char *)
virtual const char * getCurrentDriverName() const noexcept=0
virtual bool patchbaySetGroupPos(bool sendHost, bool sendOSC, bool external, uint groupId, int x1, int y1, int x2, int y2)
friend class PatchbayGraph
Definition CarlaEngine.hpp:1321
const char * getOscServerPathUDP() const noexcept
static const EngineDriverDeviceInfo * getDriverDeviceInfo(uint index, const char *driverName)
virtual bool removePlugin(uint id)
bool loadProject(const char *filename, bool setAsCurrentProject)
const char * getLastError() const noexcept
virtual bool restorePatchbayGroupPosition(bool external, PatchbayPosition &ppos)
virtual bool setBufferSizeAndSampleRate(uint bufferSize, double sampleRate)
virtual bool init(const char *clientName)=0
friend class EngineInternalGraph
Definition CarlaEngine.hpp:1316
bool isLoadingProject() const noexcept
friend struct RackGraph
Definition CarlaEngine.hpp:1323
friend class ScopedActionLock
Definition CarlaEngine.hpp:1318
void clearCurrentProjectFilename() noexcept
const float * getPeaks(uint pluginId) const noexcept
friend struct ExternalGraph
Definition CarlaEngine.hpp:1322
friend class ScopedRunnerStopper
Definition CarlaEngine.hpp:1320
const EngineOptions & getOptions() const noexcept
const char * getOscServerPathTCP() const noexcept
double getSampleRate() const noexcept
uint getMaxPluginNumber() const noexcept
bool saveProject(const char *filename, bool setAsCurrentProject)
friend class CarlaEngineEventPort
Definition CarlaEngine.hpp:1312
friend class CarlaEngineOsc
Definition CarlaEngine.hpp:1313
const char * getCurrentProjectFilename() const noexcept
virtual const char * runFileCallback(FileCallbackOpcode action, bool isDir, const char *title, const char *filter) noexcept
virtual void transportBPM(double bpm) noexcept
CarlaPluginPtr getPluginUnchecked(uint id) const noexcept
uint getCurrentPluginCount() const noexcept
virtual void restorePatchbayConnection(bool external, const char *sourcePort, const char *targetPort)
void saveProjectInternal(water::MemoryOutputStream &outStrm) const
void setLastError(const char *error) const noexcept
void setFileCallback(FileCallbackFunc func, void *ptr) noexcept
ProtectedData *const pData
Definition CarlaEngine.hpp:1307
void sampleRateChanged(double newSampleRate)
bool isAboutToClose() const noexcept
void setActionCanceled(bool canceled) noexcept
friend class PendingRtEventsRunner
Definition CarlaEngine.hpp:1317
void offlineModeChanged(bool isOffline)
virtual bool switchPlugins(uint idA, uint idB) noexcept
virtual bool close()
bool loadFile(const char *filename)
friend class CarlaPluginInstance
Definition CarlaEngine.hpp:1315
bool addPlugin(BinaryType btype, PluginType ptype, const char *filename, const char *name, const char *label, int64_t uniqueId, const void *extra, uint options=PLUGIN_OPTIONS_NULL)
virtual uint32_t getTotalXruns() const noexcept
static const char *const * getDriverDeviceNames(uint index)
virtual void transportPlay() noexcept
virtual void clearXruns() const noexcept
virtual const char *const * getPatchbayConnections(bool external) const
virtual EngineType getType() const noexcept=0
EngineEvent * getInternalEventBuffer(bool isInput) const noexcept
virtual const PatchbayPosition * getPatchbayPositions(bool external, uint &count) const
virtual void callback(bool sendHost, bool sendOSC, EngineCallbackOpcode action, uint pluginId, int value1, int value2, int value3, float valuef, const char *valueStr) noexcept
void setPluginPeaksRT(uint pluginId, float const inPeaks[2], float const outPeaks[2]) noexcept
virtual bool isRunning() const noexcept=0
virtual void transportPause() noexcept
virtual bool isOffline() const noexcept=0
virtual bool showDeviceControlPanel() const noexcept
const char * getUniquePluginName(const char *name) const
CarlaPluginPtr getPlugin(uint id) const noexcept
virtual bool patchbayConnect(bool external, uint groupA, uint portA, uint groupB, uint portB)
bool removeAllPlugins()
float getInputPeak(uint pluginId, bool isLeft) const noexcept
virtual void setOption(EngineOption option, int value, const char *valueStr) noexcept
EngineProcessMode getProccessMode() const noexcept
static const char * getDriverName(uint index)
float getOutputPeak(uint pluginId, bool isLeft) const noexcept
virtual float getDSPLoad() const noexcept
const char * getName() const noexcept
virtual void transportRelocate(uint64_t frame) noexcept
virtual const char * getCurrentProjectFolder() const noexcept
virtual CarlaEngineClient * addClient(CarlaPluginPtr plugin)
bool wasActionCanceled() const noexcept
virtual void idle() noexcept
bool replacePlugin(uint id) noexcept
virtual uint getMaxPortNameSize() const noexcept
bool loadProjectInternal(water::XmlDocument &xmlDoc, bool alwaysLoadConnections)
void setCallback(EngineCallbackFunc func, void *ptr) noexcept
bool clonePlugin(uint id)
virtual EngineTimeInfo getTimeInfo() const noexcept
uint32_t getBufferSize() const noexcept
virtual ~CarlaEngine()
void bufferSizeChanged(uint32_t newBufferSize)
FileCallbackOpcode
Definition CarlaBackend.h:1624
void(* EngineCallbackFunc)(void *ptr, EngineCallbackOpcode action, uint pluginId, int value1, int value2, int value3, float valuef, const char *valueStr)
Definition CarlaBackend.h:1695
const char *(* FileCallbackFunc)(void *ptr, FileCallbackOpcode action, bool isDir, const char *title, const char *filter)
Definition CarlaBackend.h:1703
PluginType
Definition CarlaBackend.h:608
BinaryType
Definition CarlaBackend.h:544
EngineOption
Definition CarlaBackend.h:1318
EngineTransportMode
Definition CarlaBackend.h:1587
EngineProcessMode
Definition CarlaBackend.h:1549
EngineCallbackOpcode
Definition CarlaBackend.h:874
EngineControlEventType
Definition CarlaEngine.hpp:139
static const uint8_t kEngineEventNonMidiChannel
Definition CarlaEngine.hpp:175
EngineEventType
Definition CarlaEngine.hpp:117
EnginePortType
Definition CarlaEngine.hpp:89
EngineType
Definition CarlaEngine.hpp:43
@ kEngineControlEventTypeNull
Definition CarlaEngine.hpp:143
@ kEngineControlEventTypeParameter
Definition CarlaEngine.hpp:149
@ kEngineControlEventTypeMidiBank
Definition CarlaEngine.hpp:154
@ kEngineControlEventTypeAllSoundOff
Definition CarlaEngine.hpp:164
@ kEngineControlEventTypeMidiProgram
Definition CarlaEngine.hpp:159
@ kEngineControlEventTypeAllNotesOff
Definition CarlaEngine.hpp:169
@ kEngineEventTypeMidi
Definition CarlaEngine.hpp:133
@ kEngineEventTypeControl
Definition CarlaEngine.hpp:127
@ kEngineEventTypeNull
Definition CarlaEngine.hpp:121
@ kEnginePortTypeNull
Definition CarlaEngine.hpp:93
@ kEnginePortTypeAudio
Definition CarlaEngine.hpp:99
@ kEnginePortTypeEvent
Definition CarlaEngine.hpp:111
@ kEnginePortTypeCV
Definition CarlaEngine.hpp:105
@ kEngineTypeJuce
Definition CarlaEngine.hpp:58
@ kEngineTypeNull
Definition CarlaEngine.hpp:47
@ kEngineTypeRtAudio
Definition CarlaEngine.hpp:63
@ kEngineTypeSDL
Definition CarlaEngine.hpp:68
@ kEngineTypeDummy
Definition CarlaEngine.hpp:83
@ kEngineTypePlugin
Definition CarlaEngine.hpp:73
@ kEngineTypeJack
Definition CarlaEngine.hpp:53
@ kEngineTypeBridge
Definition CarlaEngine.hpp:78
static const uint PLUGIN_OPTIONS_NULL
Definition CarlaBackend.h:283
Definition CarlaEngine.hpp:24
Definition CarlaEngine.hpp:1379
int x2
Definition CarlaEngine.hpp:1379
const char * name
Definition CarlaEngine.hpp:1379
bool dealloc
Definition CarlaEngine.hpp:1379
int y2
Definition CarlaEngine.hpp:1379
int x1
Definition CarlaEngine.hpp:1379
int y1
Definition CarlaEngine.hpp:1379
int pluginId
Definition CarlaEngine.hpp:1379
Definition CarlaEngine.hpp:182
uint8_t convertToMidiData(uint8_t channel, uint8_t data[3]) const noexcept
bool handled
Indicates that event was handled/received at least once.
Definition CarlaEngine.hpp:187
EngineControlEventType type
Control-Event type.
Definition CarlaEngine.hpp:183
float normalizedValue
Parameter value, normalized to 0.0f<->1.0f.
Definition CarlaEngine.hpp:186
uint16_t param
Parameter Id, midi bank or midi program.
Definition CarlaEngine.hpp:184
int8_t midiValue
Raw midi value, >= 0 if applicable, -1 otherwise.
Definition CarlaEngine.hpp:185
Definition CarlaBackend.h:1954
Definition CarlaEngine.hpp:216
void fillFromMidiData(uint8_t size, const uint8_t *data, uint8_t midiPortOffset) noexcept
EngineControlEvent ctrl
Definition CarlaEngine.hpp:225
uint8_t channel
Channel, used for MIDI-related events.
Definition CarlaEngine.hpp:219
EngineEventType type
Event Type; either Control or MIDI.
Definition CarlaEngine.hpp:217
uint32_t time
Time offset in frames.
Definition CarlaEngine.hpp:218
EngineMidiEvent midi
Definition CarlaEngine.hpp:226
Definition CarlaEngine.hpp:199
uint8_t data[kDataSize]
Definition CarlaEngine.hpp:209
uint8_t port
Port offset (usually 0)
Definition CarlaEngine.hpp:202
uint8_t size
Number of bytes used.
Definition CarlaEngine.hpp:203
const uint8_t * dataExt
Definition CarlaEngine.hpp:210
static const uint8_t kDataSize
Size of internal data.
Definition CarlaEngine.hpp:200
bool autoPrefix
Definition CarlaEngine.hpp:292
bool rtPrio
Definition CarlaEngine.hpp:295
int baseRtPrio
Definition CarlaEngine.hpp:296
const char * executable
Definition CarlaEngine.hpp:290
int serverRtPrio
Definition CarlaEngine.hpp:297
const char * fallbackPrefix
Definition CarlaEngine.hpp:293
Definition CarlaEngine.hpp:240
struct EngineOptions::Wine wine
uint bgColor
Definition CarlaEngine.hpp:251
const char * clientNamePrefix
Definition CarlaEngine.hpp:283
bool resetXruns
Definition CarlaEngine.hpp:246
uint audioSampleRate
Definition CarlaEngine.hpp:258
const char * pathVST3
Definition CarlaEngine.hpp:276
bool preventBadBehaviour
Definition CarlaEngine.hpp:285
int oscPortTCP
Definition CarlaEngine.hpp:265
const char * resourceDir
Definition CarlaEngine.hpp:282
EngineTransportMode transportMode
Definition CarlaEngine.hpp:242
bool pluginsAreStandalone
Definition CarlaEngine.hpp:250
const char * pathJSFX
Definition CarlaEngine.hpp:279
const char * pathSFZ
Definition CarlaEngine.hpp:278
bool oscEnabled
Definition CarlaEngine.hpp:264
const char * binaryDir
Definition CarlaEngine.hpp:281
uint fgColor
Definition CarlaEngine.hpp:252
const char * pathLADSPA
Definition CarlaEngine.hpp:272
const char * pathAudio
Definition CarlaEngine.hpp:269
uintptr_t frontendWinId
Definition CarlaEngine.hpp:286
const char * pathMIDI
Definition CarlaEngine.hpp:270
bool preferPluginBridges
Definition CarlaEngine.hpp:247
bool uisAlwaysOnTop
Definition CarlaEngine.hpp:249
const char * pathVST2
Definition CarlaEngine.hpp:275
const char * pathLV2
Definition CarlaEngine.hpp:274
EngineProcessMode processMode
Definition CarlaEngine.hpp:241
const char * audioDevice
Definition CarlaEngine.hpp:261
const char * transportExtra
Definition CarlaEngine.hpp:243
int oscPortUDP
Definition CarlaEngine.hpp:266
uint uiBridgesTimeout
Definition CarlaEngine.hpp:256
uint maxParameters
Definition CarlaEngine.hpp:255
uint audioBufferSize
Definition CarlaEngine.hpp:257
bool forceStereo
Definition CarlaEngine.hpp:245
const char * pathSF2
Definition CarlaEngine.hpp:277
bool preferUiBridges
Definition CarlaEngine.hpp:248
float uiScale
Definition CarlaEngine.hpp:253
bool audioTripleBuffer
Definition CarlaEngine.hpp:259
const char * pathDSSI
Definition CarlaEngine.hpp:273
const char * audioDriver
Definition CarlaEngine.hpp:260
Definition CarlaEngine.hpp:315
bool valid
Definition CarlaEngine.hpp:316
double ticksPerBeat
Definition CarlaEngine.hpp:326
float beatsPerBar
time signature "numerator"
Definition CarlaEngine.hpp:323
double barStartTick
Definition CarlaEngine.hpp:321
void clear() noexcept
double beatsPerMinute
Definition CarlaEngine.hpp:327
int32_t bar
current bar
Definition CarlaEngine.hpp:318
int32_t beat
current beat-within-bar
Definition CarlaEngine.hpp:319
double tick
current tick-within-beat
Definition CarlaEngine.hpp:320
float beatType
time signature "denominator"
Definition CarlaEngine.hpp:324
Definition CarlaEngine.hpp:343
void clear() noexcept
uint64_t usecs
Definition CarlaEngine.hpp:346
bool playing
Definition CarlaEngine.hpp:344
uint64_t frame
Definition CarlaEngine.hpp:345
EngineTimeInfoBBT bbt
Definition CarlaEngine.hpp:347