Tous les produits
Search
Centre de documentation

Alibaba Cloud Model Studio:Qwen-Audio-TTS iOS SDK

Dernière mise à jour :Oct 11, 2026

Utilisez le SDK iOS Qwen-Audio-TTS pour transformer du texte en parole expressive et de haute qualité dans vos applications iOS.

NeoNui

Points clés de l'architecture :
  • Modèle singleton : obtenir l'instance globale via [StreamInputTts get_instance].
  • Piloté par rappels : recevoir les événements et les données audio via le protocole StreamInputTtsDelegate.
  • Configuration JSON : transmettre les paramètres sous forme de chaînes JSON.

Flux d'appel

Qwen-Audio-TTS prend en charge deux modes d'appel : l'entrée unique et l'entrée en streaming.

Entrée en une seule fois : idéale pour la synthèse de texte court ou lorsque vous avez besoin du balisage SSML.

  1. playStreamInputTts() ou asyncPlayStreamInputTts() — Envoyez un texte complet et démarrez la synthèse. La première est synchrone et retourne une fois la synthèse terminée ; la seconde est asynchrone et retourne immédiatement après le démarrage de la synthèse.
  2. onStreamInputTtsDataCallback() — Recevoir les données audio.
  3. TTS_EVENT_SYNTHESIS_COMPLETE — Synthèse terminée.

Entrée en streaming : idéal pour les conversations en temps réel ou les scénarios de synthèse à la volée de longs textes. Ce mode ne prend pas en charge le balisage SSML.

  1. startStreamInputTts() — Initialiser le SDK et définir le délégué de rappel ainsi que les paramètres de connexion.
  2. sendStreamInputTts() — Envoyer en continu des fragments de texte à synthétiser.
  3. onStreamInputTtsDataCallback() — Recevoir les données audio.
  4. stopStreamInputTts() ou asyncStopStreamInputTts() — Envoyez la requête de fin de synthèse. La première est synchrone et retourne une fois la synthèse terminée ; la seconde est asynchrone et retourne immédiatement après l'envoi de la requête.
  5. TTS_EVENT_SYNTHESIS_COMPLETE — Synthèse terminée.

startStreamInputTts

Démarre une tâche de synthèse vocale en streaming et ouvre une connexion au serveur.

Signature de la méthode
- (int) startStreamInputTts:(const char *)ticket parameters:(const char *)parameters sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
Paramètres
ParamètreTypeDescription
ticketchar*Chaîne JSON contenant les paramètres d'authentification, de connexion et de débogage.
parameterschar*Chaîne JSON contenant les paramètres d'effet de synthèse vocale.
sessionIdchar*ID de session spécifié par le client. S'il est omis, le serveur en génère un.
logLevelNuiSdkLogLevelNiveau d'impression pour les journaux internes du SDK.
saveLogBOOLIndique s'il faut enregistrer les journaux localement. Lorsqu'il est défini sur YES, vous devez spécifier un chemin avec debug_path et pouvez limiter la taille du fichier avec max_log_file_size.
Valeur de retour

Renvoie un code d'erreur. Exemple de JSON ticket : l'exemple suivant ne répertorie pas tous les champs. Ajouter les autres selon les besoins de votre code :

{
  "url": "wss://dashscope.aliyuncs.com/api-ws/v1/inference",
  "apikey": "st-****",
  "device_id": "my_device_id"
}
champs ticket
ChampTypeObligatoireDescription
urlstringOuiAdresse du service :
  • wss://dashscope.aliyuncs.com/api-ws/v1/inference
  • Chine (Pékin) : wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference
  • Singapour : wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference

Remplacez {WorkspaceId} par votre véritable ID d'espace de travail.

