54class Project final :
public QObject
66 clipPlaybackService CONSTANT FINAL)
74 portObservationManager CONSTANT FINAL)
77 tempoObjectManager CONSTANT FINAL)
81 using TrackUuid = structure::tracks::TrackUuid;
82 using PluginPtrVariant = plugins::PluginPtrVariant;
83 using ProjectDirectoryPathProvider =
84 std::function<std::filesystem::path (
bool for_backup)>;
93 const structure::tracks::Track::Uuid &)>;
95 using MidiInputSelectionProvider = std::function<dsp::MidiInputSelection *(
96 const structure::tracks::Track::Uuid &)>;
100 utils::AppSettings &app_settings,
101 ProjectDirectoryPathProvider project_directory_path_provider,
102 dsp::IHardwareAudioInterface &hw_interface,
103 dsp::IHardwareMidiInterface &midi_interface,
104 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager,
105 plugins::PluginHostWindowFactory plugin_host_window_provider,
106 dsp::Metronome &metronome,
107 dsp::Fader &monitor_fader,
108 QObject * parent =
nullptr);
109 ~Project () override;
110 Q_DISABLE_COPY_MOVE (Project)
116 structure::tracks::Tracklist * tracklist () const;
117 structure::scenes::ClipLauncher * clipLauncher () const;
118 structure::scenes::ClipPlaybackService * clipPlaybackService () const;
119 dsp::Transport * getTransport () const;
120 dsp::AudioEngine * engine () const;
121 dsp::TempoMapWrapper * getTempoMap () const;
122 structure::arrangement::TempoObjectManager * tempoObjectManager () const;
127 dsp::Fader &monitor_fader () const;
128 dsp::Metronome &metronome () const;
131 auto * arrangerObjectFactory ()
const
133 return arranger_object_factory_.get ();
138 friend void init_from (
140 const Project &other,
155 return project_registry_;
158 const auto &tempo_map ()
const {
return tempo_map_; }
162 audio_input_selection_provider_ = std::move (provider);
165 const auto &audio_input_selection_provider ()
const
167 return audio_input_selection_provider_;
170 void set_midi_input_selection_provider (MidiInputSelectionProvider provider)
172 midi_input_selection_provider_ = std::move (provider);
175 const auto &midi_input_selection_provider ()
const
177 return midi_input_selection_provider_;
187 structure::tracks::TrackRecordingCallback callback);
190 static constexpr auto kTempoMapKey =
"tempoMap"sv;
191 static constexpr auto kRegistryKey =
"registry"sv;
192 static constexpr auto kTransportKey =
"transport"sv;
193 static constexpr auto kAudioPoolKey =
"audioPool"sv;
194 static constexpr auto kTracklistKey =
"tracklist"sv;
195 static constexpr auto kRegionLinkGroupManagerKey =
"regionLinkGroupManager"sv;
196 static constexpr auto kPortConnectionsManagerKey =
"portConnectionsManager"sv;
197 static constexpr auto kTempoObjectManagerKey =
"tempoObjectManager"sv;
198 static constexpr auto kClipLauncherKey =
"clipLauncher"sv;
199 friend void to_json (nlohmann::json &j,
const Project &project);
200 friend void from_json (
const nlohmann::json &j,
Project &project);
204 dsp::TempoMap tempo_map_;
207 plugins::PluginHostWindowFactory plugin_host_window_provider_;
211 ProjectDirectoryPathProvider project_directory_path_provider_;
216 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager_;
238 std::unique_ptr<dsp::AudioPool>
pool_;
256 std::vector<structure::tracks::Track *>
tracks_rt_;
261 clip_playback_service_;
263 std::unique_ptr<structure::arrangement::ArrangerObjectFactory>
264 arranger_object_factory_;
268 std::unique_ptr<structure::tracks::TrackFactory> track_factory_;
272 tempo_object_manager_;
278 MidiInputSelectionProvider midi_input_selection_provider_;
280 structure::tracks::TrackRecordingCallback track_recording_callback_;
293 std::vector<dsp::graph::IProcessable *> fixed_graph_endpoints_;
301 std::vector<dsp::graph::IProcessable *> playback_graph_endpoints_;