Aller au contenu

Voix et catalogue ​

GET /v1/chat/catalog fournit les modèles publics, les voix et les tarifs actuels. Le texte utilise POST /v1/chat/completions, la voix les endpoints ci-dessous.

Modèles et tarifs ​

Catalogue actuel des modèles · tarifs en crédits

Chargement du catalogue…

Reconnaissance vocale ​

POST /v1/chat/transcribe accepte { "audio": "data:audio/webm;base64,..." } ou du base64 simple, jusqu’à 10 Mo après décodage. La réponse contient text et language.

Synthèse vocale ​

Catalogue actuel des modèles · tarifs en crédits

Chargement du catalogue…

Dépliez un modèle pour voir les noms, IDs et langues de ses voix activées. Les voix désactivées sont absentes du catalogue et inutilisables pour de nouvelles synthèses. Désactiver un modèle exclut aussi toutes ses voix ; le réactiver conserve leurs réglages individuels. Si la voix par défaut ou son modèle est désactivé, une autre voix activée est choisie. Actualisez pour obtenir la configuration courante.

POST /v1/chat/speech accepte { "text": "Hello", "voice": "speech-light:af_bella" }, avec au maximum 2 000 caractères. Sans voice, la voix par défaut est utilisée. Utilisez voices[].id ; modelId identifie le modèle vocal et son tarif. Les modèles de chat et de voix sont indépendants.

La réponse contient audio (data:audio/mpeg;base64,...), voice et billing: { model, credits, characters, price, unit: "1000_characters" }. Toutes les voix, y compris Speech Pro, renvoient du MP3. Affectez audio au src d’un élément audio, ou décodez le base64 après la virgule et enregistrez un .mp3. Consultez l’exemple Python.

Audio en streaming ​

Envoyez "stream": true au même endpoint. Speech Standard, Speech Light, Speech Pro et Speech Expressive le prennent en charge ; voir speechModels[].streaming. L’absence du paramètre ou false conserve la réponse JSON.

json
{ "text": "Hello. How was your day?", "voice": "speech-pro:Ashley", "stream": true }

La réponse est un flux binaire MP3 continu avec Content-Type: audio/mpeg, pas du JSON, du base64 ou du SSE. Le proxy transmet l’audio dès son arrivée ; Speech Pro est converti progressivement en MP3. Cela ne garantit pas le délai de génération du modèle. Le texte est envoyé en une seule requête, sans découpage automatique en phrases.

Avec curl et FFmpeg, l’audio peut être lu pendant sa réception :

bash
curl --fail --no-buffer https://api.coldstart.win/v1/chat/speech \
  -H "Authorization: Bearer $COLDSTART_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello. How was your day?","voice":"speech-pro:Ashley","stream":true}' \
  | ffplay -nodisp -autoexit -f mp3 -i pipe:0

Un client d’appel doit alimenter en continu un décodeur MP3 persistant. Dans le navigateur, utilisez response.body.getReader() ; blob(), arrayBuffer() et json() attendent la réponse complète. Les fragments réseau sont des plages d’octets arbitraires, pas des fichiers MP3 autonomes. Annulez fetch et le reader en cas d’interruption ou de raccrochage. La lecture nécessite toujours l’interaction utilisateur requise par le navigateur.

En-têtes : X-Speech-Voice (ID public encodé dans une URL), X-Speech-Credits, X-Speech-Characters, X-Speech-Usage-Id. Le montant correspond au débit initial ; une requête réussie coûte autant qu’en mode non streaming. Un échec ou une déconnexion avant la fin du traitement serveur entraîne remboursement et statut d’échec. Une annulation après cette fin n’annule pas une facturation réussie.

Avant le début de l’audio, les erreurs utilisent les statuts HTTP et JSON habituels. Ensuite, un échec coupe la connexion. Ignorez le résultat incomplet et consultez l’historique d’utilisation pour le montant final. HTTP 200 ou le premier fragment ne prouvent pas la réussite complète. Les proxys supplémentaires doivent désactiver le buffering et la compression sur cette route. L’API envoie X-Accel-Buffering: no et Cache-Control: no-store, no-transform.

Si la politique de contenu refuse explicitement le texte, les deux modes renvoient 400 content_policy_violation avant l’audio et remboursent les frais. Ne relancez pas automatiquement le même texte ; modifiez-le pour respecter la politique. Le streaming ne supprime pas les restrictions de contenu.

Les requêtes vocales sont indépendantes. Indiquez explicitement l’identifiant public de voix souhaité. Le JSON contient l’audio data URI et la facturation ; le streaming renvoie des octets audio.

Frais vocaux = caractères facturables du texte normalisé × tarif du modèle / 1 000, arrondis au supérieur à huit décimales. Speech Light, Pro et Expressive comptent les unités UTF-16 (😀 vaut deux), Standard compte les points de code Unicode. speechModels[].characterCounting et billing.character_counting indiquent la règle (utf16_code_units ou unicode_codepoints), et billing.characters la quantité. La mise en forme et les indications scéniques sont retirées avant synthèse et comptage. Une synthèse échouée ou vide est remboursée. Chaque synthèse est facturée, mais réécouter l’audio reçu est gratuit. La console conserve l’audio par message et voix pendant la session de page courante.