Pular para o conteúdo principal

Solução de problemas

Problemas de Preparação do Modelo de Linguagem

A maioria dos problemas está relacionada à preparação do modelo de linguagem, o que pode causar problemas no build empacotado. Especificamente, você pode encontrar os seguintes logs:

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

Para corrigir isso, vá em Project Settings, depois navegue até a seção Project -> Packaging. Role para baixo, expanda a categoria Advanced e certifique-se de que:

  1. DirectoriesToAlwaysCook (chamado de Additional Asset Directories to Cook) contém uma entrada para /RuntimeSpeechRecognizer/LanguageModels. Isso é feito automaticamente pelo plugin em tempo de editor, mas alguns usuários relataram que é preciso fazer manualmente, então não deixe de verificar. Isso é necessário para garantir que o asset do modelo de linguagem esteja sempre presente no build empacotado.

Additional Asset Directories to Cook

  1. bCookMapsOnly está definido como false. Se estiver definido como true, ele ignorará a propriedade anterior e existe a possibilidade de o asset do modelo de linguagem não ser preparado corretamente. Isso também é feito automaticamente pelo plugin, mas apenas para garantir, verifique também esta variável manualmente.

Additional Asset Directories to Cook

Quedas no Android e iOS

Em alguns casos no Android e no iOS, podem ocorrer travamentos durante o tempo de execução (como durante testes no TestFlight). Isso é causado pelos requisitos de alocação de memória da biblioteca subjacente whisper.cpp, que entram em conflito com os alocadores padrão do Unreal Engine nessas plataformas. Em outras plataformas, o FMalloc usa como padrão o alocador ANSI, portanto esse problema é específico do Android e do iOS.

Para resolver isso, você precisa forçar o alocador ANSI no arquivo Target.cs do seu projeto:

Para Unreal Engine 5.5 e anteriores:

  • Seu projeto deve usar uma engine compilada a partir do código-fonte (não um binário pré-compilado)
  • Adicione a seguinte linha ao seu arquivo Target.cs:
GlobalDefinitions.Add("FORCE_ANSI_ALLOCATOR=1");

Para Unreal Engine 5.6 e versões posteriores:

  • Funciona com builds do mecanismo tanto compilados a partir do código-fonte quanto pré-compilados
  • Adicione as duas linhas a seguir ao seu arquivo Target.cs:
bOverrideBuildEnvironment = true;
StaticAllocator = StaticAllocatorType.Ansi;

Isso força o Unreal Engine a usar o alocador ANSI no Android e iOS, correspondendo ao alocador usado pelo whisper.cpp.

nota

Esta solução alternativa aborda um conflito de alocador específico do whisper.cpp. Se o seu projeto usa a extensão Vosk como provedor no Android, esta etapa não é necessária.