13#include "Misc/Paths.h"
14#include "Misc/FileHelper.h"
15#include "Misc/SecureHash.h"
16#include "HAL/PlatformFileManager.h"
20 Super::Initialize(Collection);
24 IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
26 if (!PlatformFile.DirectoryExists(*CacheDir))
28 if (PlatformFile.CreateDirectory(*CacheDir))
30 PRINTLOG(TEXT(
"[AudioCache] Cache directory created: %s"), *CacheDir);
39 Super::Deinitialize();
45 if (TArray<uint8>* Found =
MemoryCache.Find(AudioText))
47 OutAudioData = *Found;
66 if (AudioData.Num() == 0)
68 PRINTLOG(TEXT(
"[AudioCache] Cannot save empty audio data: %s"), *AudioText);
89 IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
91 TArray<FString> Files;
92 PlatformFile.FindFiles(Files, *CacheDir, TEXT(
".wav"));
94 int32 DeletedCount = 0;
95 for (
const FString& File : Files)
97 FString FullPath = CacheDir / File;
98 if (PlatformFile.DeleteFile(*FullPath))
113 return FPaths::ProjectSavedDir() / TEXT(
"VoiceCache");
119 return FFileHelper::LoadFileToArray(OutAudioData, *CacheFilePath);
125 IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
127 if (!PlatformFile.DirectoryExists(*CacheDir))
129 if (!PlatformFile.CreateDirectory(*CacheDir))
137 return FFileHelper::SaveArrayToFile(AudioData, *CacheFilePath);
YiSan 전반에서 사용하는 공용 인터페이스를 선언합니다.
#define PRINTLOG(fmt,...)
TTS 오디오 데이터를 메모리와 디스크에 캐싱하는 서브시스템을 선언합니다.
UCommonFunctionLibrary 클래스를 선언합니다.
static FString GererateMD5(const FString &InText)
bool TryGetCachedAudio(const FString &AudioText, TArray< uint8 > &OutAudioData)
캐시에서 오디오 데이터를 조회합니다.
static FString GenerateCacheFileName(const FString &AudioText)
AudioText를 MD5 해시하여 파일명을 생성합니다.
virtual void Initialize(FSubsystemCollectionBase &Collection) override
서브시스템 초기화 시 캐시 디렉토리를 생성합니다.
void SaveToCache(const FString &AudioText, const TArray< uint8 > &AudioData)
오디오 데이터를 메모리와 디스크 캐시에 저장합니다.
TMap< FString, TArray< uint8 > > MemoryCache
메모리 캐시 (Key: AudioText, Value: 오디오 데이터)
static FString GetCacheDirectory()
캐시 디렉토리 경로를 반환합니다.
void ClearCache()
전체 캐시를 초기화합니다 (메모리 + 디스크).
virtual void Deinitialize() override
서브시스템 종료 시 메모리 캐시를 정리합니다.
static bool SaveToDisk(const FString &AudioText, const TArray< uint8 > &AudioData)
디스크에 오디오 데이터를 저장합니다.
static bool LoadFromDisk(const FString &AudioText, TArray< uint8 > &OutAudioData)
디스크에서 오디오 데이터를 로드합니다.