KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
UVoiceCacheManager 클래스 참조

TTS 오디오 데이터를 캐싱하여 네트워크 요청을 최소화하는 서브시스템입니다. 더 자세히 ...

#include <UAudioCacheManager.h>

+ UVoiceCacheManager에 대한 상속 다이어그램 :
+ UVoiceCacheManager에 대한 협력 다이어그램:

Public 멤버 함수

void ClearCache ()
 전체 캐시를 초기화합니다 (메모리 + 디스크).
 
 DEFINE_SUBSYSTEM_GETTER_INLINE (UVoiceCacheManager)
 
virtual void Deinitialize () override
 서브시스템 종료 시 메모리 캐시를 정리합니다.
 
virtual void Initialize (FSubsystemCollectionBase &Collection) override
 서브시스템 초기화 시 캐시 디렉토리를 생성합니다.
 
void SaveToCache (const FString &AudioText, const TArray< uint8 > &AudioData)
 오디오 데이터를 메모리와 디스크 캐시에 저장합니다.
 
bool TryGetCachedAudio (const FString &AudioText, TArray< uint8 > &OutAudioData)
 캐시에서 오디오 데이터를 조회합니다.
 

정적 Private 멤버 함수

static FString GenerateCacheFileName (const FString &AudioText)
 AudioText를 MD5 해시하여 파일명을 생성합니다.
 
static FString GetCacheDirectory ()
 캐시 디렉토리 경로를 반환합니다.
 
static bool LoadFromDisk (const FString &AudioText, TArray< uint8 > &OutAudioData)
 디스크에서 오디오 데이터를 로드합니다.
 
static bool SaveToDisk (const FString &AudioText, const TArray< uint8 > &AudioData)
 디스크에 오디오 데이터를 저장합니다.
 

Private 속성

TMap< FString, TArray< uint8 > > MemoryCache
 메모리 캐시 (Key: AudioText, Value: 오디오 데이터)
 

상세한 설명

TTS 오디오 데이터를 캐싱하여 네트워크 요청을 최소화하는 서브시스템입니다.

2단계 캐싱 전략:

  • 1단계: 메모리 캐시 (TMap) - 빠른 접근
  • 2단계: 디스크 캐시 (파일 시스템) - 영구 저장

AudioText를 키로 사용하며, 파일명은 MD5 해시로 생성됩니다.

UAudioCacheManager.h 파일의 24 번째 라인에서 정의되었습니다.

멤버 함수 문서화

◆ ClearCache()

void UVoiceCacheManager::ClearCache ( )

전체 캐시를 초기화합니다 (메모리 + 디스크).

UAudioCacheManager.cpp 파일의 82 번째 라인에서 정의되었습니다.

83{
84 // [1] 메모리 캐시 초기화
85 MemoryCache.Empty();
86
87 // [2] 디스크 캐시 초기화
88 FString CacheDir = GetCacheDirectory();
89 IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
90
91 TArray<FString> Files;
92 PlatformFile.FindFiles(Files, *CacheDir, TEXT(".wav"));
93
94 int32 DeletedCount = 0;
95 for (const FString& File : Files)
96 {
97 FString FullPath = CacheDir / File;
98 if (PlatformFile.DeleteFile(*FullPath))
99 {
100 DeletedCount++;
101 }
102 }
103}
TMap< FString, TArray< uint8 > > MemoryCache
메모리 캐시 (Key: AudioText, Value: 오디오 데이터)
static FString GetCacheDirectory()
캐시 디렉토리 경로를 반환합니다.

다음을 참조함 : GetCacheDirectory(), MemoryCache.

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ DEFINE_SUBSYSTEM_GETTER_INLINE()

UVoiceCacheManager::DEFINE_SUBSYSTEM_GETTER_INLINE ( UVoiceCacheManager  )

◆ Deinitialize()

void UVoiceCacheManager::Deinitialize ( )
overridevirtual

서브시스템 종료 시 메모리 캐시를 정리합니다.

UAudioCacheManager.cpp 파일의 35 번째 라인에서 정의되었습니다.

36{
37 // 메모리 캐시 정리
38 MemoryCache.Empty();
39 Super::Deinitialize();
40}

다음을 참조함 : MemoryCache.

◆ GenerateCacheFileName()

FString UVoiceCacheManager::GenerateCacheFileName ( const FString &  AudioText)
staticprivate

AudioText를 MD5 해시하여 파일명을 생성합니다.

매개변수
AudioText[in] TTS 텍스트
반환값
MD5 해시 기반 파일명 (예: "5d41402abc4b2a76b9719d911017c592.wav")

UAudioCacheManager.cpp 파일의 106 번째 라인에서 정의되었습니다.

107{
108 return UCommonFunctionLibrary::GererateMD5(AudioText) + TEXT(".wav");
109}
static FString GererateMD5(const FString &InText)

다음을 참조함 : UCommonFunctionLibrary::GererateMD5().

다음에 의해서 참조됨 : LoadFromDisk(), SaveToDisk().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetCacheDirectory()

FString UVoiceCacheManager::GetCacheDirectory ( )
staticprivate

캐시 디렉토리 경로를 반환합니다.

반환값
캐시 디렉토리 절대 경로 (예: "[ProjectSavedDir]/AudioCache")

UAudioCacheManager.cpp 파일의 111 번째 라인에서 정의되었습니다.

112{
113 return FPaths::ProjectSavedDir() / TEXT("VoiceCache");
114}

다음에 의해서 참조됨 : ClearCache(), Initialize(), LoadFromDisk(), SaveToDisk().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Initialize()

void UVoiceCacheManager::Initialize ( FSubsystemCollectionBase &  Collection)
overridevirtual

