Utilisez le SDK iOS CosyVoice 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
CosyVoice 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.
playStreamInputTts()ouasyncPlayStreamInputTts()— 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.onStreamInputTtsDataCallback()— Recevoir les données audio.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.
startStreamInputTts()— Initialiser le SDK et définir le délégué de rappel ainsi que les paramètres de connexion.sendStreamInputTts()— Envoyer en continu des fragments de texte à synthétiser.onStreamInputTtsDataCallback()— Recevoir les données audio.stopStreamInputTts()ouasyncStopStreamInputTts()— 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.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ètre | Type | Description |
|---|---|---|
ticket | char* | Chaîne JSON contenant les paramètres d'authentification, de connexion et de débogage. |
parameters | char* | Chaîne JSON contenant les paramètres d'effet de synthèse vocale. |
sessionId | char* | ID de session spécifié par le client. S'il est omis, le serveur en génère un. |
logLevel | NuiSdkLogLevel | Niveau d'impression pour les journaux internes du SDK. |
saveLog | BOOL | Indique 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. |
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
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
url | string | Oui | Adresse du service :
Remplacez |
apikey | string | Oui | Clé 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_id | string | Oui | Identifiant 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_ms | int | Non | Dé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_path | string | Non | Chemin local où les fichiers journaux sont stockés. Ce champ prend effet uniquement lorsque Au maximum deux fichiers journaux sont conservés localement. |
max_log_file_size | int | Non | Taille maximale d'un fichier journal, en octets. Ce champ prend effet uniquement lorsque Par défaut : 104857600 (100 × 1024 × 1024 octets, soit 100 Mio). |
log_track_level | int | Non | Niveau de filtrage pour les journaux transmis via le rappel de journal (onStreamInputTtsLogTrackCallback).Par défaut : 2. Valeurs valides :
Remarque : |
Exemple de JSON parameters : l'exemple suivant ne répertorie pas tous les champs. Ajouter les autres selon les besoins de votre code :
{
"model": "cosyvoice-v3-plus",
"voice": "longanyang",
"format": "mp3",
"sample_rate": 24000,
"volume": 50,
"rate": 1,
"pitch": 1,
"language_hints": ["zh"],
"enable_ssml": false
}
champs parameters
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
model | string | Oui | Le nom du modèle. |
voice | string | Oui | La voix utilisée pour la synthèse vocale.
|
format | string | Non | Le format d'encodage audio. Valeurs valides :
|
enable_audio_decoder | BOOL | Non | Indique 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. |
volume | int | Non | Le niveau de volume. Valeur par défaut : 50. Valeurs valides : [0, 100]. |
sample_rate | int | Non | La fréquence d'échantillonnage audio en Hz. Valeurs valides : 8000, 16000, 22050 (par défaut), 24000, 44100, 48000. |
rate | float | Non | La vitesse de parole. Valeur par défaut : 1.0. Valeurs valides : [0.5, 2.0]. |
pitch | float | Non | La hauteur. Valeur par défaut : 1.0. Valeurs valides : [0.5, 2.0]. |
bit_rate | int | Non | Le 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_ssml | boolean | Non | Indique s'il faut activer le SSML. Par défaut : false.
Pour les restrictions d'utilisation du SSML (modèles, voix et API pris en charge), consultez Limites. |
word_timestamp_enabled | boolean | Non | Indique s'il faut activer les horodatages au niveau des mots. Valeur par défaut : false. Disponible uniquement en mode de sortie en streaming. Voix prises en charge : voix clonées de cosyvoice-v3.5-plus, cosyvoice-v3.5-flash, cosyvoice-v3-flash, cosyvoice-v3-plus, cosyvoice-v2, ainsi que les voix système marquées comme prises en charge dans la CosyVoice liste des voix. Les voix clonées d'autres modèles ne prennent pas en charge cette fonctionnalité.
|
seed | int | Non | Une 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_hints | array[string] | Non | Important
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 :
Valeurs valides
|
instruction | string | Non | Contrô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_tag | boolean | Non | Spé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. RemarqueSeuls cosyvoice-v3-flash, cosyvoice-v3-plus, cosyvoice-v2 prennent en charge cette fonctionnalité. |
aigc_propagator | string | Non | Dé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. RemarqueSeuls cosyvoice-v3-flash, cosyvoice-v3-plus, cosyvoice-v2 prennent en charge cette fonctionnalité. |
aigc_propagate_id | string | Non | Dé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. RemarqueSeuls cosyvoice-v3-flash, cosyvoice-v3-plus, cosyvoice-v2 prennent en charge cette fonctionnalité. |
hot_fix | object | Non | Configuration de correction à chaud du texte pour personnaliser la prononciation de mots spécifiés ou remplacer du texte avant la synthèse. Remarquecosyvoice-v2 ne prend pas en charge cette fonctionnalité. Champs :
Exemple : |
enable_markdown_filter | BOOL | Non | RemarqueSeules les voix clonées de cosyvoice-v3-flash prennent en charge cette fonctionnalité. Indique s'il faut filtrer le balisage Markdown du texte d'entrée avant la synthèse afin que le balisage ne soit pas lu à voix haute. Par défaut : Valeurs valides :
|
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.
- (int) sendStreamInputTts:(const char *)text;
Paramètres
| Paramètre | Type | Description |
|---|---|---|
text | char* | 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. |
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.
- (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.
- (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.
- (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ètre | Type | Description |
|---|---|---|
text | char* | Texte à synthétiser. Prend en charge le SSML. |
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.
- (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ètre | Type | Description |
|---|---|---|
text | char* | Texte à synthétiser. Prend en charge le SSML. |
Renvoie un code d'erreur.
StreamInputTtsDelegate
Protocole de rappel pour la synthèse vocale en streaming CosyVoice. 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ètre | Type | Description |
|---|---|---|
event | StreamInputTtsCallbackEvent | Événement de rappel. |
taskid | char* | ID de la tâche de synthèse vocale. |
sessionId | char* | 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_code | int | Code d'erreur. Valide uniquement pour l'événement TTS_EVENT_TASK_FAILED. Consultez les codes d'erreur. |
error_msg | char* | Message d'erreur. Valide uniquement pour l'événement TTS_EVENT_TASK_FAILED. |
timestamp | char* | Informations d'horodatage pour le résultat de la synthèse. |
all_response | char* | 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ètre | Type | Description |
|---|---|---|
buffer | char* | Données audio pour le segment actuel. Utiliser ces données pour :
Remarque :
|
len | int | Longueur 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ètre | Type | Description |
|---|---|---|
level | NuiSdkLogLevel | Niveau de journal. |
log | char* | Contenu du journal. |
StreamInputTtsCallbackEvent
Énumération des types d'événements pour la synthèse vocale en streaming CosyVoice.
| Événement | Description |
|---|---|
TTS_EVENT_SYNTHESIS_STARTED | Le 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_SYNTHESIS | Informations de progression émises pendant la synthèse, y compris les données de facturation. |
TTS_EVENT_SYNTHESIS_COMPLETE | Le 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_FAILED | La tâche a échoué. Lisez task_id, error_code et error_message depuis all_response dans onStreamInputTtsEventCallback pour diagnostiquer l'échec. |
NuiSdkLogLevel
Énumération du niveau de journal du SDK qui contrôle la sortie des journaux.
| Niveau | Description |
|---|---|
| 0: LOG_LEVEL_VERBOSE | Niveau de journal le plus détaillé. Inclut toutes les informations de débogage. |
| 1: LOG_LEVEL_DEBUG | Journaux de niveau débogage. |
| 2: LOG_LEVEL_INFO | Journaux d'informations générales (par défaut). |
| 3: LOG_LEVEL_WARNING | Journaux de niveau avertissement. |
| 4: LOG_LEVEL_ERROR | Journaux de niveau erreur. |
| 5: LOG_LEVEL_NONE | Désactive la sortie des journaux. |
Code d'exemple
- 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.
-
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.frameworksur Embed & Sign. - Ouvrez le projet d'exemple dans Xcode. Le code d'exemple se trouve dans
DashCosyVoiceStreamInputTTSViewController.m. Remplacez la clé API fictive par la vôtre et exécutez l'application pour l'essayer.
Modes d'appel
| Mode d'appel | Description |
|---|---|
| Entrée en une seule fois | Étapes :
|
| Entrée en streaming | Étapes :
|
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).