1#[cxx::bridge(namespace = "essentia_bridge")]
2pub mod ffi {
3
4 pub struct SliceFloat<'a> {
6 slice: &'a [f32],
7 }
8
9 pub struct VecString {
10 vec: Vec<String>,
11 }
12
13 pub struct SliceStereoSample<'a> {
14 slice: &'a [StereoSample],
15 }
16
17 pub struct MatrixFloat<'a> {
18 slice: &'a [f32],
19 dim1: usize,
20 dim2: usize,
21 }
22
23 pub struct TensorFloat<'a> {
24 slice: &'a [f32],
25 shape: &'a [usize],
26 }
27
28 pub struct MapEntryVectorFloat<'a> {
29 key: String,
30 value: &'a [f32],
31 }
32
33 pub struct MapEntryVectorString {
34 key: String,
35 value: Vec<String>,
36 }
37
38 pub struct MapEntryVectorInt<'a> {
39 key: String,
40 value: &'a [i32],
41 }
42
43 pub struct MapEntryFloat {
44 key: String,
45 value: f32,
46 }
47
48 #[derive(Clone, Debug)]
49 pub struct StereoSample {
50 left: f32,
51 right: f32,
52 }
53
54 #[derive(Clone, Debug)]
55 pub struct Complex {
56 real: f32,
57 imag: f32,
58 }
59
60 pub struct VecComplex {
61 vec: Vec<Complex>,
62 }
63
64 pub struct MapEntryVectorComplex<'a> {
65 key: String,
66 value: &'a [Complex],
67 }
68
69 #[derive(Debug, Clone, Copy)]
71 pub enum DataType {
72 Float,
73 String,
74 Bool,
75 Int,
76 UnsignedInt,
77 Long,
78 StereoSample,
79 Complex,
80 TensorFloat,
81 VectorFloat,
82 VectorString,
83 VectorBool,
84 VectorInt,
85 VectorStereoSample,
86 VectorComplex,
87 VectorVectorFloat,
88 VectorVectorString,
89 VectorVectorStereoSample,
90 VectorVectorComplex,
91 VectorMatrixFloat,
92 MapVectorFloat,
93 MapVectorString,
94 MapVectorInt,
95 MapVectorComplex,
96 MapFloat,
97 MatrixFloat,
98 Pool,
99 }
100
101 pub struct ParameterInfo {
103 name: String,
104 data_type: DataType,
105 constraint: String,
106 description: String,
107 default_value: String,
108 }
109
110 pub struct InputOutputInfo {
111 name: String,
112 data_type: DataType,
113 description: String,
114 }
115
116 unsafe extern "C++" {
118 include!("bridge/bridge.h");
119
120 pub type AlgorithmBridge;
122 pub type ParameterMapBridge;
123 pub type PoolBridge;
124 pub type DataContainer;
125
126 pub fn init_essentia();
128 pub fn shutdown_essentia();
129
130 pub fn get_algorithm_names() -> Vec<String>;
132 pub fn create_algorithm_bridge(name: &str) -> Result<UniquePtr<AlgorithmBridge>>;
133
134 pub fn get_name(self: &AlgorithmBridge) -> String;
136 pub fn get_category(self: &AlgorithmBridge) -> String;
137 pub fn get_description(self: &AlgorithmBridge) -> String;
138 pub fn get_parameter_infos(self: &AlgorithmBridge) -> Vec<ParameterInfo>;
139 pub fn get_input_infos(self: &AlgorithmBridge) -> Vec<InputOutputInfo>;
140 pub fn get_output_infos(self: &AlgorithmBridge) -> Vec<InputOutputInfo>;
141
142 pub fn configure(
144 self: Pin<&mut AlgorithmBridge>,
145 parameter_map_bridge: UniquePtr<ParameterMapBridge>,
146 ) -> Result<()>;
147 pub fn compute(self: Pin<&mut AlgorithmBridge>) -> Result<()>;
148 pub fn reset(self: Pin<&mut AlgorithmBridge>) -> Result<()>;
149
150 pub fn set_input(
152 self: Pin<&mut AlgorithmBridge>,
153 input_name: &str,
154 data_container: UniquePtr<DataContainer>,
155 ) -> Result<()>;
156 pub fn setup_output(
157 self: Pin<&mut AlgorithmBridge>,
158 output_name: &str,
159 data_type: DataType,
160 ) -> Result<()>;
161 pub fn get_output(self: &AlgorithmBridge, output_name: &str) -> Result<&DataContainer>;
162
163 pub fn create_data_container_from_bool(value: bool) -> UniquePtr<DataContainer>;
165 pub fn create_data_container_from_string(value: &str) -> UniquePtr<DataContainer>;
166 pub fn create_data_container_from_float(value: f32) -> UniquePtr<DataContainer>;
167 pub fn create_data_container_from_int(value: i32) -> UniquePtr<DataContainer>;
168 pub fn create_data_container_from_unsigned_int(value: u32) -> UniquePtr<DataContainer>;
169 pub fn create_data_container_from_long(value: i64) -> UniquePtr<DataContainer>;
170 pub fn create_data_container_from_stereo_sample(
171 value: StereoSample,
172 ) -> UniquePtr<DataContainer>;
173 pub fn create_data_container_from_complex(value: Complex) -> UniquePtr<DataContainer>;
174 pub fn create_data_container_from_vector_bool(value: &[bool]) -> UniquePtr<DataContainer>;
175 pub fn create_data_container_from_vector_int(value: &[i32]) -> UniquePtr<DataContainer>;
176 pub fn create_data_container_from_vector_string(value: &[&str])
177 -> UniquePtr<DataContainer>;
178 pub fn create_data_container_from_vector_float(value: &[f32]) -> UniquePtr<DataContainer>;
179 pub fn create_data_container_from_vector_stereo_sample(
180 value: &[StereoSample],
181 ) -> UniquePtr<DataContainer>;
182 pub fn create_data_container_from_vector_complex(
183 value: &[Complex],
184 ) -> UniquePtr<DataContainer>;
185 pub fn create_data_container_from_vector_vector_float(
186 value: Vec<SliceFloat>,
187 ) -> UniquePtr<DataContainer>;
188 pub fn create_data_container_from_matrix_float(
189 value: MatrixFloat,
190 ) -> UniquePtr<DataContainer>;
191 pub fn create_data_container_from_tensor_float(
192 value: TensorFloat,
193 ) -> UniquePtr<DataContainer>;
194 pub fn create_data_container_from_vector_vector_string(
195 value: Vec<VecString>,
196 ) -> UniquePtr<DataContainer>;
197 pub fn create_data_container_from_vector_vector_stereo_sample(
198 value: Vec<SliceStereoSample>,
199 ) -> UniquePtr<DataContainer>;
200 pub fn create_data_container_from_vector_vector_complex(
201 value: Vec<VecComplex>,
202 ) -> UniquePtr<DataContainer>;
203 pub fn create_data_container_from_vector_matrix_float(
204 value: Vec<MatrixFloat>,
205 ) -> UniquePtr<DataContainer>;
206 pub fn create_data_container_from_map_vector_float(
207 value: Vec<MapEntryVectorFloat>,
208 ) -> UniquePtr<DataContainer>;
209 pub fn create_data_container_from_map_vector_string(
210 value: Vec<MapEntryVectorString>,
211 ) -> UniquePtr<DataContainer>;
212 pub fn create_data_container_from_map_vector_int(
213 value: Vec<MapEntryVectorInt>,
214 ) -> UniquePtr<DataContainer>;
215 pub fn create_data_container_from_map_vector_complex(
216 value: Vec<MapEntryVectorComplex>,
217 ) -> UniquePtr<DataContainer>;
218 pub fn create_data_container_from_map_float(
219 value: Vec<MapEntryFloat>,
220 ) -> UniquePtr<DataContainer>;
221 pub fn create_data_container_from_pool(
222 value: UniquePtr<PoolBridge>,
223 ) -> UniquePtr<DataContainer>;
224
225 pub fn get_data_type(self: &DataContainer) -> DataType;
227
228 pub fn get_bool(self: &DataContainer) -> Result<bool>;
230 pub fn get_string(self: &DataContainer) -> Result<String>;
231 pub fn get_float(self: &DataContainer) -> Result<f32>;
232 pub fn get_int(self: &DataContainer) -> Result<i32>;
233 pub fn get_unsigned_int(self: &DataContainer) -> Result<u32>;
234 pub fn get_long(self: &DataContainer) -> Result<i64>;
235 pub fn get_stereo_sample(self: &DataContainer) -> Result<StereoSample>;
236 pub fn get_complex(self: &DataContainer) -> Result<Complex>;
237 pub fn get_vector_bool(self: &DataContainer) -> Result<Vec<bool>>;
238 pub fn get_vector_int(self: &DataContainer) -> Result<&[i32]>;
239 pub fn get_vector_string(self: &DataContainer) -> Result<Vec<String>>;
240 pub fn get_vector_float(self: &DataContainer) -> Result<&[f32]>;
241 pub fn get_vector_stereo_sample(self: &DataContainer) -> Result<&[StereoSample]>;
242 pub fn get_vector_complex(self: &DataContainer) -> Result<&[Complex]>;
243 pub fn get_vector_vector_float(self: &DataContainer) -> Result<Vec<SliceFloat>>;
244 pub fn get_matrix_float(self: &DataContainer) -> Result<MatrixFloat>;
245 pub fn get_tensor_float(self: &DataContainer) -> Result<TensorFloat>;
246 pub fn get_vector_vector_string(self: &DataContainer) -> Result<Vec<VecString>>;
247 pub fn get_vector_vector_stereo_sample(
248 self: &DataContainer,
249 ) -> Result<Vec<SliceStereoSample>>;
250 pub fn get_vector_vector_complex(self: &DataContainer) -> Result<Vec<VecComplex>>;
251 pub fn get_vector_matrix_float(self: &DataContainer) -> Result<Vec<MatrixFloat>>;
252 pub fn get_map_vector_float(self: &DataContainer) -> Result<Vec<MapEntryVectorFloat>>;
253 pub fn get_map_vector_string(self: &DataContainer) -> Result<Vec<MapEntryVectorString>>;
254 pub fn get_map_vector_int(self: &DataContainer) -> Result<Vec<MapEntryVectorInt>>;
255 pub fn get_map_vector_complex(self: &DataContainer) -> Result<Vec<MapEntryVectorComplex>>;
256 pub fn get_map_float(self: &DataContainer) -> Result<Vec<MapEntryFloat>>;
257 pub fn get_pool(self: &DataContainer) -> &PoolBridge;
258
259 pub fn create_parameter_map_bridge() -> UniquePtr<ParameterMapBridge>;
261 pub fn add(
262 self: Pin<&mut ParameterMapBridge>,
263 key: &str,
264 data_container: UniquePtr<DataContainer>,
265 ) -> Result<()>;
266
267 pub fn create_pool_bridge() -> UniquePtr<PoolBridge>;
269 pub fn clone(self: &PoolBridge) -> UniquePtr<PoolBridge>;
270 pub fn set(self: Pin<&mut PoolBridge>, key: &str, data_container: UniquePtr<DataContainer>);
271 pub fn get(self: &PoolBridge, key: &str) -> Result<UniquePtr<DataContainer>>;
272 pub fn contains(self: &PoolBridge, key: &str) -> bool;
273 pub fn keys(self: &PoolBridge) -> Vec<String>;
274 }
275}