Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
fader.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2019-2022 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
9
10#ifndef __SCHEMAS_AUDIO_FADER_H__
11#define __SCHEMAS_AUDIO_FADER_H__
12
14#include "utils/types.h"
15#include "utils/yaml.h"
16
17typedef enum FaderType_v1
18{
19 FADER_TYPE_NONE_v1,
20 FADER_TYPE_MONITOR_v1,
21 FADER_TYPE_SAMPLE_PROCESSOR_v1,
22 FADER_TYPE_AUDIO_CHANNEL_v1,
23 FADER_TYPE_MIDI_CHANNEL_v1,
24 FADER_TYPE_GENERIC_v1,
25} FaderType_v1;
26
27static const cyaml_strval_t fader_type_strings_v1[] = {
28 { "none", FADER_TYPE_NONE_v1 },
29 { "monitor", FADER_TYPE_MONITOR_v1 },
30 { "sample processor", FADER_TYPE_SAMPLE_PROCESSOR_v1 },
31 { "audio channel", FADER_TYPE_AUDIO_CHANNEL_v1 },
32 { "midi channel", FADER_TYPE_MIDI_CHANNEL_v1 },
33 { "generic", FADER_TYPE_GENERIC_v1 },
34};
35
36typedef enum MidiFaderMode_v1
37{
38 MIDI_FADER_MODE_VEL_MULTIPLIER_v1,
39 MIDI_FADER_MODE_CC_VOLUME_v1,
40} MidiFaderMode_v1;
41
42static const cyaml_strval_t midi_fader_mode_strings_v1[] = {
43 { "vel_multiplier", MIDI_FADER_MODE_VEL_MULTIPLIER_v1 },
44 { "cc_volume", MIDI_FADER_MODE_CC_VOLUME_v1 },
45};
46
47typedef struct Fader_v1
48{
49 int schema_version;
50 float volume;
51 float phase;
52 Port_v1 * amp;
53 Port_v1 * balance;
54 Port_v1 * mute;
55 Port_v1 * solo;
56 Port_v1 * listen;
57 Port_v1 * mono_compat_enabled;
58 StereoPorts_v1 * stereo_in;
59 StereoPorts_v1 * stereo_out;
60 Port_v1 * midi_in;
61 Port_v1 * midi_out;
62 FaderType_v1 type;
63 MidiFaderMode_v1 midi_mode;
64 bool passthrough;
65} Fader_v1;
66
67static const cyaml_schema_field_t fader_fields_schema_v1[] = {
68 YAML_FIELD_INT (Fader_v1, schema_version),
69 YAML_FIELD_ENUM (Fader_v1, type, fader_type_strings_v1),
70 YAML_FIELD_FLOAT (Fader_v1, volume),
71 YAML_FIELD_MAPPING_PTR (Fader_v1, amp, port_fields_schema_v1),
72 YAML_FIELD_FLOAT (Fader_v1, phase),
73 YAML_FIELD_MAPPING_PTR (Fader_v1, balance, port_fields_schema_v1),
74 YAML_FIELD_MAPPING_PTR (Fader_v1, mute, port_fields_schema_v1),
75 YAML_FIELD_MAPPING_PTR (Fader_v1, solo, port_fields_schema_v1),
76 YAML_FIELD_MAPPING_PTR (Fader_v1, listen, port_fields_schema_v1),
77 YAML_FIELD_MAPPING_PTR (Fader_v1, mono_compat_enabled, port_fields_schema_v1),
78 YAML_FIELD_MAPPING_PTR_OPTIONAL (Fader_v1, midi_in, port_fields_schema_v1),
79 YAML_FIELD_MAPPING_PTR_OPTIONAL (Fader_v1, midi_out, port_fields_schema_v1),
80 YAML_FIELD_MAPPING_PTR_OPTIONAL (
82 stereo_in,
83 stereo_ports_fields_schema_v1),
84 YAML_FIELD_MAPPING_PTR_OPTIONAL (
86 stereo_out,
87 stereo_ports_fields_schema_v1),
88 YAML_FIELD_ENUM (Fader_v1, midi_mode, midi_fader_mode_strings_v1),
89 YAML_FIELD_INT (Fader_v1, passthrough),
90
91 CYAML_FIELD_END
92};
93
94static const cyaml_schema_value_t fader_schema_v1 = {
95 YAML_VALUE_PTR (Fader_v1, fader_fields_schema_v1),
96};
97
98typedef struct Fader_v2
99{
100 int schema_version;
101 float volume;
102 float phase;
103 Port_v1 * amp;
104 Port_v1 * balance;
105 Port_v1 * mute;
106 Port_v1 * solo;
107 Port_v1 * listen;
108 Port_v1 * mono_compat_enabled;
109 Port_v1 * swap_phase;
110 StereoPorts_v1 * stereo_in;
111 StereoPorts_v1 * stereo_out;
112 Port_v1 * midi_in;
113 Port_v1 * midi_out;
114 FaderType_v1 type;
115 MidiFaderMode_v1 midi_mode;
116 bool passthrough;
117} Fader_v2;
118
119static const cyaml_schema_field_t fader_fields_schema_v2[] = {
120 YAML_FIELD_INT (Fader_v2, schema_version),
121 YAML_FIELD_ENUM (Fader_v2, type, fader_type_strings_v1),
122 YAML_FIELD_FLOAT (Fader_v2, volume),
123 YAML_FIELD_MAPPING_PTR (Fader_v2, amp, port_fields_schema_v1),
124 YAML_FIELD_FLOAT (Fader_v2, phase),
125 YAML_FIELD_MAPPING_PTR (Fader_v2, balance, port_fields_schema_v1),
126 YAML_FIELD_MAPPING_PTR (Fader_v2, mute, port_fields_schema_v1),
127 YAML_FIELD_MAPPING_PTR (Fader_v2, solo, port_fields_schema_v1),
128 YAML_FIELD_MAPPING_PTR (Fader_v2, listen, port_fields_schema_v1),
129 YAML_FIELD_MAPPING_PTR (Fader_v2, mono_compat_enabled, port_fields_schema_v1),
130 YAML_FIELD_MAPPING_PTR (Fader_v2, swap_phase, port_fields_schema_v1),
131 YAML_FIELD_MAPPING_PTR_OPTIONAL (Fader_v2, midi_in, port_fields_schema_v1),
132 YAML_FIELD_MAPPING_PTR_OPTIONAL (Fader_v2, midi_out, port_fields_schema_v1),
133 YAML_FIELD_MAPPING_PTR_OPTIONAL (
134 Fader_v2,
135 stereo_in,
136 stereo_ports_fields_schema_v1),
137 YAML_FIELD_MAPPING_PTR_OPTIONAL (
138 Fader_v2,
139 stereo_out,
140 stereo_ports_fields_schema_v1),
141 YAML_FIELD_ENUM (Fader_v2, midi_mode, midi_fader_mode_strings_v1),
142 YAML_FIELD_INT (Fader_v2, passthrough),
143
144 CYAML_FIELD_END
145};
146
147static const cyaml_schema_value_t fader_schema_v2 = {
148 YAML_VALUE_PTR (Fader_v2, fader_fields_schema_v2),
149};
150
151Fader_v2 *
152fader_upgrade_from_v1 (Fader_v1 * old);
153
154#endif
Port schema.
Definition port.h:18
L & R port, for convenience.
Definition port.h:54
Custom types.
YAML utils.