Zrythm v2.0.0-alpha.1
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 = utils::to_pointer_variant<TrackVariant>;
41using TrackUuid = utils::UuidIdentifiableObject<Track>::Uuid;
42
43template <typename TrackT>
45 std::is_same_v<TrackT, MarkerTrack> || std::is_same_v<TrackT, InstrumentTrack>
46 || std::is_same_v<TrackT, MidiTrack> || std::is_same_v<TrackT, MasterTrack>
47 || std::is_same_v<TrackT, MidiGroupTrack>
48 || std::is_same_v<TrackT, AudioGroupTrack>
49 || std::is_same_v<TrackT, FolderTrack> || std::is_same_v<TrackT, MidiBusTrack>
50 || std::is_same_v<TrackT, AudioBusTrack> || std::is_same_v<TrackT, AudioTrack>
51 || std::is_same_v<TrackT, ChordTrack>
52 || std::is_same_v<TrackT, ModulatorTrack>;
53
54template <typename TrackT>
56 std::is_same_v<TrackT, AudioGroupTrack>
57 || std::is_same_v<TrackT, MidiGroupTrack>
58 || std::is_same_v<TrackT, FolderTrack>;
59
60template <typename TrackT>
62 std::is_same_v<TrackT, AudioTrack> || std::is_same_v<TrackT, ChordTrack>
63 || std::is_same_v<TrackT, InstrumentTrack>
64 || std::is_same_v<TrackT, MidiTrack>;
65
66template <typename TrackT>
68 std::is_same_v<TrackT, InstrumentTrack> || std::is_same_v<TrackT, MidiTrack>
69 || std::is_same_v<TrackT, MasterTrack>
70 || std::is_same_v<TrackT, MidiGroupTrack>
71 || std::is_same_v<TrackT, AudioGroupTrack>
72 || std::is_same_v<TrackT, MidiBusTrack>
73 || std::is_same_v<TrackT, AudioBusTrack> || std::is_same_v<TrackT, AudioTrack>
74 || std::is_same_v<TrackT, ChordTrack>;
75
76template <typename TrackT>
78 ProcessableTrack<TrackT> || std::is_same_v<TrackT, ModulatorTrack>;
79
80template <typename TrackT>
82 std::is_same_v<TrackT, InstrumentTrack> || std::is_same_v<TrackT, MidiTrack>;
83
84enum class ClipQuantizeOption : uint8_t
85{
86 Immediate,
87 NextBar,
88 NextBeat,
89 NextQuarterBeat,
90 NextEighthBeat,
91 NextSixteenthBeat,
92 NextThirtySecondBeat
93};
94Q_ENUM_NS (ClipQuantizeOption)
95}
96
97DEFINE_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 AudioClip's.
Definition audio_track.h:14
The ChordTrack class is responsible for managing the chord and scale information in the project.
Definition chord_track.h:25
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:60
typename to_pointer_variant_impl< Variant >::type to_pointer_variant
Converts a variant to a variant of pointers.