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)
103 Q_SIGNAL
void aboutToBeDeleted ();
112 auto * arrangerObjectFactory ()
const
114 return arranger_object_factory_.get ();
117 friend void init_from (
119 const Project &other,
130 get_final_track_dependencies ()
const;
132 auto &get_file_audio_source_registry ()
const
134 return *file_audio_source_registry_;
136 auto &get_track_registry ()
const {
return *track_registry_; }
137 auto &get_plugin_registry ()
const {
return *plugin_registry_; }
138 auto &get_port_registry ()
const {
return *port_registry_; }
139 auto &get_param_registry ()
const {
return *param_registry_; }
140 auto &get_arranger_object_registry ()
const
142 return *arranger_object_registry_;
152 std::optional<dsp::PortPtrVariant>
155 return get_port_registry ().find_by_id (
id);
159 find_param_by_id (
const dsp::ProcessorParameter::Uuid &
id)
const
161 const auto opt_var = get_param_registry ().find_by_id (
id);
162 if (opt_var.has_value ())
164 return std::get<dsp::ProcessorParameter *> (opt_var.value ());
169 std::optional<plugins::PluginPtrVariant>
170 find_plugin_by_id (plugins::Plugin::Uuid
id)
const
172 return get_plugin_registry ().find_by_id (
id);
175 std::optional<zrythm::structure::tracks::TrackPtrVariant>
176 find_track_by_id (structure::tracks::Track::Uuid
id)
const
178 return get_track_registry ().find_by_id (
id);
181 std::optional<zrythm::structure::arrangement::ArrangerObjectPtrVariant>
182 find_arranger_object_by_id (
183 structure::arrangement::ArrangerObject::Uuid
id)
const
185 return get_arranger_object_registry ().find_by_id (
id);
188 const auto &tempo_map ()
const {
return tempo_map_; }
191 static constexpr auto kTempoMapKey =
"tempoMap"sv;
192 static constexpr auto kFileAudioSourceRegistryKey =
193 "fileAudioSourceRegistry"sv;
194 static constexpr auto kPortRegistryKey =
"portRegistry"sv;
195 static constexpr auto kParameterRegistryKey =
"paramRegistry"sv;
196 static constexpr auto kPluginRegistryKey =
"pluginRegistry"sv;
197 static constexpr auto kArrangerObjectRegistryKey =
"arrangerObjectRegistry"sv;
198 static constexpr auto kTrackRegistryKey =
"trackRegistry"sv;
199 static constexpr auto kTransportKey =
"transport"sv;
200 static constexpr auto kAudioPoolKey =
"audioPool"sv;
201 static constexpr auto kTracklistKey =
"tracklist"sv;
202 static constexpr auto kRegionLinkGroupManagerKey =
"regionLinkGroupManager"sv;
203 static constexpr auto kPortConnectionsManagerKey =
"portConnectionsManager"sv;
204 static constexpr auto kTempoObjectManagerKey =
"tempoObjectManager"sv;
205 static constexpr auto kClipLauncherKey =
"clipLauncher"sv;
206 friend void to_json (nlohmann::json &j,
const Project &project);
207 friend void from_json (
const nlohmann::json &j, Project &project);
210 utils::AppSettings &app_settings_;
211 dsp::TempoMap tempo_map_;
212 utils::QObjectUniquePtr<dsp::TempoMapWrapper> tempo_map_wrapper_;
214 plugins::PluginHostWindowFactory plugin_host_window_provider_;
216 utils::QObjectUniquePtr<dsp::FileAudioSourceRegistry>
217 file_audio_source_registry_;
218 utils::QObjectUniquePtr<dsp::PortRegistry> port_registry_;
219 utils::QObjectUniquePtr<dsp::ProcessorParameterRegistry> param_registry_;
220 utils::QObjectUniquePtr<PluginRegistry> plugin_registry_;
221 utils::QObjectUniquePtr<structure::arrangement::ArrangerObjectRegistry>
222 arranger_object_registry_;
223 utils::QObjectUniquePtr<structure::tracks::TrackRegistry> track_registry_;
225 ProjectDirectoryPathProvider project_directory_path_provider_;
230 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager_;
252 std::unique_ptr<dsp::AudioPool>
pool_;
267 boost::unordered_flat_map<
268 structure::tracks::TrackUuid,
269 structure::tracks::TrackPtrVariant>
275 clip_playback_service_;
277 std::unique_ptr<structure::arrangement::ArrangerObjectFactory>
278 arranger_object_factory_;
282 std::unique_ptr<structure::tracks::TrackFactory> track_factory_;
286 tempo_object_manager_;