Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
engine.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2018-2022 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-FileCopyrightText: © 2020 Ryan Gonzalez <rymg19 at gmail dot com>
3// SPDX-License-Identifier: LicenseRef-ZrythmLicense
4
10
11#ifndef __SCHEMAS_AUDIO_ENGINE_H__
12#define __SCHEMAS_AUDIO_ENGINE_H__
13
20#include "utils/types.h"
21
22typedef enum AudioEngineJackTransportType_v1
23{
24 AUDIO_ENGINE_JACK_TIMEBASE_MASTER_v1,
25 AUDIO_ENGINE_JACK_TRANSPORT_CLIENT_v1,
26 AUDIO_ENGINE_NO_JACK_TRANSPORT_v1,
27} AudioEngineJackTransportType_v1;
28
29static const cyaml_strval_t jack_transport_type_strings_v1[] = {
30 { "Timebase master", AUDIO_ENGINE_JACK_TIMEBASE_MASTER_v1 },
31 { "Transport client", AUDIO_ENGINE_JACK_TRANSPORT_CLIENT_v1 },
32 { "No JACK transport", AUDIO_ENGINE_NO_JACK_TRANSPORT_v1 },
33};
34
35typedef struct AudioEngine_v1
36{
37 int schema_version;
38 AudioEngineJackTransportType_v1 transport_type;
39 sample_rate_t sample_rate;
40 double frames_per_tick;
41 HardwareProcessor_v1 * hw_in_processor;
42 HardwareProcessor_v1 * hw_out_processor;
43 ControlRoom_v1 * control_room;
44 AudioPool_v1 * pool;
45 StereoPorts_v1 * monitor_out;
46 Port_v1 * midi_editor_manual_press;
47 Port_v1 * midi_in;
48 Transport_v1 * transport;
49 SampleProcessor_v1 * sample_processor;
51
52static const cyaml_schema_field_t engine_fields_schema_v1[] = {
53 YAML_FIELD_INT (AudioEngine_v1, schema_version),
54 YAML_FIELD_ENUM (AudioEngine_v1, transport_type, jack_transport_type_strings_v1),
55 YAML_FIELD_INT (AudioEngine_v1, sample_rate),
56 YAML_FIELD_FLOAT (AudioEngine_v1, frames_per_tick),
57 YAML_FIELD_MAPPING_PTR (
59 monitor_out,
60 stereo_ports_fields_schema_v1),
61 YAML_FIELD_MAPPING_PTR (
63 midi_editor_manual_press,
64 port_fields_schema_v1),
65 YAML_FIELD_MAPPING_PTR (AudioEngine_v1, midi_in, port_fields_schema_v1),
66 YAML_FIELD_MAPPING_PTR (AudioEngine_v1, transport, transport_fields_schema_v1),
67 YAML_FIELD_MAPPING_PTR (AudioEngine_v1, pool, audio_pool_fields_schema_v1),
68 YAML_FIELD_MAPPING_PTR (
70 control_room,
71 control_room_fields_schema_v1),
72 YAML_FIELD_MAPPING_PTR (
74 sample_processor,
75 sample_processor_fields_schema_v1),
76 YAML_FIELD_MAPPING_PTR (
78 hw_in_processor,
79 hardware_processor_fields_schema_v1),
80 YAML_FIELD_MAPPING_PTR (
82 hw_out_processor,
83 hardware_processor_fields_schema_v1),
84
85 CYAML_FIELD_END
86};
87
88static const cyaml_schema_value_t engine_schema_v1 = {
89 YAML_VALUE_PTR (AudioEngine_v1, engine_fields_schema_v1),
90};
91
92typedef struct AudioEngine_v2
93{
94 int schema_version;
95 AudioEngineJackTransportType_v1 transport_type;
96 sample_rate_t sample_rate;
97 double frames_per_tick;
98 HardwareProcessor_v1 * hw_in_processor;
99 HardwareProcessor_v1 * hw_out_processor;
100 ControlRoom_v2 * control_room;
101 AudioPool_v1 * pool;
102 StereoPorts_v1 * monitor_out;
103 Port_v1 * midi_editor_manual_press;
104 Port_v1 * midi_in;
105 Transport_v1 * transport;
106 SampleProcessor_v2 * sample_processor;
108
109static const cyaml_schema_field_t engine_fields_schema_v2[] = {
110 YAML_FIELD_INT (AudioEngine_v2, schema_version),
111 YAML_FIELD_ENUM (AudioEngine_v2, transport_type, jack_transport_type_strings_v1),
112 YAML_FIELD_INT (AudioEngine_v2, sample_rate),
113 YAML_FIELD_FLOAT (AudioEngine_v2, frames_per_tick),
114 YAML_FIELD_MAPPING_PTR (
116 monitor_out,
117 stereo_ports_fields_schema_v1),
118 YAML_FIELD_MAPPING_PTR (
120 midi_editor_manual_press,
121 port_fields_schema_v1),
122 YAML_FIELD_MAPPING_PTR (AudioEngine_v2, midi_in, port_fields_schema_v1),
123 YAML_FIELD_MAPPING_PTR (AudioEngine_v2, transport, transport_fields_schema_v1),
124 YAML_FIELD_MAPPING_PTR (AudioEngine_v2, pool, audio_pool_fields_schema_v1),
125 YAML_FIELD_MAPPING_PTR (
127 control_room,
128 control_room_fields_schema_v2),
129 YAML_FIELD_MAPPING_PTR (
131 sample_processor,
132 sample_processor_fields_schema_v2),
133 YAML_FIELD_MAPPING_PTR (
135 hw_in_processor,
136 hardware_processor_fields_schema_v1),
137 YAML_FIELD_MAPPING_PTR (
139 hw_out_processor,
140 hardware_processor_fields_schema_v1),
141
142 CYAML_FIELD_END
143};
144
145static const cyaml_schema_value_t engine_schema_v2 = {
146 YAML_VALUE_PTR (AudioEngine_v2, engine_fields_schema_v2),
147};
148
150engine_upgrade_from_v1 (AudioEngine_v1 * old);
151
152#endif
Control room schema.
External port schema.
Hardware processor schema.
Audio pool schema.
Sample processor schema.
Transport schema.
uint32_t sample_rate_t
Sample rate.
Definition types.h:65
Definition port.h:18
L & R port, for convenience.
Definition port.h:54
Custom types.