Fish Audio S2 Pro: Guia Rápido para Clonagem de Voz e TTS Multilíngue

Fish Audio S2 Pro: Guia Rápido para Clonagem de Voz e TTS Multilíngue

O Fish Audio S2 Pro está disponível na Novita AI como uma API de TTS hospedada, sem inicializações a frio. Este guia rápido cobre o caminho do desenvolvedor: obter sua chave de API, confirmar o endpoint, enviar sua primeira requisição de TTS com uma voz clonada e entender os parâmetros importantes para clonagem de voz e controle de emoção. O S2 Pro é construído em uma arquitetura Dual-Autoregressive treinada em um grande corpus multilíngue — a característica que o diferencia de TTS genéricos é que cada voz que você clona funciona em todos os idiomas suportados sem necessidade de retreinamento.

Quando Usar Este Guia Rápido

Use este guia se você precisa:

  • Sintetizar fala a partir de texto em uma ampla gama de idiomas suportados usando uma voz clonada personalizada.
  • Clonar uma voz a partir de uma amostra de áudio de 10 a 30 segundos e reutilizá-la em várias requisições sem custo adicional por requisição.
  • Controlar prosódia e emoção inline usando tags de colchetes em linguagem natural ([whisper], [excited]).
  • Construir pipelines que necessitem de TTS multilíngue sem integrações separadas por idioma.

Se você precisa apenas de TTS básico em inglês com vozes integradas e sem clonagem, avalie primeiro o modelo Fish Audio S1 ou o GLM TTS — a vantagem do S2 Pro aparece quando você precisa de clonagem multilíngue ou controle de emoção refinado.

Passo 1: Obtenha Sua Chave de API da Novita

Crie uma conta na Novita AI e gere uma chave de API no console da Novita AI. Armazene-a como uma variável de ambiente:

export NOVITA_API_KEY="sua_chave_api_aqui"

Mantenha a chave fora do código do lado do cliente, bundles frontend e repositórios públicos.

Passo 2: Confirme o Modelo e o Endpoint

A documentação da Novita AI para o Fish Audio S2 Pro TTS está na referência da API Fish Audio S2 Pro. Verifique o caminho do endpoint atual e o identificador do modelo antes de codificar — a URL do endpoint hospedado e o schema da requisição estão confirmados nessa referência.

Para clonagem de voz, três endpoints da Novita são usados ao longo do fluxo de trabalho:

Etapa Método Endpoint
Enviar amostra de áudio POST https://api.novita.ai/v1/files
Criar clone (assíncrono) POST https://api.novita.ai/v1/async/voice-cloning
Consultar resultado GET https://api.novita.ai/v1/async/task-result
TTS com voz clonada POST https://api.novita.ai/v4beta/txt2speech

A clonagem de voz usa o modelo fish-audio-voice-cloning para a etapa de criação do clone, separado do modelo de TTS.

Passo 3: Clone uma Voz

A clonagem de voz requer três chamadas de API: enviar uma amostra de áudio curta, criar o clone e, em seguida, recuperar o voice_id. Depois de ter um voice_id, você pode reutilizá-lo em requisições de TTS indefinidamente sem custo adicional.

Requisitos para a amostra de áudio:

  • Duração: 10 a 30 segundos fornecem os melhores resultados
  • Formato: MP3 ou WAV
  • Conteúdo: Fala limpa com o mínimo de ruído de fundo
  • Transcrição: Fornecer o texto exato falado melhora a precisão do clone

Python: Fluxo completo de clonagem

import base64
import os
import time
import requests

API_KEY = os.environ["NOVITA_API_KEY"]
BASE_URL = "https://api.novita.ai"

# Etapa 1: Enviar arquivo de áudio
with open("voice_sample.mp3", "rb") as f:
    encoded_audio = base64.b64encode(f.read()).decode("utf-8")

upload_response = requests.post(
    f"{BASE_URL}/v1/files",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "file": encoded_audio,
        "purpose": "voice-cloning",
    },
)
upload_response.raise_for_status()
file_id = upload_response.json()["file_id"]
print(f"ID do arquivo enviado: {file_id}")

# Etapa 2: Criar o clone de voz
clone_response = requests.post(
    f"{BASE_URL}/v1/async/voice-cloning",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "model": "fish-audio-voice-cloning",
        "audio_file_id": file_id,
        "text": "Texto falado na amostra de áudio vai aqui.",
    },
)
clone_response.raise_for_status()
task_id = clone_response.json()["task_id"]
print(f"ID da tarefa de clone: {task_id}")

