故障排除
语言模型部署问题
大多数问题与语言模型部署有关,这可能会在打包构建中引发问题。具体来说,你可能会遇到以下日志:
LogRuntimeSpeechRecognizer: Error: Language model loading failed: Failed to load the language model asset '/RuntimeSpeechRecognizer/LanguageModels/LanguageModel.LanguageModel'
要解决此问题,请转到 项目设置,然后导航到 项目 -> 打包 部分。向下滚动并展开高级类别,确保:
DirectoriesToAlwaysCook(标记为Additional Asset Directories to Cook)中有一个指向/RuntimeSpeechRecognizer/LanguageModels的条目。这通常由插件在编辑器运行时自动完成,但一些用户报告需要手动操作,因此请务必检查。这对于确保语言模型资产始终包含在打包构建中是必要的。

bCookMapsOnly设置为false。如果设置为true,它将忽略前一个属性,并且语言模型资产可能无法正确打包。这通常也由插件自动完成,但为了确保万无一失,也请手动检查此变量。

可能还有其他属性会影响引擎的打包行为,随着调查的深入,后续可能会将相关内容添加到此页面。
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;
这将强制 Unreal Engine 在 Android 和 iOS 上使用 ANSI 分配器,与 whisper.cpp 使用的分配器保持一致。