Перейти к основному содержимому

Устранение неполадок

Проблемы с подготовкой языковой модели

Большинство проблем связано с этапом подготовки языковой модели, что может вызывать неполадки в упакованной сборке. А именно, вы можете увидеть следующие логи:

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.

Чтобы решить эту проблему, вам нужно принудительно использовать ANSI-аллокатор в файле Target.cs вашего проекта:

Для 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 использовать аллокатор ANSI на Android и iOS, что соответствует аллокатору, используемому whisper.cpp.

примечание

Это обходное решение устраняет конфликт аллокаторов, специфичный для whisper.cpp. Если ваш проект использует расширение Vosk в качестве провайдера на Android, этот шаг не требуется.