载入中...
搜索中...
未找到
AudioTarget.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
6
7#include <map>
8#include <string>
9#include <vector>
10
11namespace eve::audio_editing {
12
15 public virtual IEditableTarget,
18 public IPropertyProvider,
20public:
22 static CapabilityId editingCapabilityId() { return CapabilityId("eve.editor.target.audio-source"); }
23
25 explicit AudioSourceTarget(std::string id);
26
28 TargetId targetId() const override { return TargetId(id_); }
30 TargetDescriptor describe() const override;
32 void* queryCapability(const CapabilityId& capability) override;
34 Result<void> applyDomainOperation(const DomainOperation& operation) override;
36 [[nodiscard]] std::unique_ptr<IDomainOperationTarget> cloneDomainState() const override;
38 [[nodiscard]] Result<void> commitDomainState(
39 std::unique_ptr<IDomainOperationTarget> candidate) override;
41 eve::Result<eve::Revision> currentRevision(const SelectionSnapshot& selection) const override;
43 PropertySchema schema(const SelectionSnapshot& selection) const override;
45 PropertyReadResult read(const SelectionSnapshot& selection, const PropertyPath& path) const override;
47 Result<DomainOperation> makeSet(const SelectionSnapshot& selection, const PropertyPath& path,
48 const EditorValue& value, PropertySetMode mode) const override;
50 Result<DomainOperation> makeReset(const SelectionSnapshot& selection,
51 const PropertyPath& path) const override;
52
54 EditorValue snapshotValue() const override;
56 Result<void> loadSnapshot(const EditorValue& snapshot);
58 std::vector<EditorDiagnostic> validate() const;
59
60private:
62 static PropertySchema sourceSchema();
63 static std::map<std::string, EditorValue> defaults();
65 bool selectionMatches(const SelectionSnapshot& selection) const;
66
67 std::string id_;
68 std::map<std::string, EditorValue> values_;
69};
70
73public:
75 virtual ~IAudioSourceRuntimeSink() = default;
80 virtual Result<void> publish(const AudioSourceTarget& candidate) = 0;
81};
82
92public:
95
97 TargetId targetId() const override { return TargetId(document_.targetId()); }
99 std::uint64_t revision() const override { return document_.revision(); }
101 EditRegion dirtyRegion() const override { return document_.dirtyRegion(); }
103 void clearDirtyRegion() override { document_.clearDirtyRegion(); }
105 TargetDescriptor describe() const override;
111 void* queryCapability(const CapabilityId& capability) override;
113 Result<void> applyDomainOperation(const DomainOperation& operation) override;
115 [[nodiscard]] std::unique_ptr<IDomainOperationTarget> cloneDomainState() const override;
117 [[nodiscard]] Result<void> commitDomainState(
118 std::unique_ptr<IDomainOperationTarget> candidate) override;
119
121 AudioSourceTarget& authoringTarget() { return document_; }
123 const AudioSourceTarget& authoringTarget() const { return document_; }
124
125private:
126 AudioSourceTarget document_;
127 IAudioSourceRuntimeSink* sink_ = nullptr;
128 bool staging_ = false;
129};
130
133 ObjectId id;
134 ObjectId parent;
135 std::string name;
136 double volume = 1.0;
137 bool mute = false;
138 bool solo = false;
140};
141
144 public virtual IEditableTarget,
147public:
149 explicit AudioMixerTarget(std::string id);
151 TargetId targetId() const override { return TargetId(id_); }
153 TargetDescriptor describe() const override;
155 void* queryCapability(const CapabilityId& capability) override;
157 Result<void> applyDomainOperation(const DomainOperation& operation) override;
159 [[nodiscard]] std::unique_ptr<IDomainOperationTarget> cloneDomainState() const override;
161 [[nodiscard]] Result<void> commitDomainState(
162 std::unique_ptr<IDomainOperationTarget> candidate) override;
164 Result<AudioBusSnapshot> bus(const ObjectId& id) const;
166 std::vector<ObjectId> children(const ObjectId& parent) const;
168 Result<DomainOperation> makeCreate(AudioBusSnapshot bus) const;
170 Result<DomainOperation> makeDelete(const ObjectId& id) const;
172 Result<DomainOperation> makeReplace(AudioBusSnapshot bus) const;
174 EditorValue snapshotValue() const;
176 Result<void> loadSnapshot(const EditorValue& snapshot);
177
178private:
180 static EditorValue busValue(const AudioBusSnapshot& bus);
182 static Result<AudioBusSnapshot> parseBus(const EditorValue& value);
184 bool wouldCycle(const ObjectId& id, const ObjectId& parent) const;
185
186 std::string id_;
187 std::map<ObjectId, AudioBusSnapshot> buses_;
188};
189
190} // namespace eve::audio_editing
191
192namespace eve::audio {
193class Source;
194}
195
196namespace eve::audio_editing {
197
200public:
202 Result<void> apply(const AudioSourceTarget& target, audio::Source* source) const;
203};
204
207public:
209 explicit AudioSourceRuntimeSink(audio::Source* source) : source_(source) {}
211 Result<void> publish(const AudioSourceTarget& candidate) override;
212
213private:
214 audio::Source* source_ = nullptr;
215};
216
217} // namespace eve::audio_editing
LogicalId target
ActionParameterOperation operation
double value
#define EVENGINE_API_BACKENDS
Definition Export.h:108
std::int32_t parent
std::string path
Definition PlayHost.cpp:110
int children
Definition TreeMesh.cpp:295
const UnitySourceAsset & source
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Serializable mixer-bus hierarchy, including master bus.
TargetId targetId() const override
Target id.
Operation target coupling an owned audio document to an atomic live sink.
Definition AudioTarget.h:91
EditRegion dirtyRegion() const override
Dirty region.
const AudioSourceTarget & authoringTarget() const
Access the owned authoring document as an immutable snapshot source.
TargetId targetId() const override
Target id.
Definition AudioTarget.h:97
AudioSourceTarget & authoringTarget()
Access the owned authoring document for property inspection/planning.
std::uint64_t revision() const override
Revision.
Definition AudioTarget.h:99
void clearDirtyRegion() override
Clears dirty region.
Serializable audio-source authoring target independent of OpenAL handles.
Definition AudioTarget.h:19
static CapabilityId editingCapabilityId()
Stable capability identity for audio-source property editing.
Definition AudioTarget.h:22
TargetId targetId() const override
Target id.
Definition AudioTarget.h:28
Atomic runtime publication boundary for one authored audio source.
Definition AudioTarget.h:72
virtual ~IAudioSourceRuntimeSink()=default
Releases IAudioSourceRuntimeSink resources.
virtual Result< void > publish(const AudioSourceTarget &candidate)=0
Publish one fully validated authoring candidate.
Dirty region and revision shared by every editable document target.
Optional candidate/publish capability for atomic domain operations.
Editable-target capability that applies owning domain operations.
IEditableTarget public API.
Optional capability exposing a deterministic, persistence-safe editing snapshot.
UI-independent property access for an immutable selection snapshot.
Dotted property path (layout.size) compared and persisted as text.
Definition EditingIds.h:78
Deterministic owning value tree shared by authoring hosts.
std::vector< Value > Array
audio_editing::AudioSourceRuntimeApplier AudioSourceRuntimeApplier
audio_editing::IAudioSourceRuntimeSink IAudioSourceRuntimeSink
audio_editing::AudioSourceRuntimeSink AudioSourceRuntimeSink
Result< int > publish(Heightmap &target, std::vector< float > candidate)
Publish.
Immutable mixer bus snapshot for hierarchy and routing panels.
DomainOperation public API.
EditRegion public API.
PropertyReadResult public API.
EVENGINE_API_PLATFORM public API.
SelectionSnapshot public API.
Stable discovery metadata exposed by every editable target.