Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
track_fwd.h
1// SPDX-FileCopyrightText: © 2024-2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include "utils/uuid_identifiable_object.h"
7#include "utils/variant_helpers.h"
8
9namespace zrythm::structure::tracks
10{
11Q_NAMESPACE
12
13class Track;
14class MarkerTrack;
15class InstrumentTrack;
16class MidiTrack;
17class MasterTrack;
18class MidiGroupTrack;
19class AudioGroupTrack;
20class FolderTrack;
21class MidiBusTrack;
22class AudioBusTrack;
23class AudioTrack;
24class ChordTrack;
25class ModulatorTrack;
26
27using TrackVariant = std::variant<
40using TrackPtrVariant = to_pointer_variant<TrackVariant>;
41using TrackRefVariant = to_reference_variant<TrackVariant>;
42using TrackConstRefVariant = to_const_reference_variant<TrackVariant>;
43using TrackUniquePtrVariant = to_unique_ptr_variant<TrackVariant>;
44using OptionalTrackPtrVariant = std::optional<TrackPtrVariant>;
45
46using TrackUuid = utils::UuidIdentifiableObject<Track>::Uuid;
47
48using TrackResolver =
49 utils::UuidIdentifiablObjectResolver<TrackPtrVariant, TrackUuid>;
50
51template <typename TrackT>
53 std::is_same_v<TrackT, MarkerTrack> || std::is_same_v<TrackT, InstrumentTrack>
54 || std::is_same_v<TrackT, MidiTrack> || std::is_same_v<TrackT, MasterTrack>
55 || std::is_same_v<TrackT, MidiGroupTrack>
56 || std::is_same_v<TrackT, AudioGroupTrack>
57 || std::is_same_v<TrackT, FolderTrack> || std::is_same_v<TrackT, MidiBusTrack>
58 || std::is_same_v<TrackT, AudioBusTrack> || std::is_same_v<TrackT, AudioTrack>
59 || std::is_same_v<TrackT, ChordTrack>
60 || std::is_same_v<TrackT, ModulatorTrack>;
61
62template <typename TrackT>
64 std::is_same_v<TrackT, AudioGroupTrack>
65 || std::is_same_v<TrackT, MidiGroupTrack>
66 || std::is_same_v<TrackT, FolderTrack>;
67
68template <typename TrackT>
70 std::is_same_v<TrackT, AudioTrack> || std::is_same_v<TrackT, ChordTrack>
71 || std::is_same_v<TrackT, InstrumentTrack>
72 || std::is_same_v<TrackT, MidiTrack>;
73
74template <typename TrackT>
76 std::is_same_v<TrackT, InstrumentTrack> || std::is_same_v<TrackT, MidiTrack>
77 || std::is_same_v<TrackT, MasterTrack>
78 || std::is_same_v<TrackT, MidiGroupTrack>
79 || std::is_same_v<TrackT, AudioGroupTrack>
80 || std::is_same_v<TrackT, MidiBusTrack>
81 || std::is_same_v<TrackT, AudioBusTrack> || std::is_same_v<TrackT, AudioTrack>
82 || std::is_same_v<TrackT, ChordTrack>;
83
84template <typename TrackT>
86 ProcessableTrack<TrackT> || std::is_same_v<TrackT, ModulatorTrack>;
87
88template <typename TrackT>
90 std::is_same_v<TrackT, InstrumentTrack> || std::is_same_v<TrackT, MidiTrack>;
91
92enum class ClipQuantizeOption : uint8_t
93{
94 Immediate,
95 NextBar,
96 NextBeat,
97 NextQuarterBeat,
98 NextEighthBeat,
99 NextSixteenthBeat,
100 NextThirtySecondBeat
101};
102Q_ENUM_NS (ClipQuantizeOption)
103}
104
105DEFINE_UUID_HASH_SPECIALIZATION (zrythm::structure::tracks::TrackUuid);
An audio bus track that can be processed and has channels.
A track that can be folded and can be a target for other tracks.
Track containing AudioRegion's.
Definition audio_track.h:15
The ChordTrack class is responsible for managing the chord and scale information in the project.
Definition chord_track.h:21
A track that can contain other tracks.
A track that processes MIDI data.
A track that can host modulator plugins.
Represents a track in the project.
Definition track.h:54