Zrythm v2.0.0-alpha.1
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
audio_source_object.h
1// SPDX-FileCopyrightText: © 2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include "dsp/file_audio_source.h"
7#include "structure/arrangement/arranger_object.h"
8#include "utils/icloneable.h"
9#include "utils/iobject_registry.h"
10
11#include <nlohmann/json_fwd.hpp>
12
13namespace zrythm::structure::arrangement
14{
23{
24 Q_OBJECT
25 QML_ELEMENT
26 QML_UNCREATABLE ("")
27
28public:
41 const dsp::TempoMap &tempo_map,
42 utils::IObjectRegistry &registry,
43 dsp::FileAudioSourceUuidReference source,
44 QObject * parent = nullptr);
45 Q_DISABLE_COPY_MOVE (AudioSourceObject)
46 ~AudioSourceObject () override;
47
48 // ========================================================================
49 // QML Interface
50 // ========================================================================
51
52 // ========================================================================
53
54 juce::PositionableAudioSource &get_audio_source () const;
55
56 dsp::FileAudioSourceUuidReference audio_source_ref () const;
57
58private:
59 friend void init_from (
61 const AudioSourceObject &other,
62 utils::ObjectCloneType clone_type);
63
64 static constexpr auto kFileAudioSourceKey = "fileAudioSource"sv;
65 friend void to_json (nlohmann::json &j, const AudioSourceObject &obj);
66 friend void from_json (const nlohmann::json &j, AudioSourceObject &obj);
67
68 Q_SLOT void generate_audio_source ();
69 void connect_file_audio_source_signals ();
70
71private:
72 utils::IObjectRegistry &registry_;
73 dsp::FileAudioSourceUuidReference source_id_;
74 std::unique_ptr<juce::PositionableAudioSource> source_;
75
76 BOOST_DESCRIBE_CLASS (AudioSourceObject, (ArrangerObject), (), (), ())
77};
78
79} // namespace zrythm::structure::arrangement
ArrangerObject(Type type, const dsp::TempoMap &tempo_map, ArrangerObjectFeatures features, QObject *parent=nullptr) noexcept
Construct a new ArrangerObject.
AudioSourceObject(const dsp::TempoMap &tempo_map, utils::IObjectRegistry &registry, dsp::FileAudioSourceUuidReference source, QObject *parent=nullptr)
Construct a new Audio Source Object object.
Abstract interface for a UUID-keyed object registry.