Inicio rápido de Fish Audio S2 Pro para clonación de voz y TTS multilingüe

Inicio rápido de Fish Audio S2 Pro para clonación de voz y TTS multilingüe

Fish Audio S2 Pro está disponible en Novita AI como una API de TTS alojada sin tiempos de inicio en frío. Esta guía de inicio rápido cubre el camino del desarrollador: obtén tu clave API, confirma el endpoint, envía tu primera solicitud TTS con una voz clonada y comprende los parámetros importantes para la clonación de voz y el control de emociones. S2 Pro está construido sobre una arquitectura Dual-Autoregressive entrenada en un amplio corpus multilingüe — la característica que lo diferencia del TTS genérico es que cada voz que clonas funciona en todos los idiomas compatibles sin necesidad de reentrenamiento.

Cuándo usar esta guía de inicio rápido

Usa esta guía si necesitas:

  • Sintetizar voz a partir de texto en una amplia gama de idiomas compatibles usando una voz clonada personalizada.
  • Clonar una voz a partir de una muestra de audio de 10 a 30 segundos y reutilizarla en múltiples solicitudes sin costo adicional por solicitud.
  • Controlar la prosodia y las emociones en línea mediante etiquetas de corchete en lenguaje natural ([whisper], [excited]).
  • Crear pipelines que necesiten TTS multilingüe sin integraciones separadas por idioma.

Si solo necesitas TTS básico en inglés con voces integradas y no requieres clonación, evalúa primero el modelo Fish Audio S1 o GLM TTS — la ventaja de S2 Pro se nota cuando necesitas clonación interlingüística o control detallado de emociones.

Paso 1: Obtén tu clave API de Novita

Crea una cuenta en Novita AI y genera una clave API desde la consola de Novita AI. Guárdala como variable de entorno:

export NOVITA_API_KEY="tu_clave_api"

Mantén la clave fuera del código del cliente, bundles del frontend y repositorios públicos.

Paso 2: Confirma el modelo y el endpoint

La documentación de Novita AI para Fish Audio S2 Pro TTS está en la referencia de la API Fish Audio S2 Pro. Verifica allí la ruta del endpoint actual y el identificador del modelo antes de codificar — la URL del endpoint alojado y el esquema de la solicitud están confirmados en esa referencia.

Para la clonación de voz, se utilizan tres endpoints de Novita en el flujo de trabajo:

Paso Método Endpoint
Subir muestra de audio POST https://api.novita.ai/v1/files
Crear clon (asíncrono) POST https://api.novita.ai/v1/async/voice-cloning
Consultar resultado GET https://api.novita.ai/v1/async/task-result
TTS con voz clonada POST https://api.novita.ai/v4beta/txt2speech

La clonación de voz utiliza el modelo fish-audio-voice-cloning para el paso de creación del clon, separado del modelo TTS.

Paso 3: Clonar una voz

La clonación de voz requiere tres llamadas a la API: subir una muestra de audio corta, crear el clon y luego recuperar el voice_id. Una vez que tengas un voice_id, puedes reutilizarlo en solicitudes TTS de forma indefinida sin costo adicional.

Requisitos para la muestra de audio:

  • Duración: de 10 a 30 segundos da los mejores resultados
  • Formato: MP3 o WAV
  • Contenido: Voz limpia con mínimo ruido de fondo
  • Transcripción: Proporcionar el texto exacto hablado mejora la precisión del clon

Python: Flujo de trabajo completo de clonación

import base64
import os
import time
import requests

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

# Paso 1: Subir archivo de audio
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 del archivo subido: {file_id}")

# Paso 2: Crear el clon 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": "Aquí va el texto hablado en la muestra de audio.",
    },
)
clone_response.raise_for_status()
task_id = clone_response.json()["task_id"]
print(f"ID de la tarea de clonación: {task_id}")

