Orux AI / Carnet des modèles
Qwen3 TTS : découper une leçon sans perdre de texte
Préparez une leçon bilingue pour Qwen3 TTS : découpeur Python local, 3 parties réelles, texte conservé, limites du formulaire et tarifs Credits.

Sommaire
Préparer la leçon en parties vérifiables avant la synthèse
Une leçon de terrain bilingue peut passer d’une consigne anglaise à une observation chinoise puis revenir en quelques phrases. Envoyer tout le document au formulaire n’est pas forcément le bon début. Il faut préserver les mots, borner chaque entrée et vérifier l’ordre. Couper tous les quelques caractères risque de diviser une consigne.
Ce guide fournit un découpeur Python offline pour le formulaire Orux actuel de qwen3-tts-flash, avec speech-2.8-hd comme autre option du catalogue. L’exemple crée trois parties ordonnées, conserve chaque caractère et refuse un segment trop long plutôt que de le tronquer ou le jeter. Il ne génère aucun audio et ne mesure ni prononciation ni naturel bilingue : ce sont des décisions d’écoute ultérieures.
Les champs texte vérifiés déclarent 600 caractères maximum. L’outil utilise un plafond local en unités UTF-16, réduit à 80 pour la démonstration. C’est une règle prudente de préparation, pas la définition du caractère facturé ni la limite native de toute la famille. Séparez contrainte d’entrée, représentation et quantité payée.

