38class RecordingMaterializer :
public QObject
43 using RecordingMode = recording::RecordingMode;
47 structure::arrangement::ArrangerObjectUuidReference region;
48 size_t actual_lane_index{};
50 using RegionCreationResult = std::optional<CreatedRegion>;
51 using RegionCreator = std::function<RegionCreationResult (
52 structure::tracks::TrackUuid track_id,
53 units::sample_t start_position,
57 using RecordingModeProvider = std::function<RecordingMode ()>;
59 explicit RecordingMaterializer (
62 RegionCreator region_creator,
63 RecordingModeProvider recording_mode_provider,
64 QObject * parent =
nullptr);
66 ~RecordingMaterializer ()
override;
68 Q_DISABLE_COPY_MOVE (RecordingMaterializer)
71 struct TrackRecordingState
73 std::optional<structure::arrangement::ArrangerObjectUuidReference>
75 std::optional<units::sample_t> last_end_position;
76 size_t current_lane_index = 0;
79 void on_audio_data_ready (
80 structure::tracks::TrackUuid track_id,
81 const std::vector<RecordingAudioPacket> &packets);
83 std::optional<structure::arrangement::ArrangerObjectUuidReference>
84 get_or_create_region (
85 TrackRecordingState &state,
86 structure::tracks::TrackUuid track_id,
87 units::sample_t start_position,
93 void finalize_recording_macro ();
96 QPointer<undo::UndoStack> undo_stack_;
97 RegionCreator region_creator_;
98 RecordingModeProvider recording_mode_provider_;
100 std::unordered_map<structure::tracks::TrackUuid, TrackRecordingState>
110 bool recording_macro_active_ =
false;