6#include "utils/debug.h"
7#include "utils/units.h"
8#include "utils/uuid_identifiable_object.h"
12namespace zrythm::structure::arrangement
32 std::is_same_v<T, AudioClip> || std::is_same_v<T, MidiClip>
33 || std::is_same_v<T, AutomationClip> || std::is_same_v<T, ChordClip>;
37 ClipObject<T> || std::is_same_v<T, ScaleObject> || std::is_same_v<T, Marker>
38 || std::is_same_v<T, TempoObject> || std::is_same_v<T, TimeSignatureObject>;
42 std::is_same_v<T, MidiClip> || std::is_same_v<T, AudioClip>;
55 std::is_same_v<T, MidiControlEvent> || std::is_same_v<T, MidiNote>
56 || std::is_same_v<T, AutomationPoint> || std::is_same_v<T, ChordObject>;
58using ArrangerObjectVariant = std::variant<
72using ArrangerObjectPtrVariant =
89template <TimelineObject ObjectT>
90[[gnu::hot]] units::sample_t
91timeline_frames_to_local (
93 units::sample_t timeline_frames,
96 const auto &tempo_map = obj.get_tempo_map ();
97 const auto object_position_frames =
98 tempo_map.tick_to_samples_rounded (obj.position ()->asTick ());
103 auto diff_frames = timeline_frames - object_position_frames;
106 if (timeline_frames == obj.get_end_position_samples (
true))
109 const auto * warp = obj.contentWarp ();
110 const auto loop_end_frames =
111 warp->contentToTimelineSamples (obj.loopEndPosition ()->asTick ())
112 - object_position_frames;
113 const auto clip_start_frames =
114 warp->contentToTimelineSamples (obj.clipStartPosition ()->asTick ())
115 - object_position_frames;
116 const auto loop_start_frames =
117 warp->contentToTimelineSamples (obj.loopStartPosition ()->asTick ())
118 - object_position_frames;
119 const auto loop_size =
120 max (units::samples (0), loop_end_frames - loop_start_frames);
121 assert (loop_size > units::samples (0));
123 diff_frames += clip_start_frames;
125 while (diff_frames >= loop_end_frames)
127 diff_frames -= loop_size;
134 return timeline_frames - object_position_frames;
139DEFINE_UUID_HASH_SPECIALIZATION (
140 zrythm::structure::arrangement::ArrangerObjectUuid)
Base class for all objects in the arranger.
A clip for playing back audio samples.
Audio source for an AudioClip.
Represents an automation clip, which contains a collection of automation points.
An automation point inside an AutomationTrack.
A chord placed inside a ChordClip on the chord track.
Intermediate base class for all clip types.
Marker for the MarkerTrack.
A Clip containing MIDI events.
A MIDI note inside a Clip shown in the piano roll.
typename to_pointer_variant_impl< Variant >::type to_pointer_variant
Converts a variant to a variant of pointers.