20class ArrangerObjectCreator :
public QObject
24 QML_UNCREATABLE (
"One instance per project")
27 explicit ArrangerObjectCreator (
32 QObject * parent =
nullptr)
33 : QObject (parent), arranger_object_factory_ (arranger_object_factory),
34 snap_grid_timeline_ (snap_grid_timeline),
35 snap_grid_editor_ (snap_grid_editor), undo_stack_ (undo_stack)
48 structure::arrangement::TempoObject::CurveType curveType,
52 addTimeSignatureObject (
68 arranger_object_factory_
71 .build_in_registry ();
81 addEmptyAutomationRegion (
97 dsp::FileAudioSourceUuidReference clip_id,
100 auto obj_ref = arranger_object_factory_.create_audio_region_with_clip (
101 std::move (clip_id), start_ticks);
102 add_laned_object (track, lane, obj_ref);
112 arranger_object_factory_
114 .with_start_ticks (start_ticks)
115 .with_scale (std::move (scale))
116 .build_in_registry ();
123 structure::arrangement::ArrangerObjectUuidReference
124 add_audio_region_for_recording (
133 initial_frames, utils::audio::BitDepth::BIT_DEPTH_32, clip_name,
135 add_laned_object (track, lane, region_ref);
139 Q_INVOKABLE structure::arrangement::AudioRegion * addAudioRegionFromFile (
140 structure::tracks::Track * track,
141 structure::tracks::TrackLane * lane,
142 const QString &absPath,
145 auto ar_ref = arranger_object_factory_.create_audio_region_from_file (
146 absPath, startTicks);
147 add_laned_object (*track, *lane, ar_ref);
148 return ar_ref.get_object_as<structure::arrangement::AudioRegion> ();
151 Q_INVOKABLE structure::arrangement::AudioRegion *
152 addAudioRegionToClipSlotFromFile (
153 structure::tracks::Track * track,
154 structure::scenes::ClipSlot * clipSlot,
155 const QString &absPath);
156 Q_INVOKABLE structure::arrangement::AudioRegion *
157 addMidiRegionToClipSlotFromFile (
158 structure::tracks::Track * track,
159 structure::scenes::ClipSlot * clipSlot,
160 const QString &absPath);
166 Q_INVOKABLE structure::arrangement::MidiRegion *
184 const QString &absolutePath,
199 return add_editor_object (*region, startTicks, value);
205 const int chordIndex)
208 return add_editor_object (*region, startTicks, chordIndex);
215 void add_laned_object (
218 structure::arrangement::ArrangerObjectUuidReference obj_ref);
220 void add_object_to_clip_slot (
223 structure::arrangement::ArrangerObjectUuidReference obj_ref);
233 template <structure::arrangement::RegionObject RegionT>
234 auto add_editor_object (
237 std::variant<int, double> value) -> RegionT::ArrangerObjectChildType *
238 requires (!std::is_same_v<RegionT, structure::arrangement::AudioRegion>)
240 using ChildT =
typename RegionT::ArrangerObjectChildType;
245 auto obj = obj_ref.template get_object_as<ChildT> ();
250 structure::arrangement::ArrangerObjectFactory &arranger_object_factory_;
251 dsp::SnapGrid &snap_grid_timeline_;
252 dsp::SnapGrid &snap_grid_editor_;
253 undo::UndoStack &undo_stack_;
Q_INVOKABLE structure::arrangement::MidiRegion * addMidiRegionFromMidiFile(structure::tracks::Track *track, structure::tracks::TrackLane *lane, const QString &absolutePath, double startTicks, int midiTrackIndex)
Creates a MIDI region at lane from MIDI file path abs_path starting at startTicks.
Q_INVOKABLE structure::arrangement::MidiRegion * addMidiRegionFromChordDescriptor(structure::tracks::Track *track, structure::tracks::TrackLane *lane, const dsp::ChordDescriptor &descr, double startTicks)
Creates a MIDI region at lane from the given descr starting at startTicks.