Carla Backend
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
48
54
59
64
69
74
79
84};
85
94
100
106
113
122
128
135
144
150
155
160
165
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)
302 } 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
770 EngineProcessMode getProcessMode() const noexcept;
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
940 virtual CarlaEngineClient* addClient(CarlaPluginPtr plugin);
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
985 bool addPlugin(PluginType ptype,
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
998 bool removeAllPlugins();
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
1089 void clearCurrentProjectFilename() noexcept;
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
1113 EngineProcessMode getProccessMode() const noexcept;
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;
1315 friend class CarlaPluginInstance;
1316 friend class EngineInternalGraph;
1317 friend class PendingRtEventsRunner;
1318 friend class ScopedActionLock;
1319 friend class ScopedEngineEnvironmentLocker;
1320 friend class ScopedRunnerStopper;
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
1342 void offlineModeChanged(bool isOffline);
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
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
Definition: CarlaEngine.hpp:489
void getRange(float &min, float &max) const noexcept
Definition: CarlaEngine.hpp:527
~CarlaEngineCVPort() noexcept override
void initBuffer() noexcept override
CarlaEngineCVPort(const CarlaEngineClient &client, bool isInputPort, uint32_t indexOffset) noexcept
void setRange(float min, float max) noexcept
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 CarlaEngine & getEngine() const noexcept
virtual ~CarlaEngineClient() noexcept
virtual CarlaEngineCVSourcePorts * createCVSourcePorts()
Definition: CarlaEngine.hpp:551
CarlaEngineEventPort(const CarlaEngineClient &client, bool isInputPort, uint32_t indexOffset) noexcept
void initBuffer() noexcept override
~CarlaEngineEventPort() noexcept override
Definition: CarlaEngine.hpp:375
virtual void setMetaData(const char *key, const char *value, const char *type)
virtual ~CarlaEnginePort() noexcept
uint32_t getIndexOffset() const noexcept
Definition: CarlaEngine.hpp:410
const CarlaEngineClient & getEngineClient() const noexcept
Definition: CarlaEngine.hpp:418
CarlaEnginePort(const CarlaEngineClient &client, bool isInputPort, uint32_t indexOffset) noexcept
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)
bool isOscControlRegistered() const noexcept
static CarlaEngine * newDriverByName(const char *driverName)
virtual uint getMaxClientNameSize() const noexcept
static bool showDriverDeviceControlPanel(uint index, const char *deviceName)
virtual bool disconnectExternalGraphPort(uint, uint, const char *)
virtual bool patchbaySetGroupPos(bool sendHost, bool sendOSC, bool external, uint groupId, int x1, int y1, int x2, int y2)
static const EngineDriverDeviceInfo * getDriverDeviceInfo(uint index, const char *driverName)
bool loadProject(const char *filename, bool setAsCurrentProject)
virtual bool restorePatchbayGroupPosition(bool external, PatchbayPosition &ppos)
bool isLoadingProject() const noexcept
bool saveProject(const char *filename, bool setAsCurrentProject)
CarlaPluginPtr getPluginUnchecked(uint id) const noexcept
virtual void restorePatchbayConnection(bool external, const char *sourcePort, const char *targetPort)
void saveProjectInternal(water::MemoryOutputStream &outStrm) const
ProtectedData *const pData
Definition: CarlaEngine.hpp:1306
void sampleRateChanged(double newSampleRate)
void setActionCanceled(bool canceled) noexcept
void offlineModeChanged(bool isOffline)
virtual bool switchPlugins(uint idA, uint idB) noexcept
bool loadFile(const char *filename)
static const char *const * getDriverDeviceNames(uint index)
virtual void transportPlay() noexcept
virtual const char *const * getPatchbayConnections(bool external) const
EngineEvent * getInternalEventBuffer(bool isInput) const noexcept
virtual const PatchbayPosition * getPatchbayPositions(bool external, uint &count) const
void setPluginPeaksRT(uint pluginId, float const inPeaks[2], float const outPeaks[2]) 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)
static const char * getDriverName(uint index)
virtual const char * getCurrentProjectFolder() const noexcept
bool wasActionCanceled() const noexcept
bool replacePlugin(uint id) noexcept
bool loadProjectInternal(water::XmlDocument &xmlDoc, bool alwaysLoadConnections)
bool clonePlugin(uint id)
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
bool dealloc
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 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
Definition: CarlaEngine.hpp:289
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
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