Convertissez du texte en parole expressive et de haute qualité dans votre application Android avec le SDK de synthèse vocale (TTS) CosyVoice.
NativeNui
Le SDK prend en charge plusieurs instances NativeNui et utilise des rappels pour fournir les événements de synthèse.
Points clés de l'architecture :-
Instances multiples : Créez une instance en appelant
new NativeNui(Constants.ModeType.MODE_STREAM_INPUT_TTS). -
Piloté par rappels : Recevez les événements et les données audio via l'interface
INativeStreamInputTtsCallback. -
Types d'événements :
STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTED: La tâche de synthèse a démarré.onStreamInputTtsDataCallback: Les données audio sont fournies.STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE: La tâche de synthèse est terminée.STREAM_INPUT_TTS_EVENT_TASK_FAILED: La tâche de synthèse a échoué.
Flux d'utilisation
CosyVoice prend en charge deux modes d'appel : l'entrée unique et l'entrée en streaming.
L'entrée unique est adaptée aux textes courts et à tout scénario utilisant le balisage SSML.
playStreamInputTts()ouasyncPlayStreamInputTts(): envoyer un texte complet et démarrer la synthèse. La première est synchrone et retourne un résultat une fois la synthèse terminée ; la seconde est asynchrone et retourne un résultat immédiatement après le démarrage de la synthèse.onStreamInputTtsDataCallback()— réception des données audio.STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE— la synthèse est terminée.
L'entrée en streaming est adaptée aux conversations en temps réel et aux scénarios de longue durée de type « parler au fil de l'eau ». Le SSML n'est pas pris en charge dans ce mode.
startStreamInputTts()— initialisation du SDK et configuration des paramètres de rappel et de connexion.sendStreamInputTts()— envoi de texte en continu au fur et à mesure qu'il devient disponible.onStreamInputTtsDataCallback()— réception des données audio.stopStreamInputTts()ouasyncStopStreamInputTts(): envoyer la requête de fin de synthèse. La première est synchrone et retourne un résultat une fois la synthèse terminée ; la seconde est asynchrone et retourne un résultat immédiatement après l'envoi de la requête.STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE— la synthèse est terminée.
startStreamInputTts
Démarre la synthèse en flux bidirectionnel, ouvre la connexion au service et enregistre le rappel pour les événements et les données audio.
Cette méthode peut bloquer. Appelez-la sur un thread autre que celui de l'interface utilisateur.
Signature de la méthode :public synchronized int startStreamInputTts(INativeStreamInputTtsCallback callback,
String ticket,
String parameters,
String session_id,
int log_level,
boolean save_log)
Paramètres :
| Paramètre | Type | Description |
|---|---|---|
callback | INativeStreamInputTtsCallback | Votre implémentation de l'interface de rappel des événements et des données. |
ticket | String | Une chaîne JSON contenant les paramètres d'authentification, de connexion et de débogage. Consultez la référence du paramètre ticket ci-dessous. |
parameters | String | Une chaîne JSON qui contrôle la sortie de la synthèse vocale. Consultez la référence des paramètres ci-dessous. |
session_id | String | Un identifiant de session spécifié par le client. S'il est omis, le serveur en génère un automatiquement. |
log_level | int | Contrôle le niveau de détail des journaux internes du SDK. Valeurs valides :
|
save_log | boolean | Indique s'il faut écrire les journaux dans un fichier local. Si true, définissez debug_path dans le ticket pour spécifier la destination, et définissez éventuellement max_log_file_size pour plafonner la taille du fichier. |
Renvoie un code d'erreur.
exemple JSON de ticket :{
"url": "wss://dashscope.aliyuncs.com/api-ws/v1/inference",
"apikey": "sk-****",
"device_id": "my_device_id"
}
paramètres du ticket :
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
url | String | Oui | Adresse du service :
Remplacez |
apikey | String | Oui | Votre clé API. Pour limiter la portée des dégâts en cas d'exposition d'une clé à longue durée de vie, utilisez plutôt une clé API temporaire à courte durée de vie. |
device_id | String | Oui | Un identifiant unique pour l'utilisateur final. Définissez-le sur votre identifiant d'utilisateur dans l'application ou sur un identifiant d'appareil généré par le client. Cet identifiant est principalement utilisé pour la corrélation des journaux et le dépannage. |
complete_waiting_ms | int | Non | Après avoir appelé la méthode stop, le temps en millisecondes à attendre pour l'événement STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE avant l'expiration du délai.Par défaut : 10000. |
debug_path | String | Non | Le chemin local où les fichiers journaux sont écrits. Ce paramètre prend effet uniquement lorsque Au maximum deux fichiers journaux sont conservés sur l'appareil. |
max_log_file_size | int | Non | La taille maximale du fichier journal en octets. Ce paramètre prend effet uniquement lorsque Par défaut : 104857600 (100 × 1024 × 1024 octets, ou 100 Mio). |
log_track_level | int | Non | Niveau de filtrage pour les journaux fournis via le rappel de journal (onStreamInputTtsLogTrackCallback).Par défaut : 2. Valeurs valides :
Remarque : |
{
"model": "cosyvoice-v3-plus",
"voice": "longanyang",
"format": "mp3",
"volume": 50,
"rate": 1.0,
"pitch": 1.0
}
référence des paramètres :
| Paramètre | 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 | boolean | Non | Indique s'il faut activer le décodeur interne du SDK. Par défaut : false. 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 | 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 | boolean | 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 : false. Valeurs valides :
|
sendStreamInputTts
Envoie le texte à synthétiser. Utilisez cette méthode conjointement avec startStreamInputTts.
Après avoir appelé startStreamInputTts, appelez cette méthode pour pousser du texte en continu.
Lorsque vous avez envoyé tout le texte, appelez stopStreamInputTts ou asyncStopStreamInputTts pour terminer l'entrée.
public synchronized int sendStreamInputTts(String text)
Paramètres :
| Paramètre | Type | Description |
|---|---|---|
text | String | Texte à synthétiser. Le SSML n'est pas pris en charge. Les balises SSML dans l'entrée sont lues à voix haute comme du texte brut plutôt que d'être analysées. |
Renvoie un code d'erreur.
stopStreamInputTts
Méthode synchrone qui indique au serveur que tout le texte a été envoyé et qui bloque jusqu'à ce que tout l'audio ait été synthétisé et que l'événement STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE soit reçu.
Le délai d'attente est contrôlé par complete_waiting_ms.
public synchronized int stopStreamInputTts()
Valeur de retour :
Renvoie un code d'erreur.
asyncStopStreamInputTts
Méthode asynchrone qui indique au serveur que tout le texte a été envoyé. L'appel retourne immédiatement et la synthèse se poursuit en arrière-plan.
Utilisez l'événement STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE pour détecter la fin de la synthèse.
public synchronized int asyncStopStreamInputTts()
Valeur de retour :
Renvoie un code d'erreur.
cancelStreamInputTts
Ferme immédiatement la connexion au serveur et interrompt la tâche de synthèse en cours. Aucun autre rappel audio n'est fourni après cet appel.
Signature de la méthode :public synchronized int cancelStreamInputTts()
Valeur de retour :
Renvoie un code d'erreur.
playStreamInputTts
Méthode de synthèse synchrone à entrée unique. L'appel envoie le texte, bloque pendant la réception de l'audio et ne retourne qu'une fois la synthèse terminée. Vous n'avez pas besoin d'appeler la méthode stop par la suite.
Le SSML est activé par défaut pour cette méthode. Pour modifier ce comportement, définissez explicitement enable_ssml.
Appeler cette méthode sur un thread non UI.
Signature de la méthode :public synchronized int playStreamInputTts(INativeStreamInputTtsCallback callback,
String ticket,
String parameters,
String text,
String session_id,
int log_level,
boolean save_log)
Paramètres :
Le rappel, le ticket et les autres paramètres partagés ont la même signification que dans startStreamInputTts.
| Paramètre | Type | Description |
|---|---|---|
text | String | Texte à synthétiser. Prend en charge le SSML. |
Renvoie un code d'erreur.
asyncPlayStreamInputTts
Méthode de synthèse asynchrone à entrée unique. L'appel retourne immédiatement, la synthèse s'exécute en arrière-plan et les résultats sont fournis via le rappel. Vous n'avez pas besoin d'appeler la méthode stop par la suite.
Le SSML est activé par défaut pour cette méthode. Pour modifier ce comportement, définissez explicitement enable_ssml.
public synchronized int asyncPlayStreamInputTts(INativeStreamInputTtsCallback callback,
String ticket,
String parameters,
String text,
String session_id,
int log_level,
boolean save_log)
Paramètres :
Le rappel, le ticket et les autres paramètres partagés ont la même signification que dans startStreamInputTts.
| Paramètre | Type | Description |
|---|---|---|
text | String | Texte à synthétiser. Prend en charge le SSML. |
Renvoie un code d'erreur.
INativeStreamInputTtsCallback
L'interface de rappel TTS en streaming CosyVoice fournit les événements de synthèse, les données audio et les journaux.
onStreamInputTtsEventCallback : réception des événements
Signature de la méthode :void onStreamInputTtsEventCallback(StreamInputTtsEvent event,
String task_id,
String session_id,
int ret_code,
String error_msg,
String timestamp,
String all_response);
Paramètres :
| Paramètre | Type | Description |
|---|---|---|
event | StreamInputTtsEvent | L'événement en cours de distribution. |
task_id | String | L'identifiant de la tâche de synthèse. |
session_id | String | L'identifiant de session. Renvoyé tel que fourni par le client ; généré par le serveur s'il est omis. |
ret_code | int | Code d'erreur. Valide uniquement avec l'événement STREAM_INPUT_TTS_EVENT_TASK_FAILED. |
error_msg | String | Message d'erreur. Valide uniquement avec l'événement STREAM_INPUT_TTS_EVENT_TASK_FAILED. |
timestamp | String | Informations d'horodatage pour le résultat de la synthèse. |
all_response | String | La réponse JSON complète. L'analyser pour extraire toutes les données supplémentaires dont vous avez besoin. |
onStreamInputTtsDataCallback : réception des données audio
Le SDK invoque ce rappel de manière répétée pendant la synthèse. Lisez les données audio à partir du rappel.
Signature de la méthode :void onStreamInputTtsDataCallback(byte[] data);
Paramètres :
| Paramètre | Type | Description |
|---|---|---|
data | byte[] | Données audio pour le segment actuel. Les utiliser pour :
Remarques :
|
onStreamInputTtsLogTrackCallback : réception des journaux de suivi
Utilisez ce rappel pour recevoir les journaux internes détaillés du SDK, ce qui facilite le dépannage et le débogage.
Signature de la méthode :default void onStreamInputTtsLogTrackCallback(Constants.LogLevel level, String log)
StreamInputTtsEvent
Énumération des types d'événements pour la synthèse vocale en flux continu CosyVoice.
| Événement | Description |
|---|---|
STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTED | Le serveur a accepté la requête et a commencé le traitement. Peu de temps après cet événement, onStreamInputTtsDataCallback commence à renvoyer les premières données audio. |
STREAM_INPUT_TTS_EVENT_SENTENCE_SYNTHESIS | Informations d'exécution sur la synthèse, y compris les données de facturation. |
STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE | Le serveur a envoyé toutes les données audio, et onStreamInputTtsEventCallback ne sera plus appelé. Cet événement est le signal explicite que le flux audio est terminé. |
STREAM_INPUT_TTS_EVENT_TASK_FAILED | La tâche a échoué. Lisez le champ all_response de INativeStreamInputTtsCallback pour obtenir task_id, error_code et error_message afin d'identifier la cause. |
Code d'exemple
-
Obtenir une clé API : Obtenir une clé API. Pour des raisons de sécurité, stockez la clé API dans une variable d'environnement.
RemarqueUtilisez une clé API temporaire lorsque vous devez accorder un accès temporaire à une application ou à un utilisateur tiers, ou lorsque vous want contrôler strictement les opérations à haut risque telles que l'accès ou la suppression de données sensibles. Une clé API temporaire est valide pendant 60 secondes, après quoi vous devez en demander une nouvelle.
-
Téléchargez le SDK et exécutez l'exemple de code :
- Téléchargez le dernier package du SDK.
- Décompressez le package. Le SDK au format AAR se trouve dans
app/libs— ajoutez-le aux dépendances de votre projet. Pour l'intégration C++ Android, récupérez les bibliothèques partagées depuisandroid_libset les en-têtes depuisandroid_includeà l'intérieur du ZIP. - Ouvrez le projet dans Android Studio. Le code d'exemple se trouve dans
DashCosyVoiceStreamTtsActivity.java— remplacez la clé API par la vôtre pour tester la fonctionnalité.
Modes d'invocation
| Mode | Description |
|---|---|
Saisie de texte en une seule fois | Étapes :
|
Saisie de texte en flux continu | Étapes :
|
Fonctionnalités avancées
Balisage SSML
Objectif : Intégrer des balises XML dans le texte pour affiner la prononciation, la vitesse de parole, les pauses et autres détails prosodiques.
Limites : le SSML est pris en charge uniquement avec l'entrée de texte en une seule fois (les méthodes playStreamInputTts ou asyncPlayStreamInputTts). L'entrée de texte en streaming (la méthode sendStreamInputTts) ne prend pas en charge le SSML.
Utilisation : Lorsque vous appelez playStreamInputTts ou asyncPlayStreamInputTts, le SDK active automatiquement le SSML. Transmettez le texte contenant des balises SSML via le paramètre text.
Pour plus d'informations, consultez SSML.
Expressions mathématiques
Objectif : Permettre au modèle de lire correctement à voix haute les formules et expressions mathématiques courantes.
Utilisation : Transmettez le texte contenant des expressions mathématiques au format LaTeX via le paramètre text. Pour plus d'informations, consultez Convertir des formules LaTeX en parole (uniquement en langue chinoise).