Alternative à OpenAI TTS : gardez le SDK, changez l’URL de base
Fish Audio prend en charge le même appel /v1/audio/speech. Pointez votre client OpenAI vers Fish, choisissez le modèle gratuit, et votre code de synthèse vocale continuera de fonctionner après la disparition des modèles TTS d’OpenAI.
Aucune carte bancaire requise : fish-audio/s2.1-pro-free coûte $0 jusqu’au 30 novembre 2026.
Deux lignes pour rediriger le client
base_url et api_key font pointer le SDK OpenAI officiel vers Fish. Dans l’appel, indiquez un modèle et une voix Fish. Le nouveau code fonctionne tel quel sur un compte neuf avec un solde de $0.
import os from openai import OpenAI client = OpenAI(Ligne ajoutée: base_url="https://api.fish.audio/compat/v1",Ligne supprimée: api_key=os.environ["OPENAI_API_KEY"],Ligne ajoutée: api_key=os.environ["FISH_API_KEY"],) with client.audio.speech.with_streaming_response.create(Ligne supprimée: model="tts-1",Ligne supprimée: voice="alloy",Ligne ajoutée: model="fish-audio/s2.1-pro-free",Ligne ajoutée: voice="", input="Hello, world!", response_format="mp3",) as response: response.stream_to_file("speech.mp3")import fs from "node:fs";import OpenAI from "openai"; const client = new OpenAI({Ligne ajoutée: baseURL: "https://api.fish.audio/compat/v1",Ligne supprimée: apiKey: process.env.OPENAI_API_KEY,Ligne ajoutée: apiKey: process.env.FISH_API_KEY,}); const response = await client.audio.speech.create({Ligne supprimée: model: "tts-1",Ligne supprimée: voice: "alloy",Ligne ajoutée: model: "fish-audio/s2.1-pro-free",Ligne ajoutée: voice: "", input: "Hello, world!", response_format: "mp3",});fs.writeFileSync("speech.mp3", Buffer.from(await response.arrayBuffer()));Ligne supprimée: curl https://api.openai.com/v1/audio/speech \Ligne supprimée: -H "Authorization: Bearer $OPENAI_API_KEY" \Ligne ajoutée: curl https://api.fish.audio/compat/v1/audio/speech \Ligne ajoutée: -H "Authorization: Bearer $FISH_API_KEY" \ -H "Content-Type: application/json" \ -d '{Ligne supprimée: "model": "tts-1",Ligne supprimée: "voice": "alloy",Ligne ajoutée: "model": "fish-audio/s2.1-pro-free",Ligne ajoutée: "voice": "", "input": "Hello, world!", "response_format": "mp3" }' \ --output speech.mp3Nécessite le SDK OpenAI officiel (pip install openai ou npm install openai) et votre clé API Fish dans FISH_API_KEY.
Ce qui change aussi
- Le paramètre
voiceattend un ID de voix Fish. Les noms prédéfinis d’OpenAI commenovarenvoient une erreur 400 ; une chaîne vide utilise la voix par défaut du modèle. - Sur Fish,
response_formatvautpcmpar défaut, et nonmp3. Définissez-le explicitement. - Le paramètre
instructionsn’est pas pris en charge et renvoie une erreur 400. Écrivez plutôt les indications de jeu dans le texte, par exemple[whispering]. tts-1,tts-1-hdetgpt-4o-mini-ttsfonctionnent toujours comme noms de modèle. Ils correspondent au modèle payantfish-audio/s2.1-pro.
Choisissez une voix
Les voix prédéfinies d’OpenAI n’existent pas sur Fish. Passez l’ID de n’importe quelle voix de la Bibliothèque de voix Fish, ou d’une voix que vous clonez. Une chaîne vide utilise la voix par défaut du modèle.
Hannah · Bibliothèque de voix
voice="9a9cf47702da476aa4629e2506d4a857"Parcourir la Bibliothèque de voixTarification
S2.1-Pro est facturé en octets UTF-8 de texte d’entrée. En anglais, un caractère correspond à un octet : le prix est donc le même que tts-1 et deux fois moins élevé que tts-1-hd. La plupart des caractères chinois, japonais et coréens occupent 3 octets.
Prix relevés sur les pages tarifaires officielles le 29 octobre 2026 :Fish AudioOpenAI
Questions fréquentes
Migrez avant le 6 janvier 2027
Créez une clé gratuite, modifiez deux lignes et continuez à générer de la voix.