Vérifier les deux formulaires avant le transfert
qwen3-tts-flash expose input et la voix Cherry ; speech-2.8-hd, text et male-qn-qingse. Les deux champs déclarent 600 dans la configuration publique du 1er novembre 2026. Ne permutez pas les noms simplement parce que les deux tâches produisent de la parole.
Cela ne confirme pas toutes les voix annoncées ailleurs, le balisage avancé, la langue par phrase ou un minutage exact. Un nom de voix ne prouve pas la bonne lecture d’un mot anglais ou d’un lieu chinois. Après autorisation, écoutez un court passage approuvé ; un script proposé n’est pas un enregistrement déjà validé.
Gardez le texte comme source vérifiable. L’artefact conserve numéros et mots exacts ; un manifeste audio séparé pourra associer voix approuvée et fichier. Si l’enseignant change une phrase, les limites aident à savoir quoi refaire, sans garantir une jonction parfaite entre anciennes et nouvelles prises.
Définir les frontières de phrase de ce petit outil
Il reconnaît points, interrogations et exclamations chinois, ainsi que leurs équivalents anglais suivis d’un espace blanc ou de la fin de chaîne. Le point d’un décimal simple comme 3.5 n’est donc pas une coupure. Il ne comprend pas toutes les abréviations, citations ou conventions linguistiques ; une personne vérifie.
Il ne retire pas les espaces et ne normalise pas la ponctuation. Il assemble les morceaux voisins jusqu’au plafond choisi. Si un morceau seul est trop long, il échoue et demande une modification humaine plutôt que de couper. La conservation exacte et des règles simples priment sur l’acceptation automatique de tout document.
Il refuse le vide et exige un entier de 1 à 600. Le plafond 80 permet à cette courte fixture de tester plusieurs parties ; ce n’est ni une durée conseillée ni une conversion en secondes. Débit, pauses et durée se mesurent dans un enregistrement réel.
Exécuter le découpeur complet localement
Enregistrez sous chunk_lesson.py puis lancez python3 chunk_lesson.py. Seule la bibliothèque standard est utilisée, sans API Key ni réseau. Le script inventé enseigne à observer des feuilles sans cueillir les plantes. C’est une fixture éditoriale, pas une réponse de modèle, une expérience en classe ou la voix d’un enseignant réel.
"""Local text preparation only. No TTS request or billed-character measurement."""
import json
import re
def units(text):
return len(text.encode("utf-16-le")) // 2
def chunks(text, limit=600):
if not isinstance(text, str) or not text.strip():
raise ValueError("A nonempty lesson is required")
if type(limit) is not int or not 1 <= limit <= 600:
raise ValueError("Choose a local cap from 1 to 600 UTF-16 units")
pieces = re.split(r"(?<=[。!?])|(?<=[.!?])(?=\s|$)", text)
result, current = [], ""
for piece in pieces:
if not piece:
continue
if units(piece) > limit:
raise ValueError("One segment exceeds cap; edit it manually")
if current and units(current + piece) > limit:
result.append(current)
current = ""
current += piece
if current:
result.append(current)
assert "".join(result) == text
assert all(0 < units(x) <= limit for x in result)
return result
if __name__ == "__main__":
lesson = ("Welcome to the field lesson. Observe the leaf before naming it. "
"先观察叶子的边缘,再记录它的形状。不要采摘植物。 "
"Write one observation in your notebook. Then compare it with your partner.")
output = chunks(lesson, limit=80)
assert len(chunks("Ready 🌿. Next step.", 12)) == 2
assert units("🌿") == 2 and len("🌿") == 1
for text, limit in [("x" * 81, 80), ("", 80), (lesson, 601)]:
try:
chunks(text, limit)
except ValueError:
pass
else:
raise AssertionError("Invalid lesson accepted")
print(json.dumps([{"part": i+1, "utf16_units": units(t), "text": t}
for i, t in enumerate(output)], ensure_ascii=False, indent=2))Résultat local observé :
[
{
"part": 1,
"utf16_units": 63,
"text": "Welcome to the field lesson. Observe the leaf before naming it."
},
{
"part": 2,
"utf16_units": 65,
"text": " 先观察叶子的边缘,再记录它的形状。不要采摘植物。 Write one observation in your notebook."
},
{
"part": 3,
"utf16_units": 35,
"text": " Then compare it with your partner."
}
]Les trois parties font 63, 65 et 35 unités UTF-16. Les espaces initiaux sont volontaires : joindre les textes dans l’ordre recrée exactement la source. Le code vérifie identité et plafonds. Ne supprimez pas ces espaces en continuant à revendiquer la même conservation. Un nettoyage ultérieur devient une transformation séparée à tester et approuver.
L’emoji feuille compte pour un point de code Unicode Python mais deux unités UTF-16. Aucun ne mesure la parole, la durée ou une facture. Un symbole visible n’est pas forcément une bonne consigne de lecture. Décidez séparément s’il faut le remplacer par des mots approuvés dans une vraie leçon.
Examiner des refus utiles avant un vrai document
L’exemple refuse un segment de 81 unités avec plafond 80, une leçon vide et un plafond supérieur à 600. Il vérifie aussi que l’exemple court avec emoji produit deux parties sous 12. Ce sont des tests du contrat local et d’une limite de représentation, pas du TTS distant, d’une langue entière ou de tous les formats.
Si une phrase est trop longue, transformez-la en deux consignes claires à un endroit logique. Ne coupez pas une instruction de sécurité et ne supprimez pas sa condition finale. Approuvez la nouvelle source, relancez et faites vérifier assemblage et ordre par l’enseignant. Passer un compteur ne suffit pas sans conserver l’intention.
La règle peut couper une abréviation au mauvais endroit ou laisser un guillemet final au segment suivant. Cela justifie la revue, pas une prétention de compréhension. Pour des citations ou notations complexes, adaptez les règles ou préparez les segments manuellement avant génération.
Comparer l’unité sans inventer une facture du script
| Alias Orux | Unité | Credits/1,000 caractères facturés | 3,000 caractères hypothétiques |
|---|---|---|---|
| qwen3-tts-flash | per_kchar | 2.1669 | 6.5007 |
| speech-2.8-hd | per_kchar | 10.2084 | 30.6252 |
Faites défiler horizontalement pour voir tout le tableau.
Tarifs publics Orux ordinaires vérifiés le 1er novembre 2026 ; 1 Credit=$0.005. Les deux lignes appliquent une quantité exacte et aucun minimum supplémentaire. La dernière colonne utilise 3,000 caractères facturés hypothétiques ; elle ne mesure ni ne chiffre les trois parties. Aucune demande audio n’a fourni une consommation réelle.
Ne multipliez pas longueur Python, longueur UTF-16 ou octets UTF-8 pour appeler le résultat une charge réglée. Le plafond prépare le texte ; l’usage de parole final est une mesure distincte. Le découpage change aussi le nombre de requêtes et le travail de revue. Vérifiez tarifs et estimation exacte avant autorisation, surtout après un changement de conditions.
L’écart tarifaire n’établit ni préférence de voix, ni prononciation, ni durée, ni gagnant qualitatif. Aucun prix officiel n’a été comparé indépendamment et aucune économie n’est revendiquée. Choisissez selon la tâche, puis écoutez un échantillon autorisé. Une prise peu chère mais inutilisable ne livre pas une leçon achevée.
Séparer l’écoute ultérieure du contrôle textuel
Pour un vrai cours, gardez numéro, source exacte, alias demandé et voix approuvée. Après génération, ajoutez URL et état de revue sans écraser la source. Écoutez omissions, noms incorrects, pauses gênantes et changements entre parties. Contrôlez durée et ordre dans les fichiers, pas depuis les caractères.
L’extraction structurée, en anglais conserve les absences sans inventer ; l’entrée de bilan support, en anglais limite les champs sortant du système. Ici le contrat conserve toute la leçon approuvée en bornant ses entrées. Supprimer discrètement du texte difficile n’est pas une solution à un segment trop long.
Prix vérifiés le 2026-11-01. Sources et pages actuelles : Catalogue public, Catalogue public, Référence Python, Référence Python. qwen3-tts-flash, speech-2.8-hd.
FAQ
Les 600 caractères décrivent-ils la limite native du modèle ?
Non. C’est le maximum déclaré du champ de deux formulaires Orux vérifiés, pas celui de toute API, installation ou fenêtre native. L’outil emploie explicitement des unités UTF-16. Vérifiez le contrat actuel avant d’envoyer un document plus long par une autre voie.
Le découpage perd-il des espaces ou change-t-il la ponctuation ?
Pas dans sa transformation définie. Il ne rogne pas et vérifie que la réunion reproduit la source. Les espaces initiaux sont voulus. Une normalisation ultérieure doit être revue séparément, sans conserver une promesse de fidélité exacte devenue fausse.
Cela prouve-t-il la bonne lecture bilingue des deux voix ?
Non. Aucun audio n’a été produit ni évalué. Nous avons contrôlé champs, limites locales et prix datés. Une prise bilingue nécessite une écoute autorisée pour prononciation, omissions et transitions. Ni nom de voix ni validation de longueur ne suffisent.
Les nombres 63, 65 et 35 sont-ils les caractères facturés ?
Non. Ce sont les longueurs UTF-16 imprimées par la fixture locale, pas un usage audio mesuré ni une facture. Le tableau utilise des quantités hypothétiques explicites pour expliquer l’arithmétique sans inventer une règle de mesure d’une requête réelle.
Que faire si un segment dépasse le plafond ?
Modifiez-le manuellement à un endroit logique, approuvez la source et relancez. Le programme refuse plutôt que de couper une consigne ou jeter des mots. Vérifiez aussi abréviations et citations : sa ponctuation simple n’est pas un analyseur linguistique comprenant la leçon.
Utilisez ces modèles avec une seule API
Une API compatible OpenAI pour les modèles de chat, d’image, de vidéo et d’audio, facturée en Credits.
Articles similaires
Voir tous les articles →
gpt-6-luna : préparer un bilan sans messages bruts
Préparez 4 demandes pour gpt-6-luna sans messages bruts : liste autorisée, Python local, JSON réel, refus testés et tarifs Orux Credits avec conditions.

API vidéo économiques : Vidu, Wan, Kling et Seedance
Comparez coûts par seconde et clip, entrées et limites de Vidu, Wan, Kling et Seedance, avec Python, vidéos réelles et prix datés sans promesse universelle.

Kling 4.0 API : tarifs, paramètres et vidéos réelles
Comparez Kling 4.0 sur Orux et fal : tarifs, paramètres, Python avec ID sauvegardé, deux vidéos réelles et limites des reprises et de leur facturation.