Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
channel.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2018-2022 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
9
10#ifndef __SCHEMAS_AUDIO_CHANNEL_H__
11#define __SCHEMAS_AUDIO_CHANNEL_H__
12
13#include "gui/backend/backend/cyaml_schemas/dsp/channel_send.h"
17#include "utils/yaml.h"
18
19typedef struct Channel_v1
20{
21 int schema_version;
22 Plugin_v1 * midi_fx[9];
23 Plugin_v1 * inserts[9];
24 Plugin_v1 * instrument;
25 ChannelSend_v1 * sends[9];
26 ExtPort_v1 * ext_midi_ins[1024];
27 int num_ext_midi_ins;
28 int all_midi_ins;
29 ExtPort_v1 * ext_stereo_l_ins[1024];
30 int num_ext_stereo_l_ins;
31 int all_stereo_l_ins;
32 ExtPort_v1 * ext_stereo_r_ins[1024];
33 int num_ext_stereo_r_ins;
34 int all_stereo_r_ins;
35 int midi_channels[16];
36 int all_midi_channels;
37 Fader_v1 * fader;
38 Fader_v1 * prefader;
39 Port_v1 * midi_out;
40 StereoPorts_v1 * stereo_out;
41 int has_output;
42 unsigned int output_name_hash;
43 int track_pos;
44 int width;
46
47static const cyaml_schema_field_t channel_fields_schema_v1[] = {
48 YAML_FIELD_INT (Channel_v1, schema_version),
49 YAML_FIELD_SEQUENCE_FIXED (Channel_v1, midi_fx, plugin_schema_v1, 9),
50 YAML_FIELD_SEQUENCE_FIXED (Channel_v1, inserts, plugin_schema_v1, 9),
51 YAML_FIELD_SEQUENCE_FIXED (Channel_v1, sends, channel_send_schema_v1, 9),
52 YAML_FIELD_MAPPING_PTR_OPTIONAL (Channel_v1, instrument, plugin_fields_schema_v1),
53 YAML_FIELD_MAPPING_PTR (Channel_v1, prefader, fader_fields_schema_v1),
54 YAML_FIELD_MAPPING_PTR (Channel_v1, fader, fader_fields_schema_v1),
55 YAML_FIELD_MAPPING_PTR_OPTIONAL (Channel_v1, midi_out, port_fields_schema_v1),
56 YAML_FIELD_MAPPING_PTR_OPTIONAL (
58 stereo_out,
59 stereo_ports_fields_schema_v1),
60 YAML_FIELD_UINT (Channel_v1, has_output),
61 YAML_FIELD_UINT (Channel_v1, output_name_hash),
62 YAML_FIELD_INT (Channel_v1, track_pos),
63 YAML_FIELD_FIXED_SIZE_PTR_ARRAY_VAR_COUNT (
65 ext_midi_ins,
66 ext_port_schema_v1),
67 YAML_FIELD_INT (Channel_v1, all_midi_ins),
68 YAML_FIELD_SEQUENCE_FIXED (Channel_v1, midi_channels, int_schema, 16),
69 YAML_FIELD_INT (Channel_v1, all_midi_channels),
70 YAML_FIELD_FIXED_SIZE_PTR_ARRAY_VAR_COUNT (
72 ext_stereo_l_ins,
73 ext_port_schema_v1),
74 YAML_FIELD_INT (Channel_v1, all_stereo_l_ins),
75 YAML_FIELD_FIXED_SIZE_PTR_ARRAY_VAR_COUNT (
77 ext_stereo_r_ins,
78 ext_port_schema_v1),
79 YAML_FIELD_INT (Channel_v1, all_stereo_r_ins),
80 YAML_FIELD_INT (Channel_v1, width),
81
82 CYAML_FIELD_END
83};
84
85static const cyaml_schema_value_t channel_schema_v1 = {
86 YAML_VALUE_PTR (Channel_v1, channel_fields_schema_v1),
87};
88
89typedef struct Channel_v2
90{
91 int schema_version;
92 Plugin_v1 * midi_fx[9];
93 Plugin_v1 * inserts[9];
94 Plugin_v1 * instrument;
95 ChannelSend_v1 * sends[9];
96 ExtPort_v1 * ext_midi_ins[1024];
97 int num_ext_midi_ins;
98 int all_midi_ins;
99 ExtPort_v1 * ext_stereo_l_ins[1024];
100 int num_ext_stereo_l_ins;
101 int all_stereo_l_ins;
102 ExtPort_v1 * ext_stereo_r_ins[1024];
103 int num_ext_stereo_r_ins;
104 int all_stereo_r_ins;
105 int midi_channels[16];
106 int all_midi_channels;
107 Fader_v2 * fader;
108 Fader_v2 * prefader;
109 Port_v1 * midi_out;
110 StereoPorts_v1 * stereo_out;
111 int has_output;
112 unsigned int output_name_hash;
113 int track_pos;
114 int width;
115} Channel_v2;
116
117static const cyaml_schema_field_t channel_fields_schema_v2[] = {
118 YAML_FIELD_INT (Channel_v2, schema_version),
119 YAML_FIELD_SEQUENCE_FIXED (Channel_v2, midi_fx, plugin_schema_v1, 9),
120 YAML_FIELD_SEQUENCE_FIXED (Channel_v2, inserts, plugin_schema_v1, 9),
121 YAML_FIELD_SEQUENCE_FIXED (Channel_v2, sends, channel_send_schema_v1, 9),
122 YAML_FIELD_MAPPING_PTR_OPTIONAL (Channel_v2, instrument, plugin_fields_schema_v1),
123 YAML_FIELD_MAPPING_PTR (Channel_v2, prefader, fader_fields_schema_v2),
124 YAML_FIELD_MAPPING_PTR (Channel_v2, fader, fader_fields_schema_v2),
125 YAML_FIELD_MAPPING_PTR_OPTIONAL (Channel_v2, midi_out, port_fields_schema_v1),
126 YAML_FIELD_MAPPING_PTR_OPTIONAL (
128 stereo_out,
129 stereo_ports_fields_schema_v1),
130 YAML_FIELD_UINT (Channel_v2, has_output),
131 YAML_FIELD_UINT (Channel_v2, output_name_hash),
132 YAML_FIELD_INT (Channel_v2, track_pos),
133 YAML_FIELD_FIXED_SIZE_PTR_ARRAY_VAR_COUNT (
135 ext_midi_ins,
136 ext_port_schema_v1),
137 YAML_FIELD_INT (Channel_v2, all_midi_ins),
138 YAML_FIELD_SEQUENCE_FIXED (Channel_v2, midi_channels, int_schema, 16),
139 YAML_FIELD_INT (Channel_v2, all_midi_channels),
140 YAML_FIELD_FIXED_SIZE_PTR_ARRAY_VAR_COUNT (
142 ext_stereo_l_ins,
143 ext_port_schema_v1),
144 YAML_FIELD_INT (Channel_v2, all_stereo_l_ins),
145 YAML_FIELD_FIXED_SIZE_PTR_ARRAY_VAR_COUNT (
147 ext_stereo_r_ins,
148 ext_port_schema_v1),
149 YAML_FIELD_INT (Channel_v2, all_stereo_r_ins),
150 YAML_FIELD_INT (Channel_v2, width),
151
152 CYAML_FIELD_END
153};
154
155static const cyaml_schema_value_t channel_schema_v2 = {
156 YAML_VALUE_PTR (Channel_v2, channel_fields_schema_v2),
157};
158
160channel_upgrade_from_v1 (Channel_v1 * old);
161
162#endif
External port schema.
Fader schema.
Plugin schema.
Definition port.h:18
L & R port, for convenience.
Definition port.h:54
YAML utils.