Log in to leave a comment
No posts yet
Ao olhar para as faturas mensais do ElevenLabs ou OpenAI TTS, é impossível não suspirar. Para um desenvolvedor de jogos indie, os custos de chamada de API são despesas fixas que sufocam o projeto. O Kokoro 82M é um modelo de código aberto com licença Apache 2.0 que produz vozes de nível comercial em um ambiente local. Ao rodar esse modelo leve de 82 milhões de parâmetros no seu PC, você não precisa mais ficar à mercê das mudanças de política de servidores externos.
A maior preocupação ao rodar um modelo local é a queda brusca de frames no jogo. Para evitar a carga de CPU gerada durante a síntese de voz, é necessário controlar rigidamente as threads de computação. O Kokoro 82M segue a estrutura StyleTTS 2, sendo mais eficiente quando executado com o runtime ONNX.
SessionOptions do ONNX, limite o intra_op_num_threads a menos da metade do total de núcleos. Para uma CPU de 8 núcleos, alocar 2 a 4 é o suficiente.enable_cpu_mem_arena para evitar a fragmentação de memória. Isso elimina pequenos lags que ocorrem ao gerar áudio em segundo plano.asyncio para enviar o primeiro bloco de dados para o dispositivo de áudio assim que ele for gerado.Com essas configurações, o tempo para a primeira fala (TTFA) pode ser reduzido para menos de 0,5 segundos.
Por mais excelente que o Kokoro 82M seja, se ele ler "API" como "api" ou não processar corretamente "10%", a imersão é quebrada. Como este modelo foi treinado com base no Alfabeto Fonético Internacional (IPA), o processo de normalização do texto de entrada é essencial.
Em vez de apenas inserir o texto, crie um dicionário de mapeamento com expressões regulares. O termo r'\bAPI\b' deve ser convertido para "에이피아이" (ei-pi-ai), e os números devem ser escritos por extenso de acordo com o contexto, como "한 개" ou "일 퍼센트". Particularmente, as regras de ligação fonética do coreano podem ser resolvidas usando bibliotecas auxiliares como korean-text-normalizer. Isso pode economizar até 5 horas por semana que seriam gastas editando arquivos de áudio manualmente.
Não é necessário refazer todo o código do SDK da OpenAI que você já utiliza. Ao subir um servidor leve com FastAPI no localhost, você substitui a API paga apenas alterando uma linha no endereço do endpoint.
/v1/audio/speech e projete-a para receber dados JSON no padrão da OpenAI.INT8 de 92,4 MB. A velocidade de inferência é mais de 3 vezes superior ao modelo padrão, enquanto a diferença na qualidade do áudio perceptível ao ouvido é mínima.pydub para retornar imediatamente em .mp3 ou .wav.Dessa forma, você mantém a base de código que dependia de serviços pagos, enquanto elimina completamente o custo das assinaturas mensais.
Modelos leves possuem a limitação de apresentar falhas na pronúncia ou ruídos robóticos ao processar frases longas com mais de 500 caracteres de uma só vez. Para resolver isso, é necessário dividir as frases de forma inteligente.
Divida o texto com base em pontos e vírgulas e, em seguida, utilize AudioSegment.silent para inserir obrigatoriamente um silêncio de 200 a 500 ms entre as frases. Simular o ciclo de respiração humana é o suficiente para eliminar a artificialidade do modelo. O segredo não é apenas dividir o texto, mas sim a lógica de reprodução contínua (seamless) que conecta os fragmentos de áudio de forma natural. Ao automatizar este processo, até diálogos longos podem ter uma atuação natural e sem interrupções.