# Etapa 3: Consultar o voice_id
voice_id = None
while True:
    result = requests.get(
        f"{BASE_URL}/v1/async/task-result",
        headers={"Authorization": f"Bearer {API_KEY}"},
        params={"task_id": task_id},
    ).json()
    if result["status"].endswith("SUCCEED"):
        voice_id = result["result"]["voice_id"]
        print(f"ID da voz clonada: {voice_id}")
        break
    elif "FAILED" in result["status"]:
        raise RuntimeError(f"Falha no clone: {result}")
    time.sleep(2)

Salve o voice_id. Você o usará como reference_id em cada chamada de TTS.

cURL: Criação de clone (após o envio do arquivo)

curl -s -X POST https://api.novita.ai/v1/async/voice-cloning \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "fish-audio-voice-cloning",
    "audio_file_id": "SEU_FILE_ID",
    "text": "Texto falado na amostra de áudio vai aqui."
  }'

Passo 4: Envie uma Requisição de TTS

Depois de ter um voice_id do Passo 3, passe-o como reference_id na requisição de TTS. O modelo gera fala na voz clonada.

Python

import os
import requests

API_KEY = os.environ["NOVITA_API_KEY"]
VOICE_ID = "sua_voice_id_clonada"  # do Passo 3

response = requests.post(
    "https://api.novita.ai/v4beta/txt2speech",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "text": "Bem-vindo à demonstração. Esta voz foi clonada a partir de uma amostra de áudio curta.",
        "reference_id": VOICE_ID,
        "format": "mp3",
        "sample_rate": 44100,
    },
)
response.raise_for_status()
audio_url = response.json()["audio_url"]
print(f"URL do áudio: {audio_url}")

cURL

curl -s -X POST https://api.novita.ai/v4beta/txt2speech \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Bem-vindo à demonstração. Esta voz foi clonada a partir de uma amostra de áudio curta.",
    "reference_id": "SUA_VOICE_ID_CLONADA",
    "format": "mp3",
    "sample_rate": 44100
  }'

A resposta contém um audio_url — uma URL pré-assinada apontando para o arquivo de áudio gerado.

Passo 5: Verifique Preços, Limites e Erros Comuns

Preços (verifique as taxas atuais em novita.ai/pricing):

Operação Preço
Geração de TTS ~$15,00 / 1M caracteres
Clonagem de voz $0,10 por voz (único)

A clonagem de voz é cobrada uma vez por clone, não por requisição de TTS. Uma vez clonado, usar o voice_id em chamadas de TTS custa apenas a taxa de TTS baseada em caracteres.

Limites por requisição:

Limite Valor
Tamanho máximo de entrada 10.000 caracteres
Amostra recomendada para clonagem 10 a 30 segundos
Formatos de saída suportados mp3, opus, wav, pcm
Taxa de amostragem de áudio Até 44.100 Hz

Erros comuns:

Erro Causa Correção
401 Unauthorized Chave de API inválida ou ausente Verifique se NOVITA_API_KEY está definida e correta
400 Bad Request no upload de arquivo Arquivo de áudio muito grande ou formato errado Use MP3/WAV, mantenha abaixo de alguns MB
Status FAILED da tarefa de clone Amostra de áudio muito curta ou muito ruidosa Use de 10 a 30 s de fala limpa
Áudio vazio ou distorcido Campo text vazio ou acima do limite Mantenha a entrada abaixo de 10.000 caracteres

Tags de Controle de Emoção

O S2 Pro suporta tags inline [colchetes] que controlam como o modelo renderiza palavras ou frases específicas. Elas são interpretadas como instruções em linguagem natural durante a geração — você não está limitado a uma lista fixa de tokens.

text_with_emotion = (
    "[cheerful] Bem-vindo de volta! [pause] "
    "Estou muito feliz que você está aqui. "
    "[whisper] Só entre nós, esta parte é um segredo. [normal] "
    "Enfim, vamos começar."
)

response = requests.post(
    "https://api.novita.ai/v4beta/txt2speech",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "text": text_with_emotion,
        "reference_id": VOICE_ID,
        "format": "mp3",
        "sample_rate": 44100,
    },
)