# Paso 3: Consultar hasta obtener el 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 de voz clonada: {voice_id}")
        break
    elif "FAILED" in result["status"]:
        raise RuntimeError(f"Clonación fallida: {result}")
    time.sleep(2)

Guarda el voice_id. Lo usarás como reference_id en cada llamada TTS.

cURL: Creación del clon (después de subir el archivo)

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": "TU_FILE_ID",
    "text": "Texto hablado en la muestra de audio."
  }'

Paso 4: Enviar una solicitud TTS

Una vez que tengas un voice_id del Paso 3, pásalo como reference_id en la solicitud TTS. El modelo genera voz con la voz clonada.

Python

import os
import requests

API_KEY = os.environ["NOVITA_API_KEY"]
VOICE_ID = "tu_voice_id_clonado"  # del Paso 3

response = requests.post(
    "https://api.novita.ai/v4beta/txt2speech",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "text": "Bienvenido a la demostración. Esta voz fue clonada a partir de una muestra de audio corta.",
        "reference_id": VOICE_ID,
        "format": "mp3",
        "sample_rate": 44100,
    },
)
response.raise_for_status()
audio_url = response.json()["audio_url"]
print(f"URL del audio: {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": "Bienvenido a la demostración. Esta voz fue clonada a partir de una muestra de audio corta.",
    "reference_id": "TU_VOICE_ID_CLONADO",
    "format": "mp3",
    "sample_rate": 44100
  }'

La respuesta contiene un audio_url — una URL prefirmada que apunta al archivo de audio generado.

Paso 5: Consultar precios, límites y errores comunes

Precios (verifica las tarifas actuales en novita.ai/pricing):

Operación Precio
Generación TTS ~$15.00 / 1M caracteres
Clonación de voz $0.10 por voz (único pago)

La clonación de voz se factura una vez por clon, no por solicitud TTS. Una vez clonada, usar el voice_id en llamadas TTS solo cuesta la tarifa TTS por carácter.

Límites por solicitud:

Límite Valor
Longitud máxima de entrada 10 000 caracteres
Muestra recomendada para clonación 10–30 segundos
Formatos de salida compatibles mp3, opus, wav, pcm
Frecuencia de muestreo de audio Hasta 44 100 Hz

Errores comunes:

Error Causa Solución
401 Unauthorized Clave API inválida o faltante Verifica que NOVITA_API_KEY esté configurada y sea correcta
400 Bad Request al subir archivo Archivo de audio demasiado grande o formato incorrecto Usa MP3/WAV, mantén el tamaño por debajo de unos pocos MB
Estado FAILED en tarea de clonación Muestra de audio demasiado corta o con ruido Usa 10–30 s de voz limpia
Audio vacío o distorsionado El campo text está vacío o supera el límite Mantén la entrada por debajo de 10 000 caracteres

Etiquetas de control de emociones

S2 Pro admite etiquetas [corchete] en línea que controlan cómo el modelo reproduce palabras o frases específicas. Estas se interpretan como instrucciones en lenguaje natural durante la generación — no estás limitado a una lista fija de tokens.

texto_con_emocion = (
    "[alegre] ¡Bienvenido de nuevo! [pausa] "
    "Me alegra mucho que estés aquí. "
    "[susurro] Entre nosotros, esta parte es un secreto. [normal] "
    "En fin, comencemos."
)

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

Ejemplos de etiquetas de corchete que el modelo entiende:

Etiqueta Efecto
[whisper] Voz susurrada
[excited] Mayor energía, ritmo más rápido
[calm] Tono más lento y mesurado
[laughs] Risas incrustadas en el habla
[professional broadcast tone] Estilo de locutor de noticias
[pitch up] Eleva el tono para el texto siguiente
[pause] Pausa breve

Las etiquetas son descripciones de forma libre, no valores de enumeración fijos. El modelo aprendió asignaciones de etiquetas a acústica a partir de los datos de entrenamiento, por lo que las frases descriptivas también funcionan. Experimenta con etiquetas específicas para tu caso de uso; los resultados pueden variar con frases inusuales.