apikeystringOuiClé API. Pour limiter l'exposition en cas de fuite d'une clé à longue durée de vie, utiliser plutôt une clé API à courte durée de vie.
device_idstringOuiIdentifiant unique pour l'utilisateur final. Le définir sur l'ID utilisateur dans l'application ou sur un identifiant d'appareil généré par le client. Cet ID est utilisé pour le traçage des journaux et le dépannage.
complete_waiting_msintNonDélai d'attente, en millisecondes, pour l'événement de fin de synthèse (TTS_EVENT_SYNTHESIS_COMPLETE) après l'appel de stopStreamInputTts.

Par défaut : 10000.

debug_pathstringNonChemin local où les fichiers journaux sont stockés.

Ce champ prend effet uniquement lorsque saveLog est défini sur YES dans startStreamInputTts, playStreamInputTts ou asyncPlayStreamInputTts. Dans ce cas, vous devez définir ce chemin ; sinon, une erreur est renvoyée.

Au maximum deux fichiers journaux sont conservés localement.

max_log_file_sizeintNonTaille maximale d'un fichier journal, en octets.

Ce champ prend effet uniquement lorsque saveLog est défini sur YES dans startStreamInputTts, playStreamInputTts ou asyncPlayStreamInputTts.

Par défaut : 104857600 (100 × 1024 × 1024 octets, soit 100 Mio).

log_track_levelintNonNiveau de filtrage pour les journaux transmis via le rappel de journal (onStreamInputTtsLogTrackCallback).

Par défaut : 2.

Valeurs valides :

  • 0: LOG_LEVEL_VERBOSE
  • 1: LOG_LEVEL_DEBUG
  • 2: LOG_LEVEL_INFO
  • 3: LOG_LEVEL_WARNING
  • 4: LOG_LEVEL_ERROR
  • 5 : LOG_LEVEL_NONE (désactive le rappel)

Remarque : log_track_level et logLevel (définis via startStreamInputTts, playStreamInputTts ou asyncPlayStreamInputTts) déterminent ensemble quels journaux atteignent le rappel. Un journal déclenche le rappel uniquement lorsque son niveau est égal ou supérieur aux deux seuils. Par exemple, si log_track_level est 2 (INFO) et logLevel est 3 (WARNING), seuls les journaux de niveau WARNING ou supérieur (niveau >= 3) sont transmis.

Exemple de JSON parameters : l'exemple suivant ne répertorie pas tous les champs. Ajouter les autres selon les besoins de votre code :

{
  "model": "qwen-audio-3.0-tts-flash",
  "voice": "longanlingxi",
  "format": "mp3",
  "sample_rate": 24000,
  "volume": 50,
  "rate": 1,
  "pitch": 1,
  "language_hints": ["zh"],
  "enable_ssml": false
}
champs parameters
ChampTypeObligatoireDescription
modelstringOuiLe nom du modèle.
voicestringOuiLa voix utilisée pour la synthèse vocale.
  • Voix système : Consultez la liste des voix Qwen-Audio-TTS
  • Voix clonées : voix personnalisées créées par clonage de voix
  • Voix personnalisées : voix personnalisées créées par conception de voix
formatstringNonLe format d'encodage audio.

Valeurs valides :

  • pcm
  • wav
  • mp3 (par défaut)
  • opus
enable_audio_decoderBOOLNonIndique s'il faut activer le décodeur interne du SDK. Par défaut : NO.

Ce paramètre ne prend effet que lorsque le format d'encodage audio est opus ou mp3. Lorsqu'il est activé, le SDK décode les données audio opus ou mp3 en données PCM avant de les renvoyer.

volumeintNonLe niveau de volume.

Valeur par défaut : 50.

Valeurs valides : [0, 100].

sample_rateintNonLa fréquence d'échantillonnage audio en Hz.

Valeurs valides : 8000, 16000, 22050 (par défaut), 24000, 44100, 48000.

ratefloatNonLa vitesse de parole.

Valeur par défaut : 1.0.

Valeurs valides : [0.5, 2.0].

pitchfloatNonLa hauteur.

Valeur par défaut : 1.0.

Valeurs valides : [0.5, 2.0].

bit_rateintNonLe débit audio en kbit/s. Lorsque le format audio est mp3 ou opus, utilisez bit_rate pour ajuster le débit.

