- Quando Usar Este Guia Rápido
- Passo 1: Obtenha Sua Chave de API da Novita
- Passo 2: Confirme o Modelo e o Endpoint
- Passo 3: Clone uma Voz
- Passo 4: Envie uma Requisição de TTS
- Passo 5: Verifique Preços, Limites e Erros Comuns
- Tags de Controle de Emoção
- Parâmetros Principais
- Solução de Problemas
- FAQ
- Artigos Recomendados
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.
