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::TempoMapWrapper &tempo_map_wrapper,
42 utils::IObjectRegistry &registry,
43 dsp::FileAudioSourceUuidReference source,
44 QObject * parent = nullptr);
45 Q_DISABLE_COPY_MOVE (AudioSourceObject)
46 ~AudioSourceObject () override;
47
48 dsp::ContentPosition * position () const override
49 {
50 return static_cast<dsp::ContentPosition *> (ArrangerObject::position ());
51 }
52
53 // ========================================================================
54 // QML Interface
55 // ========================================================================
56
57 // ========================================================================
58
59 juce::PositionableAudioSource &get_audio_source () const;
60
68
69 dsp::FileAudioSourceUuidReference audio_source_ref () const;
70
71private:
72 friend void init_from (
74 const AudioSourceObject &other,
75 utils::ObjectCloneType clone_type);
76
77 static constexpr auto kFileAudioSourceKey = "fileAudioSource"sv;
78 friend void to_json (nlohmann::json &j, const AudioSourceObject &obj);
79 friend void from_json (const nlohmann::json &j, AudioSourceObject &obj);
80
81 Q_SLOT void generate_audio_source ();
82 void connect_file_audio_source_signals ();
83
84private:
85 utils::IObjectRegistry &registry_;
86 dsp::FileAudioSourceUuidReference source_id_;
87 std::unique_ptr<juce::PositionableAudioSource> source_;
88
89 BOOST_DESCRIBE_CLASS (AudioSourceObject, (ArrangerObject), (), (), ())
90};
91
92} // namespace zrythm::structure::arrangement
A Position whose ticks are content-space (clip-local) ticks.
Definition position.h:118
Audio clips for the pool.
ArrangerObject(Type type, const dsp::TempoMapWrapper &tempo_map_wrapper, ArrangerObjectFeatures features, QObject *parent=nullptr) noexcept
Construct a new ArrangerObject.
AudioSourceObject(const dsp::TempoMapWrapper &tempo_map_wrapper, utils::IObjectRegistry &registry, dsp::FileAudioSourceUuidReference source, QObject *parent=nullptr)
Construct a new Audio Source Object object.
dsp::FileAudioSource & file_audio_source() const
Returns the underlying FileAudioSource.
Abstract interface for a UUID-keyed object registry.