LMMS
Loading...
Searching...
No Matches
audio_processor.h
Go to the documentation of this file.
1/*
2 * travesty, pure C VST3-compatible interface
3 * Copyright (C) 2021-2023 Filipe Coelho <falktx@falktx.com>
4 *
5 * Permission to use, copy, modify, and/or distribute this software for any purpose with
6 * or without fee is hereby granted, provided that the above copyright notice and this
7 * permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
10 * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
11 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
12 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
13 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17#pragma once
18
19#include "base.h"
20#include "events.h"
21
22#include "align_push.h"
23
27
28typedef uint64_t v3_speaker_arrangement;
29
30enum {
31 V3_SPEAKER_L = 1 << 0,
32 V3_SPEAKER_R = 1 << 1,
33 V3_SPEAKER_M = 1 << 19
34};
35
39
45
46static inline
48{
49 switch (d)
50 {
51 case V3_REALTIME:
52 return "V3_REALTIME";
53 case V3_PREFETCH:
54 return "V3_PREFETCH";
55 case V3_OFFLINE:
56 return "V3_OFFLINE";
57 default:
58 return "[unknown]";
59 }
60}
61
62enum {
65};
66
67static inline
69{
70 switch (d)
71 {
72 case V3_SAMPLE_32:
73 return "V3_SAMPLE_32";
74 case V3_SAMPLE_64:
75 return "V3_SAMPLE_64";
76 default:
77 return "[unknown]";
78 }
79}
80
87
91
93#ifndef __cplusplus
94 struct v3_funknown;
95#endif
96 v3_param_id (V3_API* get_param_id)(void* self);
97 int32_t (V3_API* get_point_count)(void* self);
98 v3_result (V3_API* get_point)(void* self, int32_t idx, int32_t* sample_offset, double* value);
99 v3_result (V3_API* add_point)(void* self, int32_t sample_offset, double value, int32_t* idx);
100};
101
102static constexpr const v3_tuid v3_param_value_queue_iid =
103 V3_ID(0x01263A18, 0xED074F6F, 0x98C9D356, 0x4686F9BA);
104
106#ifndef __cplusplus
107 struct v3_funknown;
108#endif
109 int32_t (V3_API* get_param_count)(void* self);
110 struct v3_param_value_queue** (V3_API* get_param_data)(void* self, int32_t idx);
111 struct v3_param_value_queue** (V3_API* add_param_data)(void* self, const v3_param_id* id, int32_t* idx);
112};
113
114static constexpr const v3_tuid v3_param_changes_iid =
115 V3_ID(0xA4779663, 0x0BB64A56, 0xB44384A8, 0x466FEB9D);
116
120
125
131
132enum {
146};
147
166
170
171enum {
183};
184
186#ifndef __cplusplus
187 struct v3_funknown;
188#endif
189 uint32_t (V3_API* get_process_context_requirements)(void* self);
190};
191
193 V3_ID(0x2A654303, 0xEF764E3D, 0x95B5FE83, 0x730EF6D0);
194
198
207
222
226
228#ifndef __cplusplus
229 struct v3_funknown;
230#endif
231 v3_result (V3_API* set_bus_arrangements)(void* self, v3_speaker_arrangement* inputs, int32_t num_inputs,
234 v3_result (V3_API* can_process_sample_size)(void* self, int32_t symbolic_sample_size);
235 uint32_t (V3_API* get_latency_samples)(void* self);
236 v3_result (V3_API* setup_processing)(void* self, struct v3_process_setup* setup);
237 v3_result (V3_API* set_processing)(void* self, v3_bool state);
238 v3_result (V3_API* process)(void* self, struct v3_process_data* data);
239 uint32_t (V3_API* get_tail_samples)(void* self);
240};
241
242static constexpr const v3_tuid v3_audio_processor_iid =
243 V3_ID(0x42043F99, 0xB7DA453C, 0xA569E79D, 0x9AAEC33D);
244
245#ifdef __cplusplus
246
250
251struct v3_param_value_queue_cpp : v3_funknown {
253};
254
255struct v3_param_changes_cpp : v3_funknown {
256 v3_param_changes changes;
257};
258
259struct v3_process_context_requirements_cpp : v3_funknown {
260 v3_process_context_requirements req;
261};
262
263struct v3_audio_processor_cpp : v3_funknown {
264 v3_audio_processor proc;
265};
266
267#endif
268
269#include "align_pop.h"
#define V3_ID(a, b, c, d)
Definition base.h:111
uint32_t v3_param_id
Definition base.h:40
#define V3_API
Definition base.h:59
int32_t v3_result
Definition base.h:35
uint8_t v3_bool
Definition base.h:38
uint8_t v3_tuid[16]
Definition base.h:46
void process(Alg_seq_ptr seq, bool tempo_flag, double tempo, bool flatten_flag)
Definition allegroconvert.cpp:42
@ V3_SPEAKER_M
Definition audio_processor.h:33
@ V3_SPEAKER_R
Definition audio_processor.h:32
@ V3_SPEAKER_L
Definition audio_processor.h:31
static constexpr const v3_tuid v3_audio_processor_iid
Definition audio_processor.h:242
v3_process_mode
Definition audio_processor.h:40
@ V3_OFFLINE
Definition audio_processor.h:43
@ V3_REALTIME
Definition audio_processor.h:41
@ V3_PREFETCH
Definition audio_processor.h:42
static constexpr const v3_tuid v3_process_context_requirements_iid
Definition audio_processor.h:192
@ V3_SAMPLE_32
Definition audio_processor.h:63
@ V3_SAMPLE_64
Definition audio_processor.h:64
@ V3_PROCESS_CTX_CHORD_VALID
Definition audio_processor.h:145
@ V3_PROCESS_CTX_BAR_POSITION_VALID
Definition audio_processor.h:139
@ V3_PROCESS_CTX_PROJECT_TIME_VALID
Definition audio_processor.h:137
@ V3_PROCESS_CTX_CYCLE_ACTIVE
Definition audio_processor.h:134
@ V3_PROCESS_CTX_TIME_SIG_VALID
Definition audio_processor.h:141
@ V3_PROCESS_CTX_CYCLE_VALID
Definition audio_processor.h:140
@ V3_PROCESS_CTX_RECORDING
Definition audio_processor.h:135
@ V3_PROCESS_CTX_CONT_TIME_VALID
Definition audio_processor.h:144
@ V3_PROCESS_CTX_NEXT_CLOCK_VALID
Definition audio_processor.h:143
@ V3_PROCESS_CTX_PLAYING
Definition audio_processor.h:133
@ V3_PROCESS_CTX_TEMPO_VALID
Definition audio_processor.h:138
@ V3_PROCESS_CTX_SMPTE_VALID
Definition audio_processor.h:142
@ V3_PROCESS_CTX_SYSTEM_TIME_VALID
Definition audio_processor.h:136
@ V3_PROCESS_CTX_NEED_CYCLE
Definition audio_processor.h:176
@ V3_PROCESS_CTX_NEED_TRANSPORT_STATE
Definition audio_processor.h:182
@ V3_PROCESS_CTX_NEED_CHORD
Definition audio_processor.h:180
@ V3_PROCESS_CTX_NEED_BAR_POSITION
Definition audio_processor.h:175
@ V3_PROCESS_CTX_NEED_CONTINUOUS_TIME
Definition audio_processor.h:173
@ V3_PROCESS_CTX_NEED_PROJECT_TIME
Definition audio_processor.h:174
@ V3_PROCESS_CTX_NEED_TIME_SIG
Definition audio_processor.h:179
@ V3_PROCESS_CTX_NEED_SYSTEM_TIME
Definition audio_processor.h:172
@ V3_PROCESS_CTX_NEED_FRAME_RATE
Definition audio_processor.h:181
@ V3_PROCESS_CTX_NEED_TEMPO
Definition audio_processor.h:178
@ V3_PROCESS_CTX_NEED_NEXT_CLOCK
Definition audio_processor.h:177
static const char * v3_process_mode_str(int32_t d)
Definition audio_processor.h:47
uint64_t v3_speaker_arrangement
Definition audio_processor.h:28
static constexpr const v3_tuid v3_param_value_queue_iid
Definition audio_processor.h:102
static constexpr const v3_tuid v3_param_changes_iid
Definition audio_processor.h:114
static const char * v3_sample_size_str(int32_t d)
Definition audio_processor.h:68
unsigned d
Definition inflate.c:940
int int32_t
Definition mid.cpp:97
unsigned int uint32_t
Definition mid.cpp:100
short int16_t
Definition mid.cpp:96
unsigned char uint8_t
Definition mid.cpp:98
Definition audio_processor.h:199
int32_t num_channels
Definition audio_processor.h:200
double ** channel_buffers_64
Definition audio_processor.h:204
uint64_t channel_silence_bitset
Definition audio_processor.h:201
float ** channel_buffers_32
Definition audio_processor.h:203
Definition audio_processor.h:227
uint32_t(V3_API *get_tail_samples)(void *self)
int32_t bus_direction
Definition audio_processor.h:233
v3_speaker_arrangement int32_t num_inputs
Definition audio_processor.h:231
uint32_t(V3_API *get_latency_samples)(void *self)
int32_t int32_t idx
Definition audio_processor.h:233
v3_speaker_arrangement int32_t v3_speaker_arrangement * outputs
Definition audio_processor.h:232
v3_speaker_arrangement int32_t v3_speaker_arrangement int32_t num_outputs
Definition audio_processor.h:232
v3_speaker_arrangement * inputs
Definition audio_processor.h:231
struct v3_process_setup * setup
Definition audio_processor.h:236
v3_bool state
Definition audio_processor.h:237
int32_t int32_t v3_speaker_arrangement int32_t symbolic_sample_size
Definition audio_processor.h:234
struct v3_process_data * data
Definition audio_processor.h:238
Definition audio_processor.h:126
uint8_t root_note
Definition audio_processor.h:128
int16_t chord_mask
Definition audio_processor.h:129
uint8_t key_note
Definition audio_processor.h:127
Definition events.h:134
Definition audio_processor.h:121
uint32_t flags
Definition audio_processor.h:123
uint32_t fps
Definition audio_processor.h:122
Definition base.h:142
Definition audio_processor.h:105
struct v3_param_value_queue **V3_API * get_param_data(void *self, int32_t idx)
struct v3_param_value_queue **V3_API * add_param_data(void *self, const v3_param_id *id, int32_t *idx)
int32_t(V3_API *get_param_count)(void *self)
Definition audio_processor.h:92
int32_t int32_t double * value
Definition audio_processor.h:98
v3_param_id(V3_API *get_param_id)(void *self)
int32_t int32_t * sample_offset
Definition audio_processor.h:98
int32_t(V3_API *get_point_count)(void *self)
int32_t idx
Definition audio_processor.h:98
Definition audio_processor.h:185
uint32_t(V3_API *get_process_context_requirements)(void *self)
Definition audio_processor.h:148
struct v3_chord chord
Definition audio_processor.h:161
double project_time_quarters
Definition audio_processor.h:154
int32_t samples_to_next_clock
Definition audio_processor.h:164
struct v3_frame_rate frame_rate
Definition audio_processor.h:163
double sample_rate
Definition audio_processor.h:150
double bar_position_quarters
Definition audio_processor.h:155
int32_t time_sig_denom
Definition audio_processor.h:160
int64_t project_time_in_samples
Definition audio_processor.h:151
double cycle_end_quarters
Definition audio_processor.h:157
int32_t smpte_offset_subframes
Definition audio_processor.h:162
int64_t continuous_time_in_samples
Definition audio_processor.h:153
double bpm
Definition audio_processor.h:158
uint32_t state
Definition audio_processor.h:149
int64_t system_time_ns
Definition audio_processor.h:152
double cycle_start_quarters
Definition audio_processor.h:156
int32_t time_sig_numerator
Definition audio_processor.h:159
Definition audio_processor.h:208
struct v3_audio_bus_buffers * inputs
Definition audio_processor.h:214
struct v3_event_list ** input_events
Definition audio_processor.h:218
int32_t num_input_buses
Definition audio_processor.h:212
struct v3_audio_bus_buffers * outputs
Definition audio_processor.h:215
int32_t num_output_buses
Definition audio_processor.h:213
int32_t symbolic_sample_size
Definition audio_processor.h:210
struct v3_param_changes ** input_params
Definition audio_processor.h:216
int32_t process_mode
Definition audio_processor.h:209
struct v3_process_context * ctx
Definition audio_processor.h:220
int32_t nframes
Definition audio_processor.h:211
struct v3_param_changes ** output_params
Definition audio_processor.h:217
struct v3_event_list ** output_events
Definition audio_processor.h:219
Definition audio_processor.h:81
int32_t process_mode
Definition audio_processor.h:82
double sample_rate
Definition audio_processor.h:85
int32_t symbolic_sample_size
Definition audio_processor.h:83
int32_t max_block_size
Definition audio_processor.h:84