51class Project final :
public QObject
63 clipPlaybackService CONSTANT FINAL)
71 tempoObjectManager CONSTANT FINAL)
74 friend struct PluginBuilderForDeserialization;
77 using TrackUuid = structure::tracks::TrackUuid;
78 using PluginPtrVariant = plugins::PluginPtrVariant;
79 using PluginRegistry = plugins::PluginRegistry;
80 using ProjectDirectoryPathProvider =
81 std::function<std::filesystem::path (
bool for_backup)>;
95 ProjectDirectoryPathProvider project_directory_path_provider,
97 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager,
98 plugins::PluginHostWindowFactory plugin_host_window_provider,
101 QObject * parent =
nullptr);
102 ~Project ()
override;
103 Q_DISABLE_COPY_MOVE (Project)
124 auto * arrangerObjectFactory ()
const
126 return arranger_object_factory_.get ();
129 friend void init_from (
131 const Project &other,
142 get_final_track_dependencies ()
const;
144 auto &get_file_audio_source_registry ()
const
146 return *file_audio_source_registry_;
148 auto &get_track_registry ()
const {
return *track_registry_; }
149 auto &get_plugin_registry ()
const {
return *plugin_registry_; }
150 auto &get_port_registry ()
const {
return *port_registry_; }
151 auto &get_param_registry ()
const {
return *param_registry_; }
152 auto &get_arranger_object_registry ()
const
154 return *arranger_object_registry_;
164 std::optional<dsp::PortPtrVariant>
167 return get_port_registry ().find_by_id (
id);
171 find_param_by_id (
const dsp::ProcessorParameter::Uuid &
id)
const
173 const auto opt_var = get_param_registry ().find_by_id (
id);
174 if (opt_var.has_value ())
176 return std::get<dsp::ProcessorParameter *> (opt_var.value ());
181 std::optional<plugins::PluginPtrVariant>
182 find_plugin_by_id (plugins::Plugin::Uuid
id)
const
184 return get_plugin_registry ().find_by_id (
id);
187 std::optional<zrythm::structure::tracks::TrackPtrVariant>
188 find_track_by_id (structure::tracks::Track::Uuid
id)
const
190 return get_track_registry ().find_by_id (
id);
193 std::optional<zrythm::structure::arrangement::ArrangerObjectPtrVariant>
194 find_arranger_object_by_id (
195 structure::arrangement::ArrangerObject::Uuid
id)
const
197 return get_arranger_object_registry ().find_by_id (
id);
200 const auto &tempo_map ()
const {
return tempo_map_; }
204 audio_input_selection_provider_ = std::move (provider);
207 const auto &audio_input_selection_provider ()
const
209 return audio_input_selection_provider_;
219 structure::tracks::TrackRecordingCallback callback);
222 static constexpr auto kTempoMapKey =
"tempoMap"sv;
223 static constexpr auto kFileAudioSourceRegistryKey =
224 "fileAudioSourceRegistry"sv;
225 static constexpr auto kPortRegistryKey =
"portRegistry"sv;
226 static constexpr auto kParameterRegistryKey =
"paramRegistry"sv;
227 static constexpr auto kPluginRegistryKey =
"pluginRegistry"sv;
228 static constexpr auto kArrangerObjectRegistryKey =
"arrangerObjectRegistry"sv;
229 static constexpr auto kTrackRegistryKey =
"trackRegistry"sv;
230 static constexpr auto kTransportKey =
"transport"sv;
231 static constexpr auto kAudioPoolKey =
"audioPool"sv;
232 static constexpr auto kTracklistKey =
"tracklist"sv;
233 static constexpr auto kRegionLinkGroupManagerKey =
"regionLinkGroupManager"sv;
234 static constexpr auto kPortConnectionsManagerKey =
"portConnectionsManager"sv;
235 static constexpr auto kTempoObjectManagerKey =
"tempoObjectManager"sv;
236 static constexpr auto kClipLauncherKey =
"clipLauncher"sv;
237 friend void to_json (nlohmann::json &j,
const Project &project);
238 friend void from_json (
const nlohmann::json &j,
Project &project);
242 dsp::TempoMap tempo_map_;
245 plugins::PluginHostWindowFactory plugin_host_window_provider_;
248 file_audio_source_registry_;
253 arranger_object_registry_;
256 ProjectDirectoryPathProvider project_directory_path_provider_;
261 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager_;
283 std::unique_ptr<dsp::AudioPool>
pool_;
298 boost::unordered_flat_map<
299 structure::tracks::TrackUuid,
300 structure::tracks::TrackPtrVariant>
306 clip_playback_service_;
308 std::unique_ptr<structure::arrangement::ArrangerObjectFactory>
309 arranger_object_factory_;
313 std::unique_ptr<structure::tracks::TrackFactory> track_factory_;
317 tempo_object_manager_;
324 structure::tracks::TrackRecordingCallback track_recording_callback_;