Устранение неполадок
Проблемы с подготовкой языковой модели
Большинство проблем связано с этапом подготовки языковой модели, что может вызывать неполадки в упакованной сборке. А именно, вы можете увидеть следующие логи:
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.
Чтобы решить эту проблему, вам нужно принудительно использовать 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, этот шаг не требуется.