서브시스템 초기화 시 캐시 디렉토리를 생성합니다.

UAudioCacheManager.cpp 파일의 18 번째 라인에서 정의되었습니다.

19{
20 Super::Initialize(Collection);
21
22 // 캐시 디렉토리 생성
23 FString CacheDir = GetCacheDirectory();
24 IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
25
26 if (!PlatformFile.DirectoryExists(*CacheDir))
27 {
28 if (PlatformFile.CreateDirectory(*CacheDir))
29 {
30 PRINTLOG(TEXT("[AudioCache] Cache directory created: %s"), *CacheDir);
31 }
32 }
33}
#define PRINTLOG(fmt,...)
Definition GameLogging.h:30

다음을 참조함 : GetCacheDirectory(), PRINTLOG.

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ LoadFromDisk()

bool UVoiceCacheManager::LoadFromDisk ( const FString &  AudioText,
TArray< uint8 > &  OutAudioData 
)
staticprivate

디스크에서 오디오 데이터를 로드합니다.

매개변수
AudioText[in] TTS 텍스트
OutAudioData[out] 로드된 오디오 데이터
반환값
로드 성공 여부

UAudioCacheManager.cpp 파일의 116 번째 라인에서 정의되었습니다.

117{
118 FString CacheFilePath = GetCacheDirectory() / GenerateCacheFileName(AudioText);
119 return FFileHelper::LoadFileToArray(OutAudioData, *CacheFilePath);
120}
static FString GenerateCacheFileName(const FString &AudioText)
AudioText를 MD5 해시하여 파일명을 생성합니다.

다음을 참조함 : GenerateCacheFileName(), GetCacheDirectory().

다음에 의해서 참조됨 : TryGetCachedAudio().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SaveToCache()

void UVoiceCacheManager::SaveToCache ( const FString &  AudioText,
const TArray< uint8 > &  AudioData 
)

오디오 데이터를 메모리와 디스크 캐시에 저장합니다.

매개변수
AudioText[in] TTS 텍스트 (캐시 키)
AudioData[in] TTS 오디오 데이터 (WAV 형식)

UAudioCacheManager.cpp 파일의 64 번째 라인에서 정의되었습니다.

65{
66 if (AudioData.Num() == 0)
67 {
68 PRINTLOG(TEXT("[AudioCache] Cannot save empty audio data: %s"), *AudioText);
69 return;
70 }
71
72 // 메모리 캐시 저장
73 if (MemoryCache.Contains(AudioText))
74 // 기존 항목 제거 후 다시 추가
75 MemoryCache.Remove(AudioText);
76 MemoryCache.Add(AudioText, AudioData);
77
78 // [2] 디스크 캐시 저장
79 SaveToDisk(AudioText, AudioData);
80}
static bool SaveToDisk(const FString &AudioText, const TArray< uint8 > &AudioData)
디스크에 오디오 데이터를 저장합니다.

다음을 참조함 : MemoryCache, PRINTLOG, SaveToDisk().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ SaveToDisk()

bool UVoiceCacheManager::SaveToDisk ( const FString &  AudioText,
const TArray< uint8 > &  AudioData 
)
staticprivate

디스크에 오디오 데이터를 저장합니다.

매개변수
AudioText[in] TTS 텍스트
AudioData[in] 저장할 오디오 데이터
반환값
저장 성공 여부

UAudioCacheManager.cpp 파일의 122 번째 라인에서 정의되었습니다.

123{
124 FString CacheDir = GetCacheDirectory();
125 IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
126
127 if (!PlatformFile.DirectoryExists(*CacheDir))
128 {
129 if (!PlatformFile.CreateDirectory(*CacheDir))
130 {
131 return false;
132 }
133 }
134
135 // 파일 저장
136 FString CacheFilePath = CacheDir / GenerateCacheFileName(AudioText);
137 return FFileHelper::SaveArrayToFile(AudioData, *CacheFilePath);
138}

다음을 참조함 : GenerateCacheFileName(), GetCacheDirectory().

다음에 의해서 참조됨 : SaveToCache().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ TryGetCachedAudio()

bool UVoiceCacheManager::TryGetCachedAudio ( const FString &  AudioText,
TArray< uint8 > &  OutAudioData 
)

캐시에서 오디오 데이터를 조회합니다.

매개변수
AudioText[in] TTS 텍스트 (캐시 키)
OutAudioData[out] 캐시된 오디오 데이터 (WAV 형식)
반환값
캐시 히트 여부 (true: 히트, false: 미스)

UAudioCacheManager.cpp 파일의 42 번째 라인에서 정의되었습니다.

43{
44 // 메모리 캐시 확인
45 if (TArray<uint8>* Found = MemoryCache.Find(AudioText))
46 {
47 OutAudioData = *Found;
48 return true;
49 }
50
51 // 디스크 캐시 확인
52 if (LoadFromDisk(AudioText, OutAudioData))
53 {
54 // 메모리 캐시에도 저장 (다음번 빠른 접근)
55 if (!MemoryCache.Contains(AudioText))
56 MemoryCache.Add(AudioText, OutAudioData);
57
58 return true;
59 }
60
61 return false;
62}
static bool LoadFromDisk(const FString &AudioText, TArray< uint8 > &OutAudioData)
디스크에서 오디오 데이터를 로드합니다.

다음을 참조함 : LoadFromDisk(), MemoryCache.

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ MemoryCache

TMap<FString, TArray<uint8> > UVoiceCacheManager::MemoryCache
private

메모리 캐시 (Key: AudioText, Value: 오디오 데이터)

UAudioCacheManager.h 파일의 90 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ClearCache(), Deinitialize(), SaveToCache(), TryGetCachedAudio().


이 클래스에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: