50class Project final :
public QObject
62 clipPlaybackService CONSTANT FINAL)
70 tempoObjectManager CONSTANT FINAL)
73 friend struct PluginBuilderForDeserialization;
76 using TrackUuid = structure::tracks::TrackUuid;
77 using PluginPtrVariant = plugins::PluginPtrVariant;
78 using PluginRegistry = plugins::PluginRegistry;
79 using ProjectDirectoryPathProvider =
80 std::function<std::filesystem::path (
bool for_backup)>;
85 ProjectDirectoryPathProvider project_directory_path_provider,
87 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager,
88 plugins::PluginHostWindowFactory plugin_host_window_provider,
91 QObject * parent =
nullptr);
93 Q_DISABLE_COPY_MOVE (Project)
114 auto * arrangerObjectFactory ()
const
116 return arranger_object_factory_.get ();
119 friend void init_from (
121 const Project &other,
132 get_final_track_dependencies ()
const;
134 auto &get_file_audio_source_registry ()
const
136 return *file_audio_source_registry_;
138 auto &get_track_registry ()
const {
return *track_registry_; }
139 auto &get_plugin_registry ()
const {
return *plugin_registry_; }
140 auto &get_port_registry ()
const {
return *port_registry_; }
141 auto &get_param_registry ()
const {
return *param_registry_; }
142 auto &get_arranger_object_registry ()
const
144 return *arranger_object_registry_;
154 std::optional<dsp::PortPtrVariant>
157 return get_port_registry ().find_by_id (
id);
161 find_param_by_id (
const dsp::ProcessorParameter::Uuid &
id)
const
163 const auto opt_var = get_param_registry ().find_by_id (
id);
164 if (opt_var.has_value ())
166 return std::get<dsp::ProcessorParameter *> (opt_var.value ());
171 std::optional<plugins::PluginPtrVariant>
172 find_plugin_by_id (plugins::Plugin::Uuid
id)
const
174 return get_plugin_registry ().find_by_id (
id);
177 std::optional<zrythm::structure::tracks::TrackPtrVariant>
178 find_track_by_id (structure::tracks::Track::Uuid
id)
const
180 return get_track_registry ().find_by_id (
id);
183 std::optional<zrythm::structure::arrangement::ArrangerObjectPtrVariant>
184 find_arranger_object_by_id (
185 structure::arrangement::ArrangerObject::Uuid
id)
const
187 return get_arranger_object_registry ().find_by_id (
id);
190 const auto &tempo_map ()
const {
return tempo_map_; }
193 static constexpr auto kTempoMapKey =
"tempoMap"sv;
194 static constexpr auto kFileAudioSourceRegistryKey =
195 "fileAudioSourceRegistry"sv;
196 static constexpr auto kPortRegistryKey =
"portRegistry"sv;
197 static constexpr auto kParameterRegistryKey =
"paramRegistry"sv;
198 static constexpr auto kPluginRegistryKey =
"pluginRegistry"sv;
199 static constexpr auto kArrangerObjectRegistryKey =
"arrangerObjectRegistry"sv;
200 static constexpr auto kTrackRegistryKey =
"trackRegistry"sv;
201 static constexpr auto kTransportKey =
"transport"sv;
202 static constexpr auto kAudioPoolKey =
"audioPool"sv;
203 static constexpr auto kTracklistKey =
"tracklist"sv;
204 static constexpr auto kRegionLinkGroupManagerKey =
"regionLinkGroupManager"sv;
205 static constexpr auto kPortConnectionsManagerKey =
"portConnectionsManager"sv;
206 static constexpr auto kTempoObjectManagerKey =
"tempoObjectManager"sv;
207 static constexpr auto kClipLauncherKey =
"clipLauncher"sv;
208 friend void to_json (nlohmann::json &j,
const Project &project);
209 friend void from_json (
const nlohmann::json &j, Project &project);
212 utils::AppSettings &app_settings_;
213 dsp::TempoMap tempo_map_;
214 utils::QObjectUniquePtr<dsp::TempoMapWrapper> tempo_map_wrapper_;
216 plugins::PluginHostWindowFactory plugin_host_window_provider_;
218 utils::QObjectUniquePtr<dsp::FileAudioSourceRegistry>
219 file_audio_source_registry_;
220 utils::QObjectUniquePtr<dsp::PortRegistry> port_registry_;
221 utils::QObjectUniquePtr<dsp::ProcessorParameterRegistry> param_registry_;
222 utils::QObjectUniquePtr<PluginRegistry> plugin_registry_;
223 utils::QObjectUniquePtr<structure::arrangement::ArrangerObjectRegistry>
224 arranger_object_registry_;
225 utils::QObjectUniquePtr<structure::tracks::TrackRegistry> track_registry_;
227 ProjectDirectoryPathProvider project_directory_path_provider_;
232 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager_;
254 std::unique_ptr<dsp::AudioPool>
pool_;
269 boost::unordered_flat_map<
270 structure::tracks::TrackUuid,
271 structure::tracks::TrackPtrVariant>
277 clip_playback_service_;
279 std::unique_ptr<structure::arrangement::ArrangerObjectFactory>
280 arranger_object_factory_;
284 std::unique_ptr<structure::tracks::TrackFactory> track_factory_;
288 tempo_object_manager_;