47class Project final :
public QObject
59 clipPlaybackService CONSTANT FINAL)
67 tempoObjectManager CONSTANT FINAL)
70 friend struct PluginBuilderForDeserialization;
73 using TrackUuid = structure::tracks::TrackUuid;
74 using PluginPtrVariant = plugins::PluginPtrVariant;
75 using PluginRegistry = plugins::PluginRegistry;
76 using ProjectDirectoryPathProvider = std::function<fs::path (
bool for_backup)>;
81 ProjectDirectoryPathProvider project_directory_path_provider,
83 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager,
84 plugins::PluginHostWindowFactory plugin_host_window_provider,
87 QObject * parent =
nullptr);
89 Z_DISABLE_COPY_MOVE (Project)
110 auto * arrangerObjectFactory ()
const
112 return arranger_object_factory_.get ();
115 friend void init_from (
117 const Project &other,
128 get_final_track_dependencies ()
const;
130 auto &get_file_audio_source_registry ()
const
132 return *file_audio_source_registry_;
134 auto &get_track_registry ()
const {
return *track_registry_; }
135 auto &get_plugin_registry ()
const {
return *plugin_registry_; }
136 auto &get_port_registry ()
const {
return *port_registry_; }
137 auto &get_param_registry ()
const {
return *param_registry_; }
138 auto &get_arranger_object_registry ()
const
140 return *arranger_object_registry_;
150 std::optional<dsp::PortPtrVariant>
153 return get_port_registry ().find_by_id (
id);
157 find_param_by_id (
const dsp::ProcessorParameter::Uuid &
id)
const
159 const auto opt_var = get_param_registry ().find_by_id (
id);
160 if (opt_var.has_value ())
162 return std::get<dsp::ProcessorParameter *> (opt_var.value ());
167 std::optional<plugins::PluginPtrVariant>
168 find_plugin_by_id (plugins::Plugin::Uuid
id)
const
170 return get_plugin_registry ().find_by_id (
id);
173 std::optional<zrythm::structure::tracks::TrackPtrVariant>
174 find_track_by_id (structure::tracks::Track::Uuid
id)
const
176 return get_track_registry ().find_by_id (
id);
179 std::optional<zrythm::structure::arrangement::ArrangerObjectPtrVariant>
180 find_arranger_object_by_id (
181 structure::arrangement::ArrangerObject::Uuid
id)
const
183 return get_arranger_object_registry ().find_by_id (
id);
186 const auto &tempo_map ()
const {
return tempo_map_; }
189 static constexpr auto kTempoMapKey =
"tempoMap"sv;
190 static constexpr auto kFileAudioSourceRegistryKey =
191 "fileAudioSourceRegistry"sv;
192 static constexpr auto kPortRegistryKey =
"portRegistry"sv;
193 static constexpr auto kParameterRegistryKey =
"paramRegistry"sv;
194 static constexpr auto kPluginRegistryKey =
"pluginRegistry"sv;
195 static constexpr auto kArrangerObjectRegistryKey =
"arrangerObjectRegistry"sv;
196 static constexpr auto kTrackRegistryKey =
"trackRegistry"sv;
197 static constexpr auto kTransportKey =
"transport"sv;
198 static constexpr auto kAudioPoolKey =
"audioPool"sv;
199 static constexpr auto kTracklistKey =
"tracklist"sv;
200 static constexpr auto kRegionLinkGroupManagerKey =
"regionLinkGroupManager"sv;
201 static constexpr auto kPortConnectionsManagerKey =
"portConnectionsManager"sv;
202 static constexpr auto kTempoObjectManagerKey =
"tempoObjectManager"sv;
203 static constexpr auto kClipLauncherKey =
"clipLauncher"sv;
204 friend void to_json (nlohmann::json &j,
const Project &project);
205 friend void from_json (
const nlohmann::json &j, Project &project);
208 utils::AppSettings &app_settings_;
209 dsp::TempoMap tempo_map_;
210 utils::QObjectUniquePtr<dsp::TempoMapWrapper> tempo_map_wrapper_;
212 plugins::PluginHostWindowFactory plugin_host_window_provider_;
214 utils::QObjectUniquePtr<dsp::FileAudioSourceRegistry>
215 file_audio_source_registry_;
216 utils::QObjectUniquePtr<dsp::PortRegistry> port_registry_;
217 utils::QObjectUniquePtr<dsp::ProcessorParameterRegistry> param_registry_;
218 utils::QObjectUniquePtr<PluginRegistry> plugin_registry_;
219 utils::QObjectUniquePtr<structure::arrangement::ArrangerObjectRegistry>
220 arranger_object_registry_;
221 utils::QObjectUniquePtr<structure::tracks::TrackRegistry> track_registry_;
223 ProjectDirectoryPathProvider project_directory_path_provider_;
228 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager_;
250 std::unique_ptr<dsp::AudioPool>
pool_;
265 boost::unordered_flat_map<
266 structure::tracks::TrackUuid,
267 structure::tracks::TrackPtrVariant>
273 clip_playback_service_;
275 std::unique_ptr<structure::arrangement::ArrangerObjectFactory>
276 arranger_object_factory_;
280 std::unique_ptr<structure::tracks::TrackFactory> track_factory_;
284 tempo_object_manager_;