6#include "utils/debug.h"
7#include "utils/units.h"
8#include "utils/uuid_identifiable_object.h"
10namespace zrythm::structure::arrangement
29 std::is_same_v<T, AudioRegion> || std::is_same_v<T, MidiRegion>
30 || std::is_same_v<T, AutomationRegion> || std::is_same_v<T, ChordRegion>;
34 RegionObject<T> || std::is_same_v<T, ScaleObject> || std::is_same_v<T, Marker>
35 || std::is_same_v<T, TempoObject> || std::is_same_v<T, TimeSignatureObject>;
39 std::is_same_v<T, MidiRegion> || std::is_same_v<T, AudioRegion>;
52 std::is_same_v<T, MidiControlEvent> || std::is_same_v<T, MidiNote>
53 || std::is_same_v<T, AutomationPoint> || std::is_same_v<T, ChordObject>;
55using ArrangerObjectVariant = std::variant<
69using ArrangerObjectPtrVariant =
86template <TimelineObject ObjectT>
87[[gnu::hot]] units::sample_t
88timeline_frames_to_local (
90 units::sample_t timeline_frames,
93 const auto object_position_frames =
94 units::samples (obj.position ()->samples ());
99 auto diff_frames = timeline_frames - object_position_frames;
102 if (timeline_frames == obj.bounds ()->get_end_position_samples (
true))
105 const auto loop_end_frames =
106 units::samples (obj.loopRange ()->loopEndPosition ()->samples ());
107 const auto clip_start_frames =
108 units::samples (obj.loopRange ()->clipStartPosition ()->samples ());
109 const auto loop_size = obj.loopRange ()->get_loop_length_in_frames ();
110 assert (loop_size > units::samples (0));
112 diff_frames += clip_start_frames;
114 while (diff_frames >= loop_end_frames)
116 diff_frames -= loop_size;
123 return timeline_frames - object_position_frames;
126template <BoundedObject ObjectT>
128get_object_bounds (
const ObjectT &obj)
130 return obj.bounds ();
134DEFINE_UUID_HASH_SPECIALIZATION (
135 zrythm::structure::arrangement::ArrangerObjectUuid)
Base class for all objects in the arranger.
A region for playing back audio samples.
Audio source for an AudioRegion.
An automation point inside an AutomationTrack.
Represents an automation region, which contains a collection of automation points.
The ChordObject class represents a chord inside the chord editor.
Marker for the MarkerTrack.
A MIDI note inside a Region shown in the piano roll.
A Region containing MIDI events.
typename to_pointer_variant_impl< Variant >::type to_pointer_variant
Converts a variant to a variant of pointers.