Saltar al contenido principal

Solución de problemas

Problemas de Preparación del Modelo de Lenguaje

La mayoría de los problemas están relacionados con la preparación del modelo de lenguaje, lo que puede causar problemas en la compilación empaquetada. Concretamente, es posible que encuentres los siguientes registros:

LogRuntimeSpeechRecognizer: Error: Language model loading failed: Failed to load the language model asset '/RuntimeSpeechRecognizer/LanguageModels/LanguageModel.LanguageModel'

Para solucionarlo, ve a Configuración del Proyecto y navega hasta la sección Proyecto -> Empaquetado. Desplázate hacia abajo y muestra la categoría Avanzado, y asegúrate de que:

  1. DirectoriesToAlwaysCook (etiquetado como Additional Asset Directories to Cook) tiene una entrada para /RuntimeSpeechRecognizer/LanguageModels en su interior. Esto lo hace automáticamente el plugin durante el tiempo de editor, pero algunos usuarios han informado que tienen que hacerlo manualmente, así que asegúrate de comprobarlo. Esto es necesario para garantizar que el activo del modelo de lenguaje esté siempre incluido en la compilación empaquetada.

Additional Asset Directories to Cook

  1. bCookMapsOnly está establecido en false. Si se establece en true, ignorará la propiedad anterior, y existe la posibilidad de que el activo del modelo de lenguaje no se prepare correctamente. Esto también lo hace automáticamente el complemento, pero para estar seguro, verifique esta variable manualmente también.

Additional Asset Directories to Cook

Bloqueos en Android e iOS

En algunos casos en Android e iOS, pueden ocurrir bloqueos durante el tiempo de ejecución (por ejemplo, durante las pruebas con TestFlight). Esto se debe a que los requisitos de asignación de memoria de la biblioteca subyacente whisper.cpp entran en conflicto con los asignadores por defecto de Unreal Engine en estas plataformas. En otras plataformas, FMalloc usa por defecto el asignador ANSI, por lo que este problema es específico de Android e iOS.

Para resolver esto, debes forzar el asignador ANSI en el archivo Target.cs de tu proyecto:

Para Unreal Engine 5.5 y versiones anteriores:

  • Su proyecto debe usar un motor compilado desde el código fuente (no un binario precompilado)
  • Agregue la siguiente línea a su archivo Target.cs:
GlobalDefinitions.Add("FORCE_ANSI_ALLOCATOR=1");

Para Unreal Engine 5.6 y versiones posteriores:

  • Funciona tanto con compilaciones del motor desde el código fuente como con compilaciones precompiladas
  • Agrega las siguientes dos líneas a tu archivo Target.cs:
bOverrideBuildEnvironment = true;
StaticAllocator = StaticAllocatorType.Ansi;

Esto obliga a Unreal Engine a usar el asignador ANSI en Android e iOS, coincidiendo con el asignador utilizado por whisper.cpp.

nota

Esta solución alternativa aborda un conflicto de asignador específico de whisper.cpp. Si tu proyecto usa la extensión de Vosk como proveedor en Android, este paso no es necesario.