Valeur par défaut : 32.

Valeurs valides : [6, 510].

enable_ssmlbooleanNonIndique s'il faut activer le SSML.

Par défaut : false.

  • true : activé.
  • false : désactivé.

Pour les restrictions d'utilisation du SSML (modèles, voix et API pris en charge), consultez Limites.

word_timestamp_enabledbooleanNonIndique s'il faut activer les horodatages au niveau des mots.

Valeur par défaut : false.

Disponible uniquement en mode de sortie en streaming. Les voix clonées sont prises en charge. Pour les voix système compatibles, consultez Qwen-Audio-TTS liste des voix.

Les horodatages sont renvoyés dans all_response de onStreamInputTtsEventCallback.

seedintNonUne graine aléatoire pour contrôler la variation dans la sortie de synthèse. Lorsque la version du modèle, le texte, la voix et les autres paramètres sont inchangés, l'utilisation de la même graine produit des résultats identiques.

Valeur par défaut : 0.

Valeurs valides : [0, 65535].

language_hintsarray[string]Non

Important

  • Ce paramètre est un tableau, mais la version actuelle ne traite que le premier élément. Transmettez une valeur unique.
  • Ce paramètre spécifie la langue cible pour la synthèse vocale. Il n'est pas lié à la langue de l'échantillon audio utilisé dans le clonage de voix. Pour définir la langue source pour une tâche de clonage, consultez la référence de l’API de clonage de voix.

Spécifie la langue cible pour la synthèse vocale afin d'améliorer la qualité de la sortie.

Lorsque la prononciation des chiffres, le développement des abréviations, la lecture des symboles ou la synthèse dans une langue minoritaire ne répondent pas aux attentes, utilisez ce paramètre. Par exemple :

  • Prononciation inattendue des chiffres : « hello, this is 110 » est lu comme « hello, this is one zero » au lieu de la prononciation chinoise attendue
  • Prononciation inexacte des symboles : « @ » est lu comme son équivalent chinois au lieu de « at »
  • Mauvaise qualité de synthèse des langues minoritaires avec des résultats non naturels

Valeurs valides

  • zh : Chinois
  • en : Anglais
  • fr : Français
  • de : Allemand
  • ja : Japonais
  • ko : Coréen
  • ru : Russe
  • pt : Portugais
  • th : Thaï
  • id : Indonésien
  • vi : Vietnamien
  • es : Espagnol
  • it : Italien
  • ms : malais
  • fil : filipino
  • ar : Arabe
instructionstringNonContrôle les caractéristiques de synthèse telles que le dialecte, l'émotion ou le style de parole.

Pour plus de détails sur l'utilisation, consultez Contrôle des instructions.

enable_aigc_tagbooleanNonSpécifie s'il faut intégrer un filigrane AIGC dans l'audio généré. Lorsqu'il est défini sur true, le filigrane est intégré dans les fichiers audio des formats pris en charge (wav/mp3/opus).

Valeur par défaut : false.

aigc_propagatorstringNonDéfinit le champ ContentPropagator dans le filigrane AIGC, identifiant le propagateur de contenu. Ne prend effet que lorsque enable_aigc_tag est true.

Valeur par défaut : UID Alibaba Cloud.

aigc_propagate_idstringNonDéfinit le champ PropagateID dans le filigrane AIGC, identifiant de manière unique une action de propagation spécifique. Ne prend effet que lorsque enable_aigc_tag est true.

Valeur par défaut : l'identifiant de la requête de synthèse vocale en cours.

hot_fixobjectNonConfiguration de correction à chaud du texte pour personnaliser la prononciation de mots spécifiés ou remplacer du texte avant la synthèse.

Champs :

  • pronunciation : Spécifie les annotations pinyin pour les mots dont la prononciation par défaut doit être corrigée.
  • replace : Remplace les mots spécifiés avant la synthèse. Le texte de remplacement est utilisé comme entrée réelle pour la synthèse.

Exemple :

