载入中...
搜索中...
未找到
AudioSourceEditor.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
17
18#include <cstdint>
19#include <memory>
20#include <string>
21
22namespace eve::audio_editor {
23
30public:
32 void play() override;
34 void pause() override;
36 void stop() override;
38 [[nodiscard]] audio_editing::Result<void> seek(double seconds) override;
40 double tell() const override { return position_; }
42 double duration() const override { return duration_; }
44 bool playing() const override { return playing_; }
46 void setNativeLooping(bool) override {}
47
49 void setDuration(double seconds);
51 void advance(double deltaSeconds);
52
53private:
54 double duration_ = 1.0;
55 double position_ = 0.0;
56 bool playing_ = false;
57};
58
72public:
77 explicit AudioSourceEditor(std::string targetId);
78
83
85 const audio_editing::AudioSourceTarget& target() const noexcept { return target_; }
86
91 [[nodiscard]] audio_editing::Result<void> configureWorkspace(editor::EditorWorkspace& workspace) const;
92
97 [[nodiscard]] audio_editing::Result<void> setViewportWidth(float width);
98
103 [[nodiscard]] audio_editing::Result<void> seekX(float x);
104
106 [[nodiscard]] audio_editing::Result<void> seekSeconds(double seconds);
107
109 [[nodiscard]] audio_editing::Result<void> setProperty(const std::string& path,
111
116
118 [[nodiscard]] audio_editing::Result<void> play();
120 [[nodiscard]] audio_editing::Result<void> pause();
122 [[nodiscard]] audio_editing::Result<void> stop();
123
128 [[nodiscard]] audio_editing::Result<audio_editing::AudioTransportSnapshot> update(double deltaSeconds);
129
134 [[nodiscard]] audio_editing::Result<void> attachLiveAudition();
135
136 bool canUndo() const noexcept { return transactions_.canUndo(); }
138 bool canRedo() const noexcept { return transactions_.canRedo(); }
140 bool isPlaying() const noexcept;
142 std::uint64_t revision() const noexcept { return target_.revision(); }
144 std::uint64_t pcmRevision() const noexcept { return pcmRevision_; }
146 double duration() const noexcept;
148 double playhead() const noexcept;
150 float layoutWidth() const noexcept { return viewportWidth_; }
152 int bucketCount() const noexcept;
154 float playheadX() const noexcept;
156 float loopStartX() const noexcept;
158 float loopEndX() const noexcept;
159
161 [[nodiscard]] audio_editing::PropertyReadResult read(const std::string& path) const;
162
168 [[nodiscard]] const audio_editing::AudioWaveformBucket* bucket(int index) const;
169
171 const audio_editing::AudioTransportSnapshot& transport() const noexcept { return lastTransport_; }
172
174 audio_editing::EditorValue snapshot() const { return target_.snapshotValue(); }
175
176private:
177 [[nodiscard]] editor::SelectionSnapshot selection() const;
178 [[nodiscard]] audio_editing::Result<void> rebuildWaveform();
179 [[nodiscard]] audio_editing::Result<void> bindClockAudition();
180 [[nodiscard]] audio_editing::Result<void> syncLoop();
181 [[nodiscard]] audio_editing::Result<void> publishLive();
182 [[nodiscard]] audio_editing::Revision auditionRevision() const;
183 void seedPreviewDocument();
184 void generateTonePcm();
185
195 struct LiveAudition;
196 std::unique_ptr<LiveAudition> liveAudition_;
197 bool liveBound_ = false;
198 std::uint64_t pcmRevision_ = 1;
199 std::uint64_t txSequence_ = 0;
200 float viewportWidth_ = 640.0f;
201};
202
203} // namespace eve::audio_editor
double value
float x
Definition AnimClip.cpp:738
float duration
#define EVENGINE_API_EDITORS
Definition Export.h:112
std::uint32_t width
std::uint64_t revision
std::string path
Definition PlayHost.cpp:110
std::uint32_t targetId
uint32_t index
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Revision-safe play/pause/seek/custom-loop state machine for asset audition.
Serializable audio-source authoring target independent of OpenAL handles.
Definition AudioTarget.h:19
Codec-neutral waveform generation and loop QA service.
Minimal playback backend boundary used by the deterministic transport controller.
Clock-backed audition used when no live OpenAL Source is attached.
void setNativeLooping(bool) override
Sets the native looping.
audio_editing::Result< void > seek(double seconds) override
Seeks .
void setDuration(double seconds)
Install clip length before bind.
double duration() const override
Duration.
void advance(double deltaSeconds)
Advance playhead when playing.
Timeline-style controller for one authored audio source.
const audio_editing::AudioSourceTarget & target() const noexcept
Borrow the authoritative source document.
AudioSourceEditor & operator=(const AudioSourceEditor &)=delete
bool canRedo() const noexcept
Can redo.
audio_editing::EditorValue snapshot() const
Canonical snapshot of the source document.
std::uint64_t pcmRevision() const noexcept
Pcm revision.
AudioSourceEditor(const AudioSourceEditor &)=delete
In-process authority for a single editable runtime or document target.
Deterministic owning value tree shared by authoring hosts.
Composition model shared by project-specific developer and runtime editors.
Local transaction coordinator backed by an injected edit authority.
Immutable revision-tagged audition playhead observation.
Revision-tagged waveform and loop-preview diagnostics.
Decoded interleaved PCM supplied by an audio importer or codec plugin.
SelectionSnapshot public API.
uint32_t bucket