Zrythm v2.0.0-DEV
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
10namespace zrythm::structure::arrangement
11{
20{
21 Q_OBJECT
22 QML_ELEMENT
23 QML_UNCREATABLE ("")
24
25public:
38 const dsp::TempoMap &tempo_map,
39 dsp::FileAudioSourceRegistry &registry,
40 dsp::FileAudioSourceUuidReference source,
41 QObject * parent = nullptr);
42 Z_DISABLE_COPY_MOVE (AudioSourceObject)
43 ~AudioSourceObject () override;
44
45 // ========================================================================
46 // QML Interface
47 // ========================================================================
48
49 // ========================================================================
50
51 juce::PositionableAudioSource &get_audio_source () const;
52
53 dsp::FileAudioSourceUuidReference audio_source_ref () const;
54
55private:
56 friend void init_from (
58 const AudioSourceObject &other,
59 utils::ObjectCloneType clone_type);
60
61 static constexpr auto kFileAudioSourceKey = "fileAudioSource"sv;
62 friend void to_json (nlohmann::json &j, const AudioSourceObject &obj)
63 {
64 to_json (j, static_cast<const ArrangerObject &> (obj));
65 j[kFileAudioSourceKey] = obj.source_id_;
66 }
67 friend void from_json (const nlohmann::json &j, AudioSourceObject &obj);
68
69 void generate_audio_source ();
70
71private:
72 dsp::FileAudioSourceRegistry &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
Base class for all objects in the arranger.
ArrangerObject(Type type, const dsp::TempoMap &tempo_map, ArrangerObjectFeatures features, QObject *parent=nullptr) noexcept
Construct a new ArrangerObject.
AudioSourceObject(const dsp::TempoMap &tempo_map, dsp::FileAudioSourceRegistry &registry, dsp::FileAudioSourceUuidReference source, QObject *parent=nullptr)
Construct a new Audio Source Object object.