tracktion-engine
3.0-10-g034fdde4aa5
Tracktion Engine — High level data model for audio applications
« « « Anklang Documentation
Loading...
Searching...
No Matches
tracktion_engine
tracktion_engine_playback.cpp
Go to the documentation of this file.
1
/*
2
,--. ,--. ,--. ,--.
3
,-' '-.,--.--.,--,--.,---.| |,-.,-' '-.`--' ,---. ,--,--, Copyright 2024
4
'-. .-'| .--' ,-. | .--'| /'-. .-',--.| .-. || \ Tracktion Software
5
| | | | \ '-' \ `--.| \ \ | | | |' '-' '| || | Corporation
6
`---' `--' `--`--'`---'`--'`--' `---' `--' `---' `--''--' www.tracktion.com
7
8
Tracktion Engine uses a GPL/commercial licence - see LICENCE.md for details.
9
*/
10
11
#if ! JUCE_PROJUCER_LIVE_BUILD
12
13
#include "3rd_party/magic_enum/tracktion_magic_enum.hpp"
14
15
#include <
shared_mutex
>
16
17
#if TRACKTION_ENABLE_ABLETON_LINK
18
#include <
juce_core/system/juce_TargetPlatform.h
>
19
20
// Ableton Link has to be included here before ReWire as ReWire seems to mess with some Windows defs
21
#if (JUCE_WINDOWS || JUCE_MAC || JUCE_LINUX || JUCE_ANDROID)
22
#if JUCE_MAC
23
#define LINK_PLATFORM_MACOSX 1
24
#endif
25
26
#if JUCE_WINDOWS
27
#define LINK_PLATFORM_WINDOWS 1
28
#endif
29
30
#if JUCE_LINUX || JUCE_ANDROID
31
#define LINK_PLATFORM_LINUX 1
32
#endif
33
34
//==========================================================================
35
// To use Link on desktop and Android, grab the open source repo from github
36
// and add these folders to your project's header search paths:
37
// [relative path from project]/AbletonLink/include
38
// [relative path from project]/AbletonLink/modules/asio-standalone/asio/include
39
//
40
// If you're building on Android, you will also need the ifaddrs header and source
41
// from here: https://github.com/libpd/abl_link/tree/master/external/android-ifaddrs
42
// Add the folder they are in to your header search paths also.
43
44
#if JUCE_CLANG
// TODO: Ignore conversion errors on Windows too
45
#pragma clang diagnostic push
46
#pragma clang diagnostic ignored "-Wconversion"
47
#pragma clang diagnostic ignored "-Wshadow"
48
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
49
#endif
50
51
#if JUCE_ANDROID
52
#include <ifaddrs.h>
53
#endif
54
55
#include "../3rd_party/choc/platform/choc_DisableAllWarnings.h"
56
#include <ableton/Link.hpp>
57
#include <ableton/link/HostTimeFilter.hpp>
58
#include "../3rd_party/choc/platform/choc_ReenableAllWarnings.h"
59
60
#if JUCE_ANDROID
61
#include <ifaddrs.cpp>
62
#endif
63
64
#if JUCE_CLANG
65
#pragma clang diagnostic pop
66
#endif
67
68
#undef NOMINMAX
69
#endif
70
#endif
71
72
#if TRACKTION_ENABLE_REWIRE
73
extern
"C"
74
{
75
#define Button CarbonButton
76
#define Component CarbonComponent
77
#define MemoryBlock CarbonMemoryBlock
78
79
#if MAC
80
#pragma clang diagnostic push
81
#pragma clang diagnostic ignored "-Wdeprecated"
82
#pragma clang diagnostic ignored "-Wconversion"
83
#endif
84
85
#include "ReWire/ReWireSDK/ReWire.c"
86
#include "ReWire/ReWireSDK/ReWireAPI.c"
87
#include "ReWire/ReWireSDK/ReWireDeviceAPI.c"
88
89
#if MAC
90
#pragma clang diagnostic pop
91
#endif
92
93
#undef Button
94
#undef Component
95
#undef MemoryBlock
96
#undef check
97
}
98
#endif
99
100
#define JUCE_CORE_INCLUDE_JNI_HELPERS 1
// Required for Ableton Link on Android
101
102
#ifdef __GNUC__
103
#pragma GCC diagnostic push
104
#pragma GCC diagnostic ignored "-Wfloat-equal"
105
#endif
106
107
//==============================================================================
108
//==============================================================================
109
#include <
tracktion_core/tracktion_TestConfig.h
>
110
111
#include <
tracktion_graph/tracktion_graph.h
>
112
113
#include <
tracktion_graph/tracktion_graph/tracktion_TestUtilities.h
>
114
#include <
tracktion_graph/tracktion_graph/tracktion_TestNodes.h
>
115
#include <
tracktion_graph/tracktion_graph/tracktion_PlayHead.h
>
116
117
//==============================================================================
118
//==============================================================================
119
#include "
tracktion_engine.h
"
120
121
122
//==============================================================================
123
//==============================================================================
124
#undef VERSION
125
#define PACKAGE ""
126
#define VERSION "0.2.2"
127
#define CPU_CLIPS_NEGATIVE 0
128
#define CPU_CLIPS_POSITIVE 0
129
130
#define ENABLE_SINC_BEST_CONVERTER
131
#define ENABLE_SINC_MEDIUM_CONVERTER
132
#define ENABLE_SINC_FAST_CONVERTER
133
134
#include "../3rd_party/choc/platform/choc_DisableAllWarnings.h"
135
136
#if __GNUC__
137
#pragma GCC diagnostic ignored "-Wpedantic"
138
#endif
139
140
namespace
tracktion
141
{
142
namespace
src
143
{
144
#include "../3rd_party/libsamplerate/samplerate.h"
145
#include "../3rd_party/libsamplerate/src_linear.c"
146
#include "../3rd_party/libsamplerate/src_sinc.c"
147
#include "../3rd_party/libsamplerate/src_zoh.c"
148
#include "../3rd_party/libsamplerate/samplerate.c"
149
}
150
}
151
152
#undef PACKAGE
153
#undef VERSION
154
#undef CPU_CLIPS_NEGATIVE
155
#undef CPU_CLIPS_POSITIVE
156
157
#undef ENABLE_SINC_BEST_CONVERTER
158
#undef ENABLE_SINC_MEDIUM_CONVERTER
159
#undef ENABLE_SINC_FAST_CONVERTER
160
161
#include "../3rd_party/choc/platform/choc_ReenableAllWarnings.h"
162
#include "../3rd_party/crill/seqlock_object.h"
163
164
//==============================================================================
165
#if JUCE_LINUX || JUCE_WINDOWS
166
#include <
cstdarg
>
167
#endif
168
169
#include <
thread
>
170
using namespace
std::literals
;
171
172
#include "
playback/tracktion_MPEStartTrimmer.h
"
173
174
#include "
playback/graph/tracktion_TracktionEngineNode.h
"
175
#include "
playback/graph/tracktion_TracktionEngineNode.cpp
"
176
#include "
playback/graph/tracktion_TracktionNodePlayer.h
"
177
#include "
playback/graph/tracktion_MultiThreadedNodePlayer.h
"
178
179
#include "
playback/graph/tracktion_BenchmarkUtilities.h
"
180
181
#include "
playback/graph/tracktion_TrackMutingNode.h
"
182
#include "
playback/graph/tracktion_ArrangerLauncherSwitchingNode.h
"
183
#include "
playback/graph/tracktion_AuxSendNode.h
"
184
#include "
playback/graph/tracktion_ClickNode.h
"
185
#include "
playback/graph/tracktion_CombiningNode.h
"
186
#include "
playback/graph/tracktion_ContainerClipNode.h
"
187
#include "
playback/graph/tracktion_DynamicOffsetNode.h
"
188
#include "
playback/graph/tracktion_FadeInOutNode.h
"
189
#include "
playback/graph/tracktion_PluginNode.h
"
190
#include "
playback/graph/tracktion_InsertSendNode.h
"
191
#include "
playback/graph/tracktion_LevelMeasurerProcessingNode.h
"
192
#include "
playback/graph/tracktion_LevelMeasuringNode.h
"
193
#include "
playback/graph/tracktion_LiveMidiInjectingNode.h
"
194
#include "
playback/graph/tracktion_LiveMidiOutputNode.h
"
195
#include "
playback/graph/tracktion_LoopingMidiNode.h
"
196
#include "
playback/graph/tracktion_MelodyneNode.h
"
197
#include "
playback/graph/tracktion_MidiNode.h
"
198
#include "
playback/graph/tracktion_MidiOutputDeviceInstanceInjectingNode.h
"
199
#include "
playback/graph/tracktion_WaveNode.h
"
200
201
#include "
playback/graph/tracktion_PlayHeadPositionNode.h
"
202
#include "
playback/graph/tracktion_ModifierNode.h
"
203
#include "
playback/graph/tracktion_RackInstanceNode.h
"
204
#include "
playback/graph/tracktion_RackNode.h
"
205
#include "
playback/graph/tracktion_RackReturnNode.h
"
206
207
#include "
playback/graph/tracktion_TimedMutingNode.h
"
208
#include "
playback/graph/tracktion_TimeStretchingWaveNode.h
"
209
#include "
playback/graph/tracktion_TrackMidiInputDeviceNode.h
"
210
#include "
playback/graph/tracktion_TrackWaveInputDeviceNode.h
"
211
#include "
playback/graph/tracktion_SharedLevelMeasuringNode.h
"
212
#include "
playback/graph/tracktion_SlotControlNode.h
"
213
#include "
playback/graph/tracktion_SpeedRampWaveNode.h
"
214
#include "
playback/graph/tracktion_MidiInputDeviceNode.h
"
215
#include "
playback/graph/tracktion_HostedMidiInputDeviceNode.h
"
216
#include "
playback/graph/tracktion_WaveInputDeviceNode.h
"
217
218
#include "
playback/graph/tracktion_ArrangerLauncherSwitchingNode.cpp
"
219
#include "
playback/graph/tracktion_AuxSendNode.cpp
"
220
#include "
playback/graph/tracktion_ClickNode.cpp
"
221
#include "
playback/graph/tracktion_CombiningNode.cpp
"
222
#include "
playback/graph/tracktion_ContainerClipNode.cpp
"
223
#include "
playback/graph/tracktion_DynamicOffsetNode.cpp
"
224
#include "
playback/graph/tracktion_FadeInOutNode.cpp
"
225
#include "
playback/graph/tracktion_InsertSendNode.cpp
"
226
#include "
playback/graph/tracktion_LevelMeasuringNode.cpp
"
227
#include "
playback/graph/tracktion_LiveMidiInjectingNode.cpp
"
228
#include "
playback/graph/tracktion_LiveMidiOutputNode.cpp
"
229
#include "
playback/graph/tracktion_LoopingMidiNode.cpp
"
230
//#include "playback/graph/tracktion_LoopingMidiNode.test.cpp"
231
#include "
playback/graph/tracktion_MelodyneNode.cpp
"
232
#include "
playback/graph/tracktion_MidiNode.cpp
"
233
#include "
playback/graph/tracktion_MidiOutputDeviceInstanceInjectingNode.cpp
"
234
#include "
playback/graph/tracktion_WaveNode.cpp
"
235
236
#include "
playback/graph/tracktion_RackInstanceNode.cpp
"
237
#include "
playback/graph/tracktion_RackNode.cpp
"
238
//#include "playback/graph/tracktion_RackNode.test.cpp"
239
#include "
playback/graph/tracktion_RackReturnNode.cpp
"
240
#include "
playback/graph/tracktion_PluginNode.cpp
"
241
//#include "playback/graph/tracktion_PluginNodeBenchmarks.test.cpp"
242
#include "
playback/graph/tracktion_ModifierNode.cpp
"
243
244
#include "
playback/graph/tracktion_TrackMutingNode.cpp
"
245
#include "
playback/graph/tracktion_TimedMutingNode.cpp
"
246
#include "
playback/graph/tracktion_TimeStretchingWaveNode.cpp
"
247
#include "
playback/graph/tracktion_TrackMidiInputDeviceNode.cpp
"
248
#include "
playback/graph/tracktion_TrackWaveInputDeviceNode.cpp
"
249
#include "
playback/graph/tracktion_SharedLevelMeasuringNode.cpp
"
250
#include "
playback/graph/tracktion_SlotControlNode.cpp
"
251
#include "
playback/graph/tracktion_SpeedRampWaveNode.cpp
"
252
#include "
playback/graph/tracktion_MidiInputDeviceNode.cpp
"
253
#include "
playback/graph/tracktion_HostedMidiInputDeviceNode.cpp
"
254
#include "
playback/graph/tracktion_WaveInputDeviceNode.cpp
"
255
256
#include "
playback/graph/tracktion_EditNodeBuilder.h
"
257
#include "
playback/graph/tracktion_EditNodeBuilder.cpp
"
258
//#include "playback/graph/tracktion_EditNodeBuilder.test.cpp"
259
260
#include "
playback/graph/tracktion_NodeRenderContext.h
"
261
#include "
playback/graph/tracktion_NodeRenderContext.cpp
"
262
263
//#include "playback/graph/tracktion_NodeRendering.test.cpp"
264
265
//#include "playback/graph/tracktion_WaveNode.test.cpp"
266
//#include "playback/graph/tracktion_MidiNode.test.cpp"
267
//#include "playback/graph/tracktion_RackBenchmarks.test.cpp"
268
269
#include "
playback/tracktion_DeviceManager.cpp
"
270
#include "
playback/tracktion_EditPlaybackContext.cpp
"
271
#include "
playback/tracktion_EditInputDevices.cpp
"
272
#include "
playback/tracktion_LevelMeasurer.cpp
"
273
#include "
playback/tracktion_MidiNoteDispatcher.cpp
"
274
//#include "playback/tracktion_TransportControl.test.cpp"
275
#include "
playback/tracktion_TransportControl.cpp
"
276
#include "
playback/tracktion_AbletonLink.cpp
"
277
278
#include "
playback/audionodes/tracktion_AudioNode.h
"
279
#include "
playback/audionodes/tracktion_CombiningAudioNode.h
"
280
#include "
playback/audionodes/tracktion_WaveAudioNode.h
"
281
#include "
playback/audionodes/tracktion_TrackCompAudioNode.h
"
282
#include "
playback/audionodes/tracktion_SpeedRampAudioNode.h
"
283
#include "
playback/audionodes/tracktion_PluginAudioNode.h
"
284
#include "
playback/audionodes/tracktion_FadeInOutAudioNode.h
"
285
286
#include "
playback/audionodes/tracktion_AudioNode.cpp
"
287
#include "
playback/audionodes/tracktion_FadeInOutAudioNode.cpp
"
288
#include "
playback/audionodes/tracktion_WaveAudioNode.cpp
"
289
#include "
playback/audionodes/tracktion_CombiningAudioNode.cpp
"
290
291
#include "
playback/devices/tracktion_InputDevice.cpp
"
292
#include "
playback/devices/tracktion_MidiInputDevice.cpp
"
293
#include "
playback/devices/tracktion_PhysicalMidiInputDevice.cpp
"
294
#include "
playback/devices/tracktion_VirtualMidiInputDevice.cpp
"
295
#include "
playback/devices/tracktion_MidiOutputDevice.cpp
"
296
#include "
playback/devices/tracktion_OutputDevice.cpp
"
297
#include "
playback/devices/tracktion_WaveDeviceDescription.cpp
"
298
#include "
playback/devices/tracktion_WaveInputDevice.cpp
"
299
#include "
playback/devices/tracktion_WaveOutputDevice.cpp
"
300
301
#include "
playback/tracktion_HostedAudioDevice.cpp
"
302
303
#ifdef JUCE_MSVC
304
#pragma warning (disable: 4996)
305
#endif
306
307
static
inline
void
sprintf
(
char
* dest,
size_t
maxLength,
const
char
* format, ...) noexcept
308
{
309
va_list
list
;
310
va_start
(
list
, format);
311
312
#if JUCE_WINDOWS
313
_vsnprintf (dest, maxLength, format,
list
);
314
#else
315
vsnprintf
(dest, maxLength, format,
list
);
316
#endif
317
}
318
319
#include "
control_surfaces/tracktion_ControlSurface.cpp
"
320
#include "
control_surfaces/tracktion_ExternalControllerManager.cpp
"
321
#include "
control_surfaces/tracktion_ExternalController.cpp
"
322
#include "
control_surfaces/tracktion_CustomControlSurface.cpp
"
323
324
#if TRACKTION_ENABLE_CONTROL_SURFACES
325
#if TRACKTION_ENABLE_CONTROL_SURFACE_MACKIEC4
326
namespace
tracktion
{
inline
namespace
engine
327
{
328
#include "Mackie/C4Translator.h"
329
#include "Mackie/C4Translator.cpp"
330
}}
// namespace tracktion { inline namespace engine
331
#endif
332
333
#include "control_surfaces/types/tracktion_AlphaTrack.cpp"
334
#if TRACKTION_ENABLE_CONTROL_SURFACE_MACKIEC4
335
#include "control_surfaces/types/tracktion_MackieC4.cpp"
336
#endif
337
#include "control_surfaces/types/tracktion_MackieMCU.cpp"
338
#include "control_surfaces/types/tracktion_MackieXT.cpp"
339
#include "control_surfaces/types/tracktion_IconProG2.cpp"
340
#include "control_surfaces/types/tracktion_NovationRemoteSl.cpp"
341
#include "control_surfaces/types/tracktion_RemoteSLCompact.cpp"
342
#include "control_surfaces/types/tracktion_Tranzport.cpp"
343
#endif
344
345
#if TRACKTION_ENABLE_CONTROL_SURFACES
346
#include "control_surfaces/types/tracktion_NovationAutomap.cpp"
347
#endif
348
349
#ifdef __GNUC__
350
#pragma GCC diagnostic pop
351
#endif
352
353
#endif
cstdarg
sprintf
sprintf
juce_TargetPlatform.h
std::list
std::literals
tracktion
Definition
tracktion_AudioReader.h:23
shared_mutex
thread
tracktion_AbletonLink.cpp
tracktion_ArrangerLauncherSwitchingNode.cpp
tracktion_ArrangerLauncherSwitchingNode.h
tracktion_AudioNode.cpp
tracktion_AudioNode.h
tracktion_AuxSendNode.cpp
tracktion_AuxSendNode.h
tracktion_BenchmarkUtilities.h
tracktion_ClickNode.cpp
tracktion_ClickNode.h
tracktion_CombiningAudioNode.cpp
tracktion_CombiningAudioNode.h
tracktion_CombiningNode.cpp
tracktion_CombiningNode.h
tracktion_ContainerClipNode.cpp
tracktion_ContainerClipNode.h
tracktion_ControlSurface.cpp
tracktion_CustomControlSurface.cpp
tracktion_DeviceManager.cpp
tracktion_DynamicOffsetNode.cpp
tracktion_DynamicOffsetNode.h
tracktion_EditInputDevices.cpp
tracktion_EditNodeBuilder.cpp
tracktion_EditNodeBuilder.h
tracktion_EditPlaybackContext.cpp
tracktion_ExternalControllerManager.cpp
tracktion_ExternalController.cpp
tracktion_FadeInOutAudioNode.cpp
tracktion_FadeInOutAudioNode.h
tracktion_FadeInOutNode.cpp
tracktion_FadeInOutNode.h
tracktion_HostedAudioDevice.cpp
tracktion_HostedMidiInputDeviceNode.cpp
tracktion_HostedMidiInputDeviceNode.h
tracktion_InputDevice.cpp
tracktion_InsertSendNode.cpp
tracktion_InsertSendNode.h
tracktion_LevelMeasurerProcessingNode.h
tracktion_LevelMeasurer.cpp
tracktion_LevelMeasuringNode.cpp
tracktion_LevelMeasuringNode.h
tracktion_LiveMidiInjectingNode.cpp
tracktion_LiveMidiInjectingNode.h
tracktion_LiveMidiOutputNode.cpp
tracktion_LiveMidiOutputNode.h
tracktion_LoopingMidiNode.cpp
tracktion_LoopingMidiNode.h
tracktion_MPEStartTrimmer.h
tracktion_MelodyneNode.cpp
tracktion_MelodyneNode.h
tracktion_MidiInputDeviceNode.cpp
tracktion_MidiInputDeviceNode.h
tracktion_MidiInputDevice.cpp
tracktion_MidiNode.cpp
tracktion_MidiNode.h
tracktion_MidiNoteDispatcher.cpp
tracktion_MidiOutputDeviceInstanceInjectingNode.cpp
tracktion_MidiOutputDeviceInstanceInjectingNode.h
tracktion_MidiOutputDevice.cpp
tracktion_ModifierNode.cpp
tracktion_ModifierNode.h
tracktion_NodeRenderContext.cpp
tracktion_NodeRenderContext.h
tracktion_OutputDevice.cpp
tracktion_PhysicalMidiInputDevice.cpp
tracktion_PlayHeadPositionNode.h
tracktion_PluginAudioNode.h
tracktion_PluginNode.cpp
tracktion_PluginNode.h
tracktion_RackInstanceNode.cpp
tracktion_RackInstanceNode.h
tracktion_RackNode.cpp
tracktion_RackNode.h
tracktion_RackReturnNode.cpp
tracktion_RackReturnNode.h
tracktion_SharedLevelMeasuringNode.cpp
tracktion_SharedLevelMeasuringNode.h
tracktion_SlotControlNode.cpp
tracktion_SlotControlNode.h
tracktion_SpeedRampAudioNode.h
tracktion_SpeedRampWaveNode.cpp
tracktion_SpeedRampWaveNode.h
tracktion_TestConfig.h
tracktion_TestNodes.h
tracktion_TimeStretchingWaveNode.cpp
tracktion_TimeStretchingWaveNode.h
tracktion_TimedMutingNode.cpp
tracktion_TimedMutingNode.h
tracktion_TrackCompAudioNode.h
tracktion_TrackMidiInputDeviceNode.cpp
tracktion_TrackMidiInputDeviceNode.h
tracktion_TrackMutingNode.cpp
tracktion_TrackMutingNode.h
tracktion_TrackWaveInputDeviceNode.cpp
tracktion_TrackWaveInputDeviceNode.h
tracktion_TracktionEngineNode.cpp
tracktion_TracktionEngineNode.h
tracktion_TracktionNodePlayer.h
tracktion_TransportControl.cpp
tracktion_VirtualMidiInputDevice.cpp
tracktion_WaveAudioNode.cpp
tracktion_WaveAudioNode.h
tracktion_WaveDeviceDescription.cpp
tracktion_WaveInputDeviceNode.cpp
tracktion_WaveInputDeviceNode.h
tracktion_WaveInputDevice.cpp
tracktion_WaveNode.cpp
tracktion_WaveNode.h
tracktion_WaveOutputDevice.cpp
tracktion_MultiThreadedNodePlayer.h
tracktion_engine.h
tracktion_PlayHead.h
tracktion_TestUtilities.h
tracktion_graph.h
va_start
va_start
va_list
vsnprintf
vsnprintf
« « « Anklang Documentation