"hot_fix": {
  "pronunciation": [
    {"天气": "tian1 qi4"}
  ],
  "replace": [
    {"今天": "金天"}
  ]
}

sendStreamInputTts

Envoie le texte à synthétiser. Utilisez cette méthode conjointement avec startStreamInputTts.

Après avoir appelé startStreamInputTts, utiliser cette méthode pour pousser du texte en continu.

Une fois tout le texte envoyé, appelez stopStreamInputTts ou asyncStopStreamInputTts pour signaler la fin de l'entrée.

Signature de la méthode
- (int) sendStreamInputTts:(const char *)text;
Paramètres
ParamètreTypeDescription
textchar*Texte à synthétiser. Le SSML n'est pas pris en charge. Les balises SSML dans l'entrée sont lues comme du texte brut plutôt que d'être analysées.
Valeur de retour

Renvoie un code d'erreur.

stopStreamInputTts

Méthode synchrone. Notifie au serveur que tout le texte a été envoyé, puis bloque jusqu'à ce que chaque bloc audio soit synthétisé et que TTS_EVENT_SYNTHESIS_COMPLETE soit reçu.

Le délai d'attente du blocage est contrôlé par complete_waiting_ms.

Signature de la méthode
- (int) stopStreamInputTts;
Valeur de retour

Renvoie un code d'erreur.

asyncStopStreamInputTts

Méthode asynchrone. Notifie au serveur que tout le texte a été envoyé et retourne un résultat immédiatement. La synthèse se poursuit en arrière-plan.

Utiliser TTS_EVENT_SYNTHESIS_COMPLETE pour détecter la fin de la synthèse.

Signature de la méthode
- (int) asyncStopStreamInputTts;
Valeur de retour

Renvoie un code d'erreur.

cancelStreamInputTts

Interrompt immédiatement la connexion au serveur et met fin à la tâche de synthèse en cours. Après l'appel de cette méthode, aucun autre rappel de données audio n'est déclenché.

Signature de la méthode
- (int) cancelStreamInputTts;
Valeur de retour

Renvoie un code d'erreur.

playStreamInputTts

Méthode de synthèse synchrone en une seule fois. Envoie le texte et bloque pendant la réception de toutes les données audio, puis retourne une fois la synthèse terminée. Vous n'avez pas besoin d'appeler stopStreamInputTts par la suite.

Cette méthode active SSML par défaut. Pour désactiver SSML, définissez le champ enable_ssml dans parameters sur false.

Signature de la méthode
- (int) playStreamInputTts:(const char *)ticket parameters:(const char *)parameters text:(const char *)text sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
Paramètres

Les paramètres ticket, parameters et autres paramètres partagés utilisent les mêmes définitions que startStreamInputTts.

ParamètreTypeDescription
textchar*Texte à synthétiser. Prend en charge le SSML.
Valeur de retour

Renvoie un code d'erreur.

asyncPlayStreamInputTts

Cette méthode envoie tout le texte pour la synthèse de manière asynchrone. Elle retourne immédiatement sans attendre les données audio. Vous n'avez pas besoin d'appeler stopStreamInputTts par la suite.

Cette méthode active SSML par défaut. Pour désactiver SSML, définissez le champ enable_ssml dans parameters sur false.

Signature de la méthode
- (int) asyncPlayStreamInputTts:(const char *)ticket parameters:(const char *)parameters text:(const char *)text sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
Paramètres

Les paramètres ticket, parameters et autres paramètres partagés utilisent les mêmes définitions que startStreamInputTts.

ParamètreTypeDescription
textchar*Texte à synthétiser. Prend en charge le SSML.
Valeur de retour

Renvoie un code d'erreur.

StreamInputTtsDelegate

Protocole de rappel pour la synthèse vocale en streaming Qwen-Audio-TTS. Implémentez ce protocole pour recevoir les événements de synthèse, les données audio et les journaux.

onStreamInputTtsEventCallback : écouter les événements

