载入中...
搜索中...
未找到
AudioEffects.cpp
浏览该文件的文档.
23bool numberIn(const EditorValue::Object& parameters, const char* key, double minimum, double maximum) {
29 const auto *idEntry = field(value, "id"), *typeEntry = field(value, "type"), *bypassEntry = field(value, "bypass"),
35 const auto* parameters = parametersEntry ? parametersEntry->getIf<EditorValue::Object>() : nullptr;
36 static const std::set<std::string> types{"gain", "low-pass", "high-pass", "delay", "reverb", "compressor"};
37 bool valid = id && !id->empty() && type && types.contains(*type) && bypass && mix && std::isfinite(*mix) &&
42 valid = numberIn(*parameters, "cutoff", 20.0, 24000.0) && numberIn(*parameters, "resonance", 0.1, 20.0);
44 valid = numberIn(*parameters, "seconds", 0.001, 5.0) && numberIn(*parameters, "feedback", 0.0, 0.99);
46 valid = numberIn(*parameters, "room-size", 0.0, 1.0) && numberIn(*parameters, "damping", 0.0, 1.0);
48 valid = numberIn(*parameters, "threshold", -96.0, 0.0) && numberIn(*parameters, "ratio", 1.0, 100.0);
50 return eve::editing::failed<AudioEffectRecord>(EditorStatus::Rejected, RuleId("editor.audio.invalid-effect"),
52 return eve::editing::applied<AudioEffectRecord>({StableId(*id), *type, *bypass, *mix, *parametersEntry});
63 EditorStatus::Rejected, RuleId("editor.audio.invalid-effect-order"), "Effect order must be an array");
76DomainOperation operation(const char* type, const char* inverse, const std::string& target, EditorValue payload,
93 TargetId(id_), "audio-effect-chain", revisionValue(), false, {CapabilityId("eve.editor.target.audio-effects")}};
96 return capability == CapabilityId("eve.editor.target.audio-effects") ? static_cast<AudioEffectChainTarget*>(this)
111 return eve::editing::failed<void>(EditorStatus::NotFound, RuleId("editor.audio.effect-not-found"),
151 "audio.effect.set.v1", found == effects_.end() ? "audio.effect.delete.v1" : "audio.effect.set.v1", id_,
152 effectValue(effect), found == effects_.end() ? EditorValue(effect.id.value()) : effectValue(found->second),
158 return eve::editing::failed<DomainOperation>(EditorStatus::NotFound, RuleId("editor.audio.effect-not-found"),
163Result<DomainOperation> AudioEffectChainTarget::makeReorder(const std::vector<StableId>& order) const {
165 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.audio.effect-order"),
170 std::any_of(order.begin(), order.end(), [&](const StableId& id) { return !effects_.contains(id); }))
171 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.audio.effect-order"),
197 const auto *versionEntry = field(snapshot, "schemaVersion"), *effectsEntry = field(snapshot, "effects");
201 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.audio.effect-snapshot"),
207 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.audio.effect-snapshot-entry"),
213 if (std::any_of(diagnostics.begin(), diagnostics.end(), [](const EditorDiagnostic& diagnostic) {
227 if (std::any_of(diagnostics.begin(), diagnostics.end(), [](const EditorDiagnostic& diagnostic) {
239Result<void> AudioEffectChainPublisher::publish(const AudioEffectChainTarget& chain, Revision expected,
A structured explanation of a failed, degraded, or noteworthy result.
Definition Diagnostic.h:94
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
const std::string & value() const noexcept
Returns the exact legacy or canonical compatibility spelling.
Definition Identity.h:362
Result< void > publish(const AudioEffectChainTarget &chain, Revision expectedRevision, IAudioEffectChainSink &sink) const
Publish.
Definition AudioEffects.cpp:239
Revisioned reversible serial effect chain independent of an audio backend.
Definition AudioEffects.h:27
EditorValue snapshotValue() const
Capture deterministic schema-version-one effect chain.
Definition AudioEffects.cpp:191
Result< DomainOperation > makeReorder(const std::vector< StableId > &order) const
Plan complete processing-order replacement.
Definition AudioEffects.cpp:163
Result< DomainOperation > makeAssignToBus(const AudioMixerTarget &mixer, const ObjectId &bus) const
Plan assigning this chain snapshot to an existing mixer bus.
Definition AudioEffects.cpp:224
Result< DomainOperation > makeSet(const AudioEffectRecord &effect) const
Plan effect creation or replacement.
Definition AudioEffects.cpp:146
Result< void > loadSnapshot(const EditorValue &snapshot)
Atomically load a validated effect chain.
Definition AudioEffects.cpp:196
void * queryCapability(const CapabilityId &capability) override
Query an optional target capability.
Definition AudioEffects.cpp:95
Result< DomainOperation > makeDelete(const StableId &id) const
Plan effect removal.
Definition AudioEffects.cpp:155
std::vector< EditorDiagnostic > validate() const
Report invalid parameter ranges and unsafe chain budgets.
Definition AudioEffects.cpp:176
std::vector< AudioEffectRecord > effects() const
Enumerate effect records in processing order.
Definition AudioEffects.cpp:141
Result< void > commitDomainState(std::unique_ptr< IDomainOperationTarget > candidate) override
Commits domain state.
Definition AudioEffects.cpp:132
std::unique_ptr< IDomainOperationTarget > cloneDomainState() const override
Clones domain state.
Definition AudioEffects.cpp:129
Result< void > applyDomainOperation(const DomainOperation &operation) override
Applies domain operation.
Definition AudioEffects.cpp:99
Serializable mixer-bus hierarchy, including master bus.
Definition AudioTarget.h:146
Result< AudioBusSnapshot > bus(const ObjectId &id) const
Read one bus snapshot.
Definition AudioMixerTarget.cpp:79
Result< DomainOperation > makeReplace(AudioBusSnapshot bus) const
Plan a reversible bus settings/reparent change.
Definition AudioMixerTarget.cpp:126
Runtime backend boundary for atomic effect-chain publication.
Definition AudioEffects.h:67
virtual Result< void > publish(const std::string &chain, Revision revision, const std::vector< AudioEffectRecord > &effects)=0
Publish.
void bumpRevision()
Advance the revision without touching the dirty region.
Definition EditableTarget.h:179
Revision revisionValue() const noexcept
Return the revision as the shared protocol revision type.
Definition EditableTarget.h:169
void widenDirty()
Mark an unknown area dirty without advancing the revision.
Definition EditableTarget.h:177
eve::OptionalRef< C > capability()
Query a capability through its interface-owned stable identity.
Definition EditableTarget.h:82
Deterministic owning value tree shared by authoring hosts.
Definition EditingValue.h:19
editing::DomainOperation DomainOperation
Definition ArchSpaceTarget.h:19
Definition AudioEditingCommands.cpp:7
Diagnostic ruleDiagnostic(eve::DiagnosticCode code, RuleId rule, DiagnosticSeverity severity, std::string message)
Build a common diagnostic carrying an open editing rule identity.
Definition EditingResult.h:25
const EditorValue * field(const EditorValue &value, const char *name)
Definition RoadNetworkEditTarget.cpp:15
@ PreconditionViolation
Definition Container.h:602
Stable effect instance with normalized dry/wet mix and typed parameters.
Definition AudioEffects.h:15
Stable discovery metadata exposed by every editable target.
Definition EditableTarget.h:39