Zrythm
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
carla_native_plugin.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2019-2023 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
10#include "zrythm-config.h"
11
12#ifndef __PLUGINS_CARLA_NATIVE_PLUGIN_H__
13# define __PLUGINS_CARLA_NATIVE_PLUGIN_H__
14
15# ifdef HAVE_CARLA
16# include <CarlaNativePlugin.h>
17# include <CarlaUtils.h>
18# endif
19
21typedef void * CarlaPluginHandle;
22
29# define CARLA_STATE_FILENAME "state.carla"
30
34typedef enum CarlaPluginType
35{
36 CARLA_PLUGIN_NONE,
37 CARLA_PLUGIN_RACK,
38 CARLA_PLUGIN_PATCHBAY,
39 CARLA_PLUGIN_PATCHBAY16,
40 CARLA_PLUGIN_PATCHBAY32,
41 CARLA_PLUGIN_PATCHBAY64,
43
45{
46 unsigned int plugin_id;
47 unsigned int port_hints;
48 unsigned int port_id;
49 char * port_name;
51
52typedef struct CarlaNativePlugin
53{
54# ifdef HAVE_CARLA
55 NativePluginHandle native_plugin_handle;
56 NativeHostDescriptor native_host_descriptor;
57 const NativePluginDescriptor * native_plugin_descriptor;
58
59 CarlaHostHandle host_handle;
60
61 // uint32_t num_midi_events;
62 // NativeMidiEvent midi_events[200];
63 NativeTimeInfo time_info;
64# endif
65
68
70 unsigned int carla_plugin_id;
71
74
77
80 unsigned int audio_input_port_id;
84
87 unsigned int cv_input_port_id;
90 unsigned int cv_output_port_id;
91
94 unsigned int midi_input_port_id;
97 unsigned int midi_output_port_id;
98
102
104 guint tick_cb;
105
111 float ** zero_inbufs;
112 float ** zero_outbufs;
113 float ** inbufs;
114 float ** outbufs;
115
116 unsigned int max_variant_audio_ins;
117 unsigned int max_variant_audio_outs;
118 unsigned int max_variant_cv_ins;
119 unsigned int max_variant_cv_outs;
120 unsigned int max_variant_midi_ins;
121 unsigned int max_variant_midi_outs;
122
124
125# ifdef HAVE_CARLA
126
127NONNULL void
128carla_native_plugin_init_loaded (CarlaNativePlugin * self);
129
139NONNULL_ARGS (1)
140int carla_native_plugin_new_from_setting (Plugin * plugin, GError ** error);
141
146NONNULL PluginDescriptor *
147carla_native_plugin_get_descriptor_from_cached (
148 const CarlaCachedPluginInfo * info,
149 PluginType type);
150
162WARN_UNUSED_RESULT bool
163carla_native_plugin_save_state (
164 CarlaNativePlugin * self,
165 bool is_backup,
166 const char * abs_state_dir,
167 GError ** error);
168
175bool
176carla_native_plugin_load_state (
177 CarlaNativePlugin * self,
178 const char * abs_path,
179 GError ** error);
180
181NONNULL void
182carla_native_plugin_populate_banks (CarlaNativePlugin * self);
183
184NONNULL void
185carla_native_plugin_update_buffer_size_and_sample_rate (
186 CarlaNativePlugin * self);
187
198NONNULL_ARGS (1)
199int carla_native_plugin_instantiate (
200 CarlaNativePlugin * self,
201 bool loading,
202 bool use_state_file,
203 GError ** error);
204
205# if 0
206NONNULL
207MALLOC
208char *
209carla_native_plugin_get_abs_state_file_path (
210 const CarlaNativePlugin * self,
211 const bool is_backup);
212# endif
213
217HOT NONNULL OPTIMIZE_O3 void
218carla_native_plugin_process (
219 CarlaNativePlugin * self,
220 const EngineProcessTimeInfo * const time_nfo);
221
225NONNULL void
226carla_native_plugin_open_ui (CarlaNativePlugin * self, bool show);
227
232NONNULL Port *
233carla_native_plugin_get_port_from_param_id (
234 CarlaNativePlugin * self,
235 const uint32_t id);
236
240NONNULL Port *
241carla_native_plugin_get_midi_out_port (CarlaNativePlugin * self);
242
243NONNULL float
244carla_native_plugin_get_param_value (CarlaNativePlugin * self, const uint32_t id);
245
252NONNULL void
253carla_native_plugin_set_param_value (
254 CarlaNativePlugin * self,
255 const uint32_t id,
256 float val);
257
258NONNULL int
259carla_native_plugin_activate (CarlaNativePlugin * self, bool activate);
260
261NONNULL void
262carla_native_plugin_close (CarlaNativePlugin * self);
263
264bool
265carla_native_plugin_has_custom_ui (const PluginDescriptor * descr);
266
270NONNULL nframes_t
271carla_native_plugin_get_latency (CarlaNativePlugin * self);
272
273int
274carla_native_plugin_add_internal_plugin_from_descr (
275 CarlaNativePlugin * self,
276 const PluginDescriptor * descr);
277
281NONNULL void
282carla_native_plugin_free (CarlaNativePlugin * self);
283
284# endif /* HAVE_CARLA */
285
290#endif
NONNULL_ARGS(1) int undo_manager_undo(UndoManager *self
Undo last action.
CarlaPluginType
The type of the Carla plugin.
uint32_t nframes_t
Frame count.
Definition types.h:35
unsigned int cv_input_port_id
Port ID of first cv input (for connecting inside patchbay).
unsigned int cv_output_port_id
Port ID of first cv output (for connecting inside patchbay).
bool ports_created
Whether ports are already created or not.
unsigned int audio_input_port_id
Port ID of first audio input (for connecting inside patchbay).
unsigned int carla_plugin_id
Plugin ID inside carla engine.
unsigned int audio_output_port_id
Port ID of first audio output (for connecting inside patchbay).
float ** zero_inbufs
Used during processing.
guint tick_cb
GTK tick callback.
unsigned int midi_output_port_id
Port ID of first midi output (for connecting inside patchbay).
Plugin * plugin
Pointer back to Plugin.
GPtrArray * patchbay_port_info
Used when connecting Carla's internal plugin to patchbay ports.
unsigned int midi_input_port_id
Port ID of first midi input (for connecting inside patchbay).
Common struct to pass around during processing to avoid repeating the data in function arguments.
Definition types.h:138
The base plugin Inheriting plugins must have this as a child.
Definition plugin.h:74
Must ONLY be created via port_new()
Definition port.h:138