Parámetros clave

Parámetro Tipo Notas
text cadena Requerido. Hasta 10 000 caracteres.
reference_id cadena Requerido. ID del modelo de voz — voice_id clonado o referencia de voz del sistema.
format cadena Formato de salida: mp3, opus, wav, pcm. Por defecto: mp3.
sample_rate entero Frecuencia de muestreo del audio en Hz. 44100 recomendado para alta fidelidad.
temperature número Controla la aleatoriedad de la generación. Mayor = prosodia más variada.
top_p número Umbral de muestreo de núcleo.

Para el esquema completo de parámetros y cualquier opción adicional específica de S2 Pro, consulta la referencia de la API Fish Audio S2 Pro de Novita AI.

Solución de problemas

La voz clonada suena robótica o inconsistente. La muestra probablemente era demasiado corta o tenía ruido de fondo. Graba un clip limpio de 20 a 30 segundos con un ritmo constante y sin superposiciones. Proporcionar la transcripción exacta del text de la muestra en la solicitud de clonación mejora la alineación fonémica.

La URL del audio devuelve 404 después de consultar. Las URLs prefirmadas expiran. Descarga o procesa el audio inmediatamente después de recibir la URL.

Las etiquetas de emoción no producen el efecto esperado. El comportamiento de las etiquetas depende de las distribuciones de los datos de entrenamiento. Prueba con frases más descriptivas — por ejemplo, [muy suavemente, apenas audible] en lugar de [tranquilo]. Algunas etiquetas funcionarán mejor que otras; prueba primero con entradas cortas.

El estado de la tarea de clonación permanece en pendiente. Agrega un intervalo de consulta (1–2 segundos entre comprobaciones) para evitar limitar la tasa del endpoint de resultado de la tarea. Si la tarea permanece pendiente durante más de dos minutos, verifica el paso de subida del archivo — el file_id puede haber expirado.

Necesito usar la misma voz en varios idiomas. Pasa el mismo voice_id con texto en cualquier idioma compatible. S2 Pro aplica el timbre de la voz clonada al nuevo idioma sin necesidad de un clon separado. Consulta la referencia de la API S2 Pro para la lista actual de idiomas compatibles.

FAQ

¿Qué hace diferente a S2 Pro de Fish Audio S1? S2 Pro utiliza una arquitectura Dual-Autoregressive más grande entrenada en un amplio corpus multilingüe. Las diferencias prácticas: soporte de más idiomas, control de emociones en línea mediante etiquetas de corchete y capacidad de síntesis multi-voz no disponible en S1. Consulta la referencia de la API S2 Pro para la lista de idiomas actual.

¿Puedo clonar una voz una vez y usarla para todos los idiomas compatibles? Sí. Una voz clonada a partir de una muestra en inglés puede generar voz en japonés, español, árabe o cualquier otro idioma compatible usando el mismo voice_id. El modelo transfiere el timbre de la voz entre idiomas sin entrenamiento adicional.

¿Cuánto debe durar la muestra de voz? De 10 a 30 segundos de voz limpia y consistente. Las muestras más cortas pueden funcionar, pero producen resultados menos estables. Las muestras de más de 30 segundos no mejoran significativamente la calidad del clon.

¿La clonación de voz se factura por solicitud TTS? No. El cargo de $0.10 por clonación de voz es un pago único por clon. Después de la creación, usar ese voice_id en solicitudes TTS solo cuesta la tarifa TTS por carácter.

¿Qué sucede si omito un reference_id? Consulta la referencia de la API S2 Pro para el comportamiento predeterminado actual — el modelo puede usar una voz predeterminada o requerir una referencia.

¿Cómo obtengo una clave API? Regístrate en novita.ai y genera una clave desde la consola de Novita AI.

Artículos recomendados