50class Project final :
public QObject
62 clipPlaybackService CONSTANT FINAL)
70 tempoObjectManager CONSTANT FINAL)
77 friend struct PluginBuilderForDeserialization;
80 using TrackUuid = structure::tracks::TrackUuid;
81 using PluginPtrVariant = plugins::PluginPtrVariant;
82 using PluginRegistry = plugins::PluginRegistry;
83 using ProjectDirectoryPathProvider = std::function<fs::path (
bool for_backup)>;
88 ProjectDirectoryPathProvider project_directory_path_provider,
90 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager,
91 plugins::PluginHostWindowFactory plugin_host_window_provider,
94 QObject * parent =
nullptr);
96 Z_DISABLE_COPY_MOVE (Project)
112 Q_SIGNAL
void aboutToBeDeleted ();
121 auto * arrangerObjectFactory ()
const
123 return arranger_object_factory_.get ();
126 friend void init_from (
139 get_final_track_dependencies ()
const;
141 auto &get_file_audio_source_registry ()
const
143 return *file_audio_source_registry_;
145 auto &get_track_registry ()
const {
return *track_registry_; }
146 auto &get_plugin_registry ()
const {
return *plugin_registry_; }
147 auto &get_port_registry ()
const {
return *port_registry_; }
148 auto &get_param_registry ()
const {
return *param_registry_; }
149 auto &get_arranger_object_registry ()
const
151 return *arranger_object_registry_;
161 std::optional<dsp::PortPtrVariant>
164 return get_port_registry ().find_by_id (
id);
168 find_param_by_id (
const dsp::ProcessorParameter::Uuid &
id)
const
170 const auto opt_var = get_param_registry ().find_by_id (
id);
171 if (opt_var.has_value ())
173 return std::get<dsp::ProcessorParameter *> (opt_var.value ());
178 std::optional<plugins::PluginPtrVariant>
179 find_plugin_by_id (plugins::Plugin::Uuid
id)
const
181 return get_plugin_registry ().find_by_id (
id);
184 std::optional<zrythm::structure::tracks::TrackPtrVariant>
185 find_track_by_id (structure::tracks::Track::Uuid
id)
const
187 return get_track_registry ().find_by_id (
id);
190 std::optional<zrythm::structure::arrangement::ArrangerObjectPtrVariant>
191 find_arranger_object_by_id (
192 structure::arrangement::ArrangerObject::Uuid
id)
const
194 return get_arranger_object_registry ().find_by_id (
id);
197 const auto &tempo_map ()
const {
return tempo_map_; }
200 static constexpr auto kTempoMapKey =
"tempoMap"sv;
201 static constexpr auto kFileAudioSourceRegistryKey =
202 "fileAudioSourceRegistry"sv;
203 static constexpr auto kPortRegistryKey =
"portRegistry"sv;
204 static constexpr auto kParameterRegistryKey =
"paramRegistry"sv;
205 static constexpr auto kPluginRegistryKey =
"pluginRegistry"sv;
206 static constexpr auto kArrangerObjectRegistryKey =
"arrangerObjectRegistry"sv;
207 static constexpr auto kTrackRegistryKey =
"trackRegistry"sv;
208 static constexpr auto kSnapGridTimelineKey =
"snapGridTimeline"sv;
209 static constexpr auto kSnapGridEditorKey =
"snapGridEditor"sv;
210 static constexpr auto kTransportKey =
"transport"sv;
211 static constexpr auto kAudioPoolKey =
"audioPool"sv;
212 static constexpr auto kTracklistKey =
"tracklist"sv;
213 static constexpr auto kRegionLinkGroupManagerKey =
"regionLinkGroupManager"sv;
214 static constexpr auto kPortConnectionsManagerKey =
"portConnectionsManager"sv;
215 static constexpr auto kTempoObjectManagerKey =
"tempoObjectManager"sv;
216 static constexpr auto kClipLauncherKey =
"clipLauncher"sv;
217 friend void to_json (nlohmann::json &j,
const Project &project);
218 friend void from_json (
const nlohmann::json &j, Project &project);
221 utils::AppSettings &app_settings_;
222 dsp::TempoMap tempo_map_;
223 utils::QObjectUniquePtr<dsp::TempoMapWrapper> tempo_map_wrapper_;
225 plugins::PluginHostWindowFactory plugin_host_window_provider_;
227 dsp::FileAudioSourceRegistry * file_audio_source_registry_{};
228 dsp::PortRegistry * port_registry_{};
229 dsp::ProcessorParameterRegistry * param_registry_{};
230 PluginRegistry * plugin_registry_{};
231 structure::arrangement::ArrangerObjectRegistry * arranger_object_registry_{};
232 structure::tracks::TrackRegistry * track_registry_{};
234 ProjectDirectoryPathProvider project_directory_path_provider_;
239 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager_;
268 std::unique_ptr<dsp::AudioPool>
pool_;
283 boost::unordered_flat_map<
284 structure::tracks::TrackUuid,
285 structure::tracks::TrackPtrVariant>
291 clip_playback_service_;
293 std::unique_ptr<structure::arrangement::ArrangerObjectFactory>
294 arranger_object_factory_;
298 std::unique_ptr<structure::tracks::TrackFactory> track_factory_;
302 tempo_object_manager_;