载入中...
搜索中...
未找到
LocalizationRuntime.cpp
浏览该文件的文档.
2
3#include "audio/Source.h"
5
6#include <algorithm>
7#include <utility>
8
10namespace {
11
12Result<void> auditionError(EditorStatus status, const char* rule, std::string message) {
13 return eve::editing::failed<void>(status, RuleId(rule), std::move(message));
14}
15
16} // namespace
17
19 const std::string& key,
20 const std::string& locale,
22 const SourceResolver& sources) const {
23 if (!voice || !sources || key.empty() || locale.empty())
24 return auditionError(EditorStatus::Rejected, "editor.localization.invalid-audition-input",
25 "Voice audition requires key, locale, voice service and source resolver");
26 const auto rows = document.rows();
27 const auto row = std::find_if(rows.begin(), rows.end(),
28 [&](const LocalizationRow& item) { return item.key == key; });
29 if (row == rows.end())
30 return auditionError(EditorStatus::NotFound, "editor.localization.key-not-found",
31 "Localization key was not found: " + key);
32 const auto variant = row->variants.find(locale);
33 if (variant == row->variants.end() || variant->second.voiceAsset.empty())
34 return auditionError(EditorStatus::NotFound, "editor.localization.voice-not-found",
35 "Localized voice asset is missing: " + key + " / " + locale);
36 audio::Source* source = sources(variant->second.voiceAsset);
37 if (!source)
38 return auditionError(EditorStatus::NotFound, "editor.localization.voice-asset-unresolved",
39 "Voice asset could not be resolved: " + variant->second.voiceAsset);
40 voice->stop();
41 if (!voice->bindSource(key, locale, source) || !voice->play(key, locale))
42 return auditionError(EditorStatus::Failed, "editor.localization.voice-playback-failed",
43 "Voice source could not be registered or played");
44 return eve::editing::applied<void>();
45}
46
47} // namespace eve::localization_editing
std::string variant
int rows
std::string message
std::uint32_t key
wgpu::PopErrorScopeStatus status
const UnitySourceAsset & source
Move-only operation result carrying either a value or Status.
Definition Result.h:155
A playable audio source (static buffer or streaming decoder). Not thread-safe for playback control ex...
Definition Source.h:30
Localized voice assets, duration-based advance, and amplitude lip sync.
bool bindSource(const std::string &lineId, const std::string &locale, audio::Source *source)
Bind a playable Audio Source; the caller retains source ownership.
bool play(const std::string &lineId, const std::string &locale)
Play.
UI-neutral localization table with deterministic persistence and QA.
std::vector< LocalizationRow > rows() const
Return rows in deterministic key order.
Result< void > play(const LocalizationDocument &document, const std::string &key, const std::string &locale, dialogue::DialogueVoice *voice, const SourceResolver &sources) const
Resolve, register and start a locale voice clip without changing the document.
std::function< audio::Source *(const std::string &asset)> SourceResolver
One stable localization key and all locale variants.