Exemplos de tags de colchetes que o modelo entende:

Tag Efeito
[whisper] Entonação sussurrada
[excited] Mais energia, ritmo mais rápido
[calm] Tom mais lento e medido
[laughs] Risada embutida na fala
[professional broadcast tone] Estilo de locutor de notícias
[pitch up] Aumenta o tom para o texto seguinte
[pause] Pequena pausa

As tags são descrições de forma livre, não valores de enumeração fixos. O modelo aprendeu mapeamentos de tag para acústica a partir dos dados de treinamento, então frases descritivas também funcionam. Experimente com tags específicas para seu caso de uso; os resultados podem variar com frases incomuns.

Parâmetros Principais

Parâmetro Tipo Observações
text string Obrigatório. Até 10.000 caracteres.
reference_id string Obrigatório. ID do modelo de voz — voice_id clonado ou uma referência de voz do sistema.
format string Formato de saída: mp3, opus, wav, pcm. Padrão: mp3.
sample_rate integer Taxa de amostragem de áudio em Hz. 44100 recomendado para alta fidelidade.
temperature number Controla a aleatoriedade da geração. Mais alto = prosódia mais variada.
top_p number Limiar de amostragem de núcleo.

Para o schema completo de parâmetros e quaisquer opções adicionais específicas do S2 Pro, consulte a referência da API Novita AI Fish Audio S2 Pro.

Solução de Problemas

A voz clonada parece robótica ou inconsistente. A amostra provavelmente era muito curta ou tinha ruído de fundo. Grave um clipe limpo de 20 a 30 segundos com um ritmo consistente e sem sobreposição. Fornecer a transcrição exata do texto da amostra na requisição de clone melhora o alinhamento fonético.

A URL do áudio retorna 404 após a consulta. URLs pré-assinadas expiram. Baixe ou processe o áudio imediatamente após receber a URL.

As tags de emoção não estão produzindo o efeito esperado. O comportamento das tags depende das distribuições dos dados de treinamento. Tente frases mais descritivas — por exemplo, [very softly, barely audible] em vez de [quiet]. Algumas tags funcionarão melhor que outras; teste com entradas curtas primeiro.

O status da tarefa de clone permanece pendente. Adicione um intervalo de consulta (1 a 2 segundos entre as verificações) para evitar limitar a taxa do endpoint de resultado da tarefa. Se a tarefa permanecer pendente por mais de dois minutos, verifique a etapa de upload do arquivo — o file_id pode ter expirado.

Precisa usar a mesma voz em vários idiomas. Passe o mesmo voice_id com texto em qualquer idioma suportado. O S2 Pro aplica o timbre da voz clonada ao novo idioma sem exigir um clone separado. Verifique a referência da API S2 Pro para a lista atual de idiomas suportados.

FAQ

O que torna o S2 Pro diferente do Fish Audio S1? O S2 Pro usa uma arquitetura Dual-Autoregressive maior, treinada em um amplo corpus multilíngue. As diferenças práticas: suporte mais amplo a idiomas, controle de emoção inline via tags de colchetes e capacidade de síntese com múltiplos falantes não disponível no S1. Veja a referência da API S2 Pro para a lista atual de idiomas.

Posso clonar uma voz uma vez e usá-la para todos os idiomas suportados? Sim. Uma voz clonada a partir de uma amostra em inglês pode gerar fala em japonês, espanhol, árabe ou qualquer outro idioma suportado usando o mesmo voice_id. O modelo transfere o timbre da voz entre idiomas sem treinamento adicional.

Qual deve ser a duração da amostra de voz? 10 a 30 segundos de fala limpa e consistente. Amostras mais curtas podem funcionar, mas podem produzir resultados menos estáveis. Amostras com mais de 30 segundos não melhoram significativamente a qualidade do clone.

A clonagem de voz é cobrada por requisição de TTS? Não. A taxa de $0,10 para clonagem de voz é um custo único por clone. Após a criação, usar esse voice_id em requisições de TTS custa apenas a taxa de TTS por caractere.

O que acontece se eu omitir um reference_id? Verifique a referência da API S2 Pro para o comportamento padrão atual — o modelo pode usar uma voz padrão ou exigir uma referência.

Como obtenho uma chave de API? Cadastre-se em novita.ai e gere uma chave no console da Novita AI.

Artigos Recomendados