Signature de la méthode
- (void)onStreamInputTtsEventCallback:(StreamInputTtsCallbackEvent)event taskId:(char*)taskid sessionId:(char*)sessionId ret_code:(int)ret_code error_msg:(char*)error_msg timestamp:(char*)timestamp all_response:(char*)all_response;
Paramètres
ParamètreTypeDescription
eventStreamInputTtsCallbackEventÉvénement de rappel.
taskidchar*ID de la tâche de synthèse vocale.
sessionIdchar*ID de session. La valeur fournie par le client est renvoyée telle quelle. Si none a été fourni, le serveur en génère un.
ret_codeintCode d'erreur. Valide uniquement pour l'événement TTS_EVENT_TASK_FAILED. Consultez les codes d'erreur.
error_msgchar*Message d'erreur. Valide uniquement pour l'événement TTS_EVENT_TASK_FAILED.
timestampchar*Informations d'horodatage pour le résultat de la synthèse.
all_responsechar*Réponse JSON complète. Analyser cette chaîne pour extraire les champs nécessaires.

onStreamInputTtsDataCallback : écouter les données audio

Le SDK déclenche ce rappel de manière répétée pendant la synthèse. Lire les données audio depuis le rappel.

Signature de la méthode
- (void)onStreamInputTtsDataCallback:(char*)buffer len:(int)len;
Paramètres
ParamètreTypeDescription
bufferchar*Données audio pour le segment actuel. Utiliser ces données pour :
  • Assembler un fichier audio complet et le lire.
  • Diffuser les données en streaming vers un lecteur prenant en charge la lecture en streaming.

Remarque :

  • Pour les formats compressés mp3 et opus, utiliser un lecteur en streaming. La lecture des segments image par image peut entraîner des échecs de décodage.
  • Lors de l'assemblage d'un fichier complet, ajouter chaque segment au même fichier.
  • Pour les formats wav et mp3, seule la première invocation de onStreamInputTtsDataCallback inclut l'en-tête du fichier ; les invocations suivantes renvoient des données audio brutes. Concaténez toutes les valeurs buffer dans l'ordre. Pour le format opus, chaque trame est une page Ogg autonome que vous pouvez concaténer directement.
lenintLongueur des données audio, en octets.

onStreamInputTtsLogTrackCallback : écouter les journaux de trace

Ce rappel fournit des journaux internes détaillés du SDK pour aider au dépannage et au débogage.

Signature de la méthode
- (void)onStreamInputTtsLogTrackCallback:(NuiSdkLogLevel)level
                            logMessage:(const char *)log;
Paramètres
ParamètreTypeDescription
levelNuiSdkLogLevelNiveau de journal.
logchar*Contenu du journal.

StreamInputTtsCallbackEvent

Énumération des types d'événements pour la synthèse vocale en streaming Qwen-Audio-TTS.

ÉvénementDescription
TTS_EVENT_SYNTHESIS_STARTEDLe serveur a accepté la requête et a commencé le traitement. onStreamInputTtsDataCallback fournit généralement le premier segment audio peu après cet événement.
TTS_EVENT_SENTENCE_SYNTHESISInformations de progression émises pendant la synthèse, y compris les données de facturation.
TTS_EVENT_SYNTHESIS_COMPLETELe serveur a terminé l'envoi de toutes les données audio. onStreamInputTtsDataCallback n'est plus appelé. Cet événement est le signal définitif de fin de flux.
TTS_EVENT_TASK_FAILEDLa tâche a échoué. Lisez task_id, error_code et error_message depuis all_response dans onStreamInputTtsEventCallback pour diagnostiquer l'échec.
{
        "header": {
            "task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx",
            "event": "task-failed",
            "error_code": "InvalidParameter",
            "error_message": "[tts:]Engine return error code: 418",
            "attributes": {}
        },
        "payload": {}
    }

NuiSdkLogLevel

Énumération du niveau de journal du SDK qui contrôle la sortie des journaux.

NiveauDescription
0: LOG_LEVEL_VERBOSENiveau de journal le plus détaillé. Inclut toutes les informations de débogage.
1: LOG_LEVEL_DEBUGJournaux de niveau débogage.
2: LOG_LEVEL_INFOJournaux d'informations générales (par défaut).
3: LOG_LEVEL_WARNINGJournaux de niveau avertissement.
4: LOG_LEVEL_ERRORJournaux de niveau erreur.
5: LOG_LEVEL_NONEDésactive la sortie des journaux.

Code d'exemple

  1. Obtenir votre clé API : Obtenir une clé API.

RemarquePour les applications tierces ou les utilisateurs finaux qui ont besoin d'un accès temporaire, ou lorsque vous want un contrôle strict sur les opérations sensibles telles que l'accès et la suppression des données, utilisez plutôt une clé API temporaire. Une clé API temporaire est valide pour une durée fixe de 60 secondes et doit être régénérée après son expiration.

  1. Téléchargez le SDK et exécutez l'exemple de code :
    • Télécharger le dernier bundle SDK.
    • Extraire l'archive ZIP et ajouter nuisdk.framework à votre projet Xcode.
    • Dans Build Phases > Link Binary With Libraries, ajouter nuisdk.framework.
    • Dans General > Frameworks, Libraries, and Embedded Content, définir nuisdk.framework sur Embed & Sign.
    • Ouvrez le projet d'exemple dans Xcode. Le code d'exemple se trouve dans DashQwen-Audio-TTSStreamInputTTSViewController.m. Remplacez la clé API fictive par la vôtre et exécutez l'application pour l'essayer.

Modes d'appel

Mode d'appelDescription
Entrée en une seule foisÉtapes :
  1. Initialiser le SDK et le composant lecteur.
  2. Configurer les paramètres pour votre scénario.
  3. Appeler playStreamInputTts ou asyncPlayStreamInputTts pour envoyer le texte et démarrer la synthèse.
  4. Attendre le rappel TTS_EVENT_SYNTHESIS_COMPLETE, qui signale que la synthèse est terminée.
Cas d'utilisation :
  • Synthèse de texte court.
  • Scénarios nécessitant un balisage SSML.
Entrée en streamingÉtapes :
  1. Initialiser le SDK et le composant lecteur.
  2. Configurer les paramètres pour votre scénario.
  3. Appeler startStreamInputTts pour démarrer la synthèse en flux continu.
  4. Appeler sendStreamInputTts de manière répétée pour envoyer du texte par blocs.
  5. Lire les données audio binaires depuis onStreamInputTtsDataCallback.
  6. Appeler stopStreamInputTts ou asyncStopStreamInputTts pour arrêter d'envoyer du texte et attendre la fin de la synthèse.
  7. Attendre le rappel TTS_EVENT_SYNTHESIS_COMPLETE, qui signale que la synthèse est terminée.
Cas d'utilisation :
  • Scénarios de conversation en temps réel ou de forme longue « parler au fur et à mesure de la synthèse ».
  • Ce mode ne prend pas en charge le balisage SSML.

Fonctionnalités avancées

Balisage SSML

Objectif : intégrer des balises XML dans le texte d'entrée pour contrôler précisément la prononciation, le débit de parole, les pauses et autres détails de prosodie.

Limites : SSML n'est pris en charge qu'avec l'entrée unique (les méthodes playStreamInputTts et asyncPlayStreamInputTts). Il n'est pas pris en charge avec l'entrée en streaming (la méthode sendStreamInputTts).

Utilisation : Lorsque vous appelez playStreamInputTts ou asyncPlayStreamInputTts, le SDK active automatiquement SSML. Transmettez le texte contenant des balises SSML directement dans le paramètre text.

Pour plus de détails, consulter SSML.

Expressions mathématiques

Objectif : faire en sorte que le modèle lise correctement les formules et expressions mathématiques courantes.

Utilisation : Transmettez le texte contenant des expressions mathématiques au format LaTeX directement dans le paramètre text. Pour plus de détails, consultez Convertir des formules LaTeX en parole (uniquement en chinois).