跳至主要内容

疑難排解

語言模型暫存問題

大多數問題都與語言模型暫存有關,這可能會在打包建置中引發問題。具體來說,您可能會遇到以下日誌:

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. bCookMapsOnly 設定為 false。如果設定為 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;

這會強制 Unreal Engine 在 Android 和 iOS 上使用 ANSI 分配器,以匹配 whisper.cpp 所使用的分配器。