Go to the documentation of this file.
18 #ifndef CARLA_ENGINE_HPP_INCLUDED
19 #define CARLA_ENGINE_HPP_INCLUDED
25 class MemoryOutputStream;
29 CARLA_BACKEND_START_NAMESPACE
188 uint8_t convertToMidiData(uint8_t channel, uint8_t data[3])
const noexcept;
195 static const uint8_t kDataSize = 4;
204 uint8_t data[kDataSize];
227 void fillFromMidiData(uint8_t size,
const uint8_t* data, uint8_t midiPortOffset) noexcept;
294 CARLA_DECLARE_NON_COPY_STRUCT(
Wine)
325 void clear() noexcept;
345 void clear() noexcept;
353 bool compareIgnoringRollingFrames(const
EngineTimeInfo& timeInfo, uint32_t maxFrames) const noexcept;
390 virtual void initBuffer() noexcept = 0;
419 virtual void setMetaData(
const char* key,
const char* value,
const char* type);
425 const uint32_t kIndexOffset;
465 inline
float* getBuffer() const noexcept
512 inline
float* getBuffer() const noexcept
520 inline void getRange(
float& min,
float& max)
const noexcept
529 void setRange(
float min,
float max) noexcept;
534 float fMinimum, fMaximum;
574 virtual uint32_t getEventCount() const noexcept;
580 virtual
EngineEvent& getEvent(uint32_t index) const noexcept;
585 virtual
EngineEvent& getEventUnchecked(uint32_t index) const noexcept;
591 bool writeControlEvent(uint32_t time, uint8_t channel, const
EngineControlEvent& ctrl) noexcept;
599 uint16_t param, int8_t midiValue,
float normalizedValue) noexcept;
605 bool writeMidiEvent(uint32_t time, uint8_t size, const uint8_t* data) noexcept;
611 bool writeMidiEvent(uint32_t time, uint8_t channel, const
EngineMidiEvent& midi) noexcept;
618 virtual
bool writeMidiEvent(uint32_t time, uint8_t channel, uint8_t size, const uint8_t* data) noexcept;
624 friend class CarlaPluginInstance;
648 virtual bool addCVSource(
CarlaEngineCVPort* port, uint32_t portIndexOffset,
bool reconfigureNow);
653 virtual bool removeCVSource(uint32_t portIndexOffset);
659 virtual void initPortBuffers(
const float*
const* buffers, uint32_t frames,
665 bool setCVSourceRange(uint32_t portIndexOffset,
float minimum,
float maximum);
675 struct ProtectedData;
676 ProtectedData*
const pData;
706 virtual void activate() noexcept;
712 virtual void deactivate(
bool willClose) noexcept;
717 virtual bool isActive()
const noexcept;
724 virtual bool isOk()
const noexcept;
729 virtual uint32_t getLatency()
const noexcept;
734 virtual void setLatency(uint32_t samples) noexcept;
745 virtual bool removePort(
EnginePortType portType,
const char* name,
bool isInput);
747 #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
768 uint getPortCount(
EnginePortType portType,
bool isInput)
const noexcept;
773 const char* getAudioPortName(
bool isInput, uint index)
const noexcept;
778 const char* getCVPortName(
bool isInput, uint index)
const noexcept;
783 const char* getEventPortName(
bool isInput, uint index)
const noexcept;
788 struct ProtectedData;
789 ProtectedData*
const pData;
828 static uint getDriverCount();
833 static const char* getDriverName(uint index);
838 static const char*
const* getDriverDeviceNames(uint index);
849 static bool showDriverDeviceControlPanel(uint index,
const char* deviceName);
856 static CarlaEngine* newDriverByName(
const char* driverName);
864 virtual uint getMaxClientNameSize()
const noexcept;
869 virtual uint getMaxPortNameSize()
const noexcept;
874 uint getCurrentPluginCount()
const noexcept;
880 uint getMaxPluginNumber()
const noexcept;
889 virtual bool init(
const char* clientName) = 0;
896 virtual bool close();
901 virtual void idle() noexcept;
906 virtual bool isRunning()
const noexcept = 0;
911 virtual bool isOffline()
const noexcept = 0;
917 virtual bool usesConstantBufferSize()
const noexcept;
922 virtual EngineType getType()
const noexcept = 0;
927 virtual const char* getCurrentDriverName()
const noexcept = 0;
938 virtual float getDSPLoad()
const noexcept;
943 virtual uint32_t getTotalXruns()
const noexcept;
948 virtual void clearXruns()
const noexcept;
955 virtual bool setBufferSizeAndSampleRate(uint bufferSize,
double sampleRate);
961 virtual bool showDeviceControlPanel()
const noexcept;
971 const char* filename,
const char* name,
const char* label, int64_t uniqueId,
979 const char* filename,
const char* name,
const char* label, int64_t uniqueId,
986 virtual bool removePlugin(uint
id);
991 bool removeAllPlugins();
993 #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
1000 virtual bool renamePlugin(uint
id,
const char* newName);
1005 bool clonePlugin(uint
id);
1012 bool replacePlugin(uint
id) noexcept;
1017 virtual bool switchPlugins(uint idA, uint idB) noexcept;
1027 virtual void touchPluginParameter(uint
id, uint32_t parameterId,
bool touch) noexcept;
1043 const char* getUniquePluginName(
const char* name)
const;
1053 bool loadFile(
const char* filename);
1059 bool loadProject(
const char* filename,
bool setAsCurrentProject);
1064 bool saveProject(
const char* filename,
bool setAsCurrentProject);
1066 #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
1071 virtual const char* getCurrentProjectFolder()
const noexcept;
1077 const char* getCurrentProjectFilename()
const noexcept;
1082 void clearCurrentProjectFilename() noexcept;
1091 uint32_t getBufferSize()
const noexcept;
1096 double getSampleRate()
const noexcept;
1101 const char* getName()
const noexcept;
1125 const float* getPeaks(uint pluginId)
const noexcept;
1130 float getInputPeak(uint pluginId,
bool isLeft)
const noexcept;
1135 float getOutputPeak(uint pluginId,
bool isLeft)
const noexcept;
1144 virtual void callback(
bool sendHost,
bool sendOSC,
1146 int value1,
int value2,
int value3,
float valuef,
const char* valueStr) noexcept;
1161 bool isDir,
const char* title,
const char* filter) noexcept;
1168 #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
1175 virtual bool patchbayConnect(
bool external,
1176 uint groupA, uint portA,
1177 uint groupB, uint portB);
1182 virtual bool patchbayDisconnect(
bool external, uint connectionId);
1187 virtual bool patchbaySetGroupPos(
bool sendHost,
bool sendOSC,
bool external,
1188 uint groupId,
int x1,
int y1,
int x2,
int y2);
1193 virtual bool patchbayRefresh(
bool sendHost,
bool sendOSC,
bool external);
1202 virtual void transportPlay() noexcept;
1207 virtual void transportPause() noexcept;
1212 virtual void transportBPM(
double bpm) noexcept;
1217 virtual void transportRelocate(uint64_t frame) noexcept;
1225 const char* getLastError()
const noexcept;
1230 void setLastError(
const char* error)
const noexcept;
1238 bool isAboutToClose()
const noexcept;
1245 bool setAboutToClose() noexcept;
1247 #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
1251 bool isLoadingProject()
const noexcept;
1258 void setActionCanceled(
bool canceled) noexcept;
1263 bool wasActionCanceled()
const noexcept;
1271 virtual void setOption(
EngineOption option,
int value,
const char* valueStr) noexcept;
1276 #ifndef BUILD_BRIDGE
1280 bool isOscControlRegistered()
const noexcept;
1285 const char* getOscServerPathTCP()
const noexcept;
1290 const char* getOscServerPathUDP()
const noexcept;
1299 struct ProtectedData;
1300 ProtectedData*
const pData;
1306 friend class CarlaEngineOsc;
1307 friend class CarlaEngineThread;
1308 friend class CarlaPluginInstance;
1309 friend class EngineInternalGraph;
1310 friend class PendingRtEventsRunner;
1311 friend class ScopedActionLock;
1312 friend class ScopedEngineEnvironmentLocker;
1313 friend class ScopedThreadStopper;
1314 friend class PatchbayGraph;
1315 friend struct ExternalGraph;
1316 friend struct RackGraph;
1324 void bufferSizeChanged(uint32_t newBufferSize);
1330 void sampleRateChanged(
double newSampleRate);
1335 void offlineModeChanged(
bool isOffline);
1341 void setPluginPeaksRT(uint pluginId,
float const inPeaks[2],
float const outPeaks[2]) noexcept;
1346 void saveProjectInternal(water::MemoryOutputStream& outStrm)
const;
1351 bool loadProjectInternal(water::XmlDocument& xmlDoc,
bool alwaysLoadConnections);
1360 EngineEvent* getInternalEventBuffer(
bool isInput)
const noexcept;
1362 #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
1371 virtual const char*
const* getPatchbayConnections(
bool external)
const;
1372 virtual const PatchbayPosition* getPatchbayPositions(
bool external, uint& count)
const;
1373 virtual void restorePatchbayConnection(
bool external,
const char* sourcePort,
const char* targetPort);
1375 virtual bool restorePatchbayGroupPosition(
bool external,
PatchbayPosition& ppos);
1380 virtual bool connectExternalGraphPort(uint, uint,
const char*);
1381 virtual bool disconnectExternalGraphPort(uint, uint,
const char*);
1393 CARLA_BACKEND_END_NAMESPACE
1395 #endif // CARLA_ENGINE_HPP_INCLUDED
Definition: CarlaEngine.hpp:194
@ kEngineTypePlugin
Definition: CarlaEngine.hpp:68
@ kEnginePortTypeNull
Definition: CarlaEngine.hpp:88
uint bgColor
Definition: CarlaEngine.hpp:245
Definition: CarlaEngine.hpp:235
float beatType
time signature "denominator"
Definition: CarlaEngine.hpp:317
Definition: CarlaEngine.hpp:694
EnginePortType getType() const noexcept final
Definition: CarlaEngine.hpp:451
const char * binaryDir
Definition: CarlaEngine.hpp:274
EngineTimeInfoBBT bbt
Definition: CarlaEngine.hpp:340
const char * pathMIDI
Definition: CarlaEngine.hpp:264
EngineProcessMode
Definition: CarlaBackend.h:1499
uint32_t time
Time offset in frames.
Definition: CarlaEngine.hpp:213
const char * pathSF2
Definition: CarlaEngine.hpp:271
@ kEnginePortTypeAudio
Definition: CarlaEngine.hpp:94
uint uiBridgesTimeout
Definition: CarlaEngine.hpp:250
FileCallbackOpcode
Definition: CarlaBackend.h:1574
double barStartTick
Definition: CarlaEngine.hpp:314
const char * pathLADSPA
Definition: CarlaEngine.hpp:266
float uiScale
Definition: CarlaEngine.hpp:247
EngineEventType type
Event Type; either Control or MIDI.
Definition: CarlaEngine.hpp:212
uint32_t getIndexOffset() const noexcept
Definition: CarlaEngine.hpp:403
const char * resourceDir
Definition: CarlaEngine.hpp:275
EngineMidiEvent midi
Definition: CarlaEngine.hpp:221
const char * pathSFZ
Definition: CarlaEngine.hpp:272
int y2
Definition: CarlaEngine.hpp:1370
uint8_t port
Port offset (usually 0)
Definition: CarlaEngine.hpp:197
uint8_t size
Number of bytes used.
Definition: CarlaEngine.hpp:198
const CarlaEngineClient & getEngineClient() const noexcept
Definition: CarlaEngine.hpp:411
@ kEngineControlEventTypeParameter
Definition: CarlaEngine.hpp:144
bool isInput() const noexcept
Definition: CarlaEngine.hpp:395
Definition: CarlaEngine.hpp:806
EngineCallbackOpcode
Definition: CarlaBackend.h:834
int32_t beat
current beat-within-bar
Definition: CarlaEngine.hpp:312
@ kEngineTypeRtAudio
Definition: CarlaEngine.hpp:63
EnginePortType
Definition: CarlaEngine.hpp:84
EnginePortType getType() const noexcept final
Definition: CarlaEngine.hpp:498
EngineType
Definition: CarlaEngine.hpp:43
const char * pathLV2
Definition: CarlaEngine.hpp:268
Definition: CarlaEngine.hpp:24
@ kEngineTypeJack
Definition: CarlaEngine.hpp:53
@ kEngineTypeJuce
Definition: CarlaEngine.hpp:58
bool preferPluginBridges
Definition: CarlaEngine.hpp:242
const char * clientNamePrefix
Definition: CarlaEngine.hpp:276
Definition: CarlaBackend.h:1904
int oscPortTCP
Definition: CarlaEngine.hpp:259
int oscPortUDP
Definition: CarlaEngine.hpp:260
bool autoPrefix
Definition: CarlaEngine.hpp:285
EngineEventType
Definition: CarlaEngine.hpp:112
bool playing
Definition: CarlaEngine.hpp:337
bool forceStereo
Definition: CarlaEngine.hpp:240
@ kEngineControlEventTypeMidiProgram
Definition: CarlaEngine.hpp:154
Definition: CarlaEngine.hpp:481
ProtectedData *const pData
Definition: CarlaEngine.hpp:1299
uint audioBufferSize
Definition: CarlaEngine.hpp:251
double ticksPerBeat
Definition: CarlaEngine.hpp:319
@ kEngineTypeBridge
Definition: CarlaEngine.hpp:73
Definition: CarlaEngine.hpp:282
EngineProcessMode processMode
Definition: CarlaEngine.hpp:236
Definition: CarlaEngine.hpp:637
bool preferUiBridges
Definition: CarlaEngine.hpp:243
const char * pathVST2
Definition: CarlaEngine.hpp:269
int serverRtPrio
Definition: CarlaEngine.hpp:290
Definition: CarlaEngine.hpp:177
bool resetXruns
Definition: CarlaEngine.hpp:241
const typedef char *(* FileCallbackFunc)(void *ptr, FileCallbackOpcode action, bool isDir, const char *title, const char *filter)
Definition: CarlaBackend.h:1653
@ kEngineEventTypeControl
Definition: CarlaEngine.hpp:122
uint fgColor
Definition: CarlaEngine.hpp:246
static const uint PLUGIN_OPTIONS_NULL
Definition: CarlaBackend.h:274
Definition: CarlaEngine.hpp:434
bool oscEnabled
Definition: CarlaEngine.hpp:258
@ kEngineTypeDummy
Definition: CarlaEngine.hpp:78
const char * pathDSSI
Definition: CarlaEngine.hpp:267
double beatsPerMinute
Definition: CarlaEngine.hpp:320
EnginePortType getType() const noexcept final
Definition: CarlaEngine.hpp:560
@ kEngineEventTypeMidi
Definition: CarlaEngine.hpp:128
uint64_t frame
Definition: CarlaEngine.hpp:338
EngineTransportMode transportMode
Definition: CarlaEngine.hpp:237
float beatsPerBar
time signature "numerator"
Definition: CarlaEngine.hpp:316
const char * executable
Definition: CarlaEngine.hpp:283
@ kEngineControlEventTypeMidiBank
Definition: CarlaEngine.hpp:149
@ kEnginePortTypeEvent
Definition: CarlaEngine.hpp:106
const char * fallbackPrefix
Definition: CarlaEngine.hpp:286
Definition: CarlaEngine.hpp:543
bool rtPrio
Definition: CarlaEngine.hpp:288
@ kEnginePortTypeCV
Definition: CarlaEngine.hpp:100
EngineControlEventType type
Control-Event type.
Definition: CarlaEngine.hpp:178
EngineControlEvent ctrl
Definition: CarlaEngine.hpp:220
EngineTransportMode
Definition: CarlaBackend.h:1537
Definition: CarlaEngine.hpp:367
int8_t midiValue
Raw midi value, >= 0 if applicable, -1 otherwise.
Definition: CarlaEngine.hpp:180
int32_t bar
current bar
Definition: CarlaEngine.hpp:311
uint maxParameters
Definition: CarlaEngine.hpp:249
@ kEngineControlEventTypeNull
Definition: CarlaEngine.hpp:138
Definition: CarlaEngine.hpp:1370
const char * transportExtra
Definition: CarlaEngine.hpp:238
bool valid
Definition: CarlaEngine.hpp:309
bool audioTripleBuffer
Definition: CarlaEngine.hpp:253
double tick
current tick-within-beat
Definition: CarlaEngine.hpp:313
bool uisAlwaysOnTop
Definition: CarlaEngine.hpp:244
int baseRtPrio
Definition: CarlaEngine.hpp:289
CARLA_BACKEND_START_NAMESPACE typedef std::shared_ptr< CarlaPlugin > CarlaPluginPtr
Definition: CarlaPluginPtr.hpp:267
const char * audioDevice
Definition: CarlaEngine.hpp:255
uintptr_t frontendWinId
Definition: CarlaEngine.hpp:279
const char * audioDriver
Definition: CarlaEngine.hpp:254
const uint8_t * dataExt
Definition: CarlaEngine.hpp:205
Definition: CarlaEngine.hpp:336
BinaryType
Definition: CarlaBackend.h:509
@ kEngineEventTypeNull
Definition: CarlaEngine.hpp:116
uint64_t usecs
Definition: CarlaEngine.hpp:339
uint16_t param
Parameter Id, midi bank or midi program.
Definition: CarlaEngine.hpp:179
const char * pathAudio
Definition: CarlaEngine.hpp:263
EngineOption
Definition: CarlaBackend.h:1277
virtual void initBuffer() noexcept=0
@ kEngineControlEventTypeAllNotesOff
Definition: CarlaEngine.hpp:164
void getRange(float &min, float &max) const noexcept
Definition: CarlaEngine.hpp:520
@ kEngineControlEventTypeAllSoundOff
Definition: CarlaEngine.hpp:159
uint audioSampleRate
Definition: CarlaEngine.hpp:252
static const uint8_t kEngineEventNonMidiChannel
Definition: CarlaEngine.hpp:170
bool preventBadBehaviour
Definition: CarlaEngine.hpp:278
const char * pathVST3
Definition: CarlaEngine.hpp:270
PluginType
Definition: CarlaBackend.h:573
bool handled
Indicates that event was handled/received at least once.
Definition: CarlaEngine.hpp:182
float normalizedValue
Parameter value, normalized to 0.0f<->1.0f.
Definition: CarlaEngine.hpp:181
Definition: CarlaEngine.hpp:211
void(* EngineCallbackFunc)(void *ptr, EngineCallbackOpcode action, uint pluginId, int value1, int value2, int value3, float valuef, const char *valueStr)
Definition: CarlaBackend.h:1645
uint8_t channel
Channel, used for MIDI-related events.
Definition: CarlaEngine.hpp:214
Definition: CarlaEngine.hpp:308
@ kEngineTypeNull
Definition: CarlaEngine.hpp:47
EngineControlEventType
Definition: CarlaEngine.hpp:134