疑難排解
語言模型暫存問題
大多數問題都與語言模型暫存有關,這可能會在打包建置中引發問題。具體來說,您可能會遇到以下日誌:
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 所使用的分配器。