본문으로 건너뛰기

문제 해결

언어 모델 스테이징 문제

대부분의 문제는 언어 모델 스테이징과 관련이 있으며, 이로 인해 패키징된 빌드에서 문제가 발생할 수 있습니다. 즉, 다음과 같은 로그가 나타날 수 있습니다.

LogRuntimeSpeechRecognizer: Error: Language model loading failed: Failed to load the language model asset '/RuntimeSpeechRecognizer/LanguageModels/LanguageModel.LanguageModel'

이 문제를 해결하려면 프로젝트 설정으로 이동한 다음 프로젝트 -> 패키징 섹션으로 이동하세요. 아래로 스크롤하여 고급 범주를 펼치고 다음을 확인하세요:

  1. DirectoriesToAlwaysCook(Additional Asset Directories to Cook로 표시됨)에는 /RuntimeSpeechRecognizer/LanguageModels 항목이 포함되어 있습니다. 이는 플러그인이 에디터에서 자동으로 수행하지만, 일부 사용자는 수동으로 수행해야 한다고 보고했으므로 확인해 주시기 바랍니다. 언어 모델 에셋이 항상 패키징된 빌드에 포함되도록 하려면 이 설정이 필요합니다.

Additional Asset Directories to Cook

  1. bCookMapsOnlyfalse로 설정되어 있습니다. 만약 true로 설정하면 이전 속성은 무시되고, 언어 모델 에셋이 제대로 스테이징되지 않을 가능성이 있습니다. 이 작업은 플러그인에서도 자동으로 수행되지만, 확실히 하기 위해 이 변수를 수동으로도 확인해 주세요.

Additional Asset Directories to Cook

Android 및 iOS 크래시

경우에 따라 Android 및 iOS에서 런타임 중(예: TestFlight 테스트 중) 크래시가 발생할 수 있습니다. 이는 내부적으로 사용되는 whisper.cpp 라이브러리의 메모리 할당 요구 사항이 해당 플랫폼에서 Unreal Engine의 기본 할당자와 충돌하기 때문에 발생합니다. 다른 플랫폼에서는 FMalloc이 기본적으로 ANSI 할당자를 사용하므로, 이 문제는 Android 및 iOS에만 해당됩니다.

이 문제를 해결하려면 프로젝트의 Target.cs 파일에서 ANSI 할당자를 강제로 지정해야 합니다:

Unreal Engine 5.5 및 이전 버전의 경우:

  • 프로젝트는 사전 컴파일된 바이너리가 아닌 소스 빌드 엔진을 사용해야 합니다.
  • Target.cs 파일에 다음 줄을 추가하세요:
GlobalDefinitions.Add("FORCE_ANSI_ALLOCATOR=1");

Unreal Engine 5.6 이상:

  • 소스 빌드 및 사전 컴파일된 엔진 빌드 모두에서 작동합니다.
  • Target.cs 파일에 다음 두 줄을 추가하세요.
bOverrideBuildEnvironment = true;
StaticAllocator = StaticAllocatorType.Ansi;

This forces Unreal Engine to use the ANSI allocator on Android and iOS, matching the allocator used by whisper.cpp.

노트

이 우회 방법은 whisper.cpp 특유의 할당자 충돌을 해결합니다. 프로젝트가 Android에서 Vosk 확장을 공급자로 사용하는 경우 이 단계는 필요하지 않습니다.