Tous les produits
Search
Centre de documentation

Alibaba Cloud Model Studio:Qwen-Audio-3.0-ASR-Flash-Filetrans/Fun-ASR non-real-time speech recognition Java SDK

Dernière mise à jour :Sep 07, 2026

Cette rubrique détaille les paramètres et l'API du SDK Java pour la reconnaissance vocale hors temps réel Qwen-Audio-3.0-ASR-Flash-Filetrans/Fun-ASR.

Guide d'utilisation :Reconnaissance vocale hors temps réel. Pour les exigences d'entrée (formats audio pris en charge, limites de taille de fichier et de durée), consultez Spécifications audio.

Prérequis

Vous avez activé le service et obtenu une clé API. Veuillez configurer la clé API comme variable d'environnement plutôt que de la coder en dur, afin d'éviter les risques de sécurité liés à une fuite de code.

RemarquePour accorder un accès temporaire à des applications tierces ou à des utilisateurs, ou pour contrôler strictement des opérations sensibles (accès ou suppression de données confidentielles), nous recommandons d'utiliser des jetons d'authentification temporaires.

Contrairement aux clés API permanentes, les jetons d'authentification temporaires ont une durée de validité courte (60 secondes) et offrent une sécurité accrue. Ils conviennent aux scénarios d'appels temporaires et réduisent efficacement le risque de fuite de clé API.

Utilisation : dans votre code, remplacez la clé API initialement utilisée pour l'authentification par le jeton d'authentification temporaire obtenu.

Démarrage rapide

La classe principale (Transcription) fournit des interfaces pour soumettre une tâche de manière asynchrone, attendre sa fin de façon synchrone et interroger son résultat de manière asynchrone. Vous pouvez exécuter la reconnaissance vocale hors temps réel selon l'une des deux méthodes suivantes :

  • Soumission asynchrone avec attente synchrone : après la soumission d'une tâche, le thread actuel se bloque jusqu'à ce que la tâche soit terminée et que le résultat de reconnaissance soit retourné.
  • Soumission asynchrone avec interrogation asynchrone : après la soumission d'une tâche, appelez l'interface d'interrogation pour obtenir le résultat quand vous le souhaitez.

Soumettre une tâche de manière asynchrone et attendre sa fin de façon synchrone

image
  1. Configurez les paramètres de requête.

  2. Instanciez la classe principale (Transcription).

  3. Appelez la méthode asyncCall de la classe principale (Transcription) pour soumettre la tâche de manière asynchrone.

    Remarque

    • Le service de transcription de fichiers traite les tâches soumises via l'API au mieux de ses capacités. Une fois soumise, une tâche passe à l'état mis en file d'attente (PENDING). Le temps d'attente dépend de la longueur de la file et de la durée du fichier ; il ne peut donc pas être déterminé avec précision, mais reste généralement inférieur à quelques minutes. Dès que le traitement commence, la reconnaissance vocale s'effectue à une vitesse des centaines de fois supérieure au temps réel.
    • Une fois chaque tâche terminée, le résultat de reconnaissance et l'URL de téléchargement restent valides pendant 24 heures. Passé ce délai, vous ne pouvez plus interroger la tâche ni télécharger le résultat via l'URL retournée lors d'une requête précédente.
  4. Appelez la méthode wait de la classe principale (Transcription) pour attendre la fin de la tâche de manière synchrone.

    Une tâche peut se trouver dans l'état PENDING, RUNNING, SUCCEEDED ou FAILED. Tant que la tâche est dans l'état PENDING ou RUNNING, l'interface wait reste bloquante. Lorsque la tâche atteint l'état SUCCEEDED ou FAILED, l'interface wait cesse de bloquer et retourne le résultat de la tâche.

    wait retourne un résultat de tâche (TranscriptionResult).

Cliquez pour voir l'exemple complet

import com.alibaba.dashscope.audio.asr.transcription.*;
import com.alibaba.dashscope.utils.Constants;
import com.google.gson.*;

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. Configurations differ across regions.
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        // Create the transcription request parameters
        TranscriptionParam param =
                TranscriptionParam.builder()
                        // The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                        // If you have not configured the environment variable, replace the following line with your Model Studio API Key: .apiKey("sk-xxx")
                        //.apiKey("apikey")
                        .model("qwen-audio-3.0-asr-flash-filetrans") // This uses qwen-audio-3.0-asr-flash-filetrans as an example; change the model name as needed. Model list: https://www.alibabacloud.com/help/zh/model-studio/models
                        .fileUrls(
                                Arrays.asList(
                                        "{YOUR_AUDIO_URL}"))
                        .build();
        try {
            Transcription transcription = new Transcription();
            // Submit the transcription request
            TranscriptionResult result = transcription.asyncCall(param);
            System.out.println("RequestId: " + result.getRequestId());
            // Block and wait for the task to complete, then get the result
            result = transcription.wait(
                    TranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
            // Print the result
            System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(result.getOutput()));
        } catch (Exception e) {
            System.out.println("error: " + e);
        }
        System.exit(0);
    }
}

Soumettre une tâche de manière asynchrone et interroger le résultat de manière asynchrone

image
  1. Configurez les paramètres de requête.

  2. Instanciez la classe principale (Transcription).

  3. Appelez la méthode asyncCall de la classe principale (Transcription) pour soumettre la tâche de manière asynchrone.

    Remarque

    • Le service de transcription de fichiers traite les tâches soumises via l'API au mieux de ses capacités. Une fois soumise, une tâche passe à l'état mis en file d'attente (PENDING). Le temps d'attente dépend de la longueur de la file et de la durée du fichier ; il ne peut donc pas être déterminé avec précision, mais reste généralement inférieur à quelques minutes. Dès que le traitement commence, la reconnaissance vocale s'effectue à une vitesse des centaines de fois supérieure au temps réel.
    • Une fois chaque tâche terminée, le résultat de reconnaissance et l'URL de téléchargement restent valides pendant 24 heures. Passé ce délai, vous ne pouvez plus interroger la tâche ni télécharger le résultat via l'URL retournée lors d'une requête précédente.
  4. Appelez la méthode fetch de la classe principale (Transcription) dans une boucle jusqu'à l'obtention du résultat final de la tâche.

    Lorsque l'état de la tâche est SUCCEEDED ou FAILED, arrêtez l'interrogation et traitez le résultat.

    fetch retourne un résultat de tâche (TranscriptionResult).

Cliquez pour voir l'exemple complet

import com.alibaba.dashscope.audio.asr.transcription.*;
import com.alibaba.dashscope.common.TaskStatus;
import com.alibaba.dashscope.utils.Constants;
import com.google.gson.*;

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. Configurations differ across regions.
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        // Create the transcription request parameters
        TranscriptionParam param =
                TranscriptionParam.builder()
                        // The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                        // If you have not configured the environment variable, replace the following line with your Model Studio API Key: .apiKey("sk-xxx")
                        //.apiKey("apikey")
                        .model("qwen-audio-3.0-asr-flash-filetrans") // This uses qwen-audio-3.0-asr-flash-filetrans as an example; change the model name as needed. Model list: https://www.alibabacloud.com/help/zh/model-studio/models
                        .fileUrls(
                                Arrays.asList(
                                        "{YOUR_AUDIO_URL}"))
                        .build();
        try {
            Transcription transcription = new Transcription();
            // Submit the transcription request
            TranscriptionResult result = transcription.asyncCall(param);
            System.out.println("RequestId: " + result.getRequestId());
            // Poll for the task result in a loop until the task finishes
            while (true) {
                result = transcription.fetch(TranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
                if (result.getTaskStatus() == TaskStatus.SUCCEEDED || result.getTaskStatus() == TaskStatus.FAILED) {
                    break;
                }
                Thread.sleep(1000);
            }
            // Print the result
            System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(result.getOutput()));
        } catch (Exception e) {
            System.out.println("error: " + e);
        }
        System.exit(0);
    }
}

Endpoints

Par défaut, le SDK utilise l'endpoint de la région Chine (Pékin). Pour basculer vers une autre région, modifiez Constants.baseHttpApiUrl avant l'initialisation.

Singapour

https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1

Lors de l'appel, remplacez {WorkspaceId} par votre véritable ID d'espace de travail.

Chine (Pékin)

https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1

Lors de l'appel, remplacez {WorkspaceId} par votre véritable ID d'espace de travail.

ImportantAlibaba Cloud Model Studio a publié des domaines spécifiques aux espaces de travail pour les régions Chine (Pékin) et Singapour. Ces nouveaux domaines dédiés offrent des performances supérieures et une stabilité accrue pour les requêtes d'inférence. Nous recommandons de migrer vers ces nouveaux domaines :

  • Chine (Pékin) : de dashscope.aliyuncs.com vers {WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapour : de dashscope-intl.aliyuncs.com vers {WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

Remplacez {WorkspaceId} par votre véritable ID d'espace de travail. Les domaines existants restent pleinement fonctionnels.

Basculer vers la région Singapour :

import com.alibaba.dashscope.utils.Constants;

// Set this at the beginning of your code
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";

Remarque :

  • Les clés API diffèrent selon les régions. Assurez-vous d'utiliser la clé API correspondant à la région cible.
  • Le paramètre de région est global et affecte les appels API de tous les SDK DashScope.

Paramètres de requête

Configurez les paramètres de requête à l'aide des méthodes chaînées de TranscriptionParam.

Cliquez pour voir l'exemple

TranscriptionParam param = TranscriptionParam.builder()
  .model("qwen-audio-3.0-asr-flash-filetrans")
  .fileUrls(
          Arrays.asList(
                  "{YOUR_AUDIO_URL}"))
  .build();
ParamètreTypeObligatoireDescription

model

String

Oui

Nom du modèle. Les valeurs prises en charge incluent les familles de modèles Qwen-Audio-3.0-ASR-Flash-Filetrans et Fun-ASR. Pour plus de détails, consultez Modèles et régions pris en charge.

fileUrls

List<String>

Oui

Liste des URL des fichiers audio ou vidéo à transcrire. HTTP et HTTPS sont pris en charge. Une seule requête ne prend en charge qu'une seule URL. Pour les exigences d'entrée telles que les formats audio pris en charge, les limites de taille de fichier et les limites de durée, consultez Spécifications audio.

Si l'enregistrement est stocké dans Alibaba Cloud OSS, l'API RESTful prend en charge les URL temporaires préfixées par oss://, tandis que le SDK ne prend pas en charge les URL temporaires préfixées par oss://.

Important

  • Une URL temporaire est valide pendant 48 heures et ne peut plus être utilisée après expiration. Ne l'utilisez pas en production.

  • L'interface d'identifiant de téléchargement est limitée à 100 QPS et ne peut pas être mise à l'échelle. Ne l'utilisez pas en production, dans des scénarios à haute concurrence ou lors de tests de charge.

  • Pour la production, utilisez un stockage stable tel qu'Alibaba Cloud OSS afin de garantir la disponibilité à long terme des fichiers et d'éviter les limitations de débit.

  • Si une URL de fichier audio définie sur une URL publique temporaire OSS est inaccessible, définissez X-DashScope-OssResourceResolve sur enable dans l'en-tête de requête (non recommandé).

    Le SDK ne prend pas en charge la configuration des en-têtes de requête.

vocabularyId

String

Non

ID d'une liste de mots chauds précompilée.

Générez cet ID au préalable en appelant l'API de création de liste de mots chauds. Transmettez l'ID lors de la reconnaissance pour utiliser les mots chauds de la liste.

Convient aux scénarios où le vocabulaire est connu et relativement stable, et où vous devez réutiliser la même liste de mots entre plusieurs requêtes.

Pour plus de détails sur l'utilisation, consultez Mots chauds précompilés.

vocabulary

Map<String, Integer>

Non

Mots chauds instantanés.

Transmis sous forme de paires clé-valeur, où la clé est le texte du mot chaud (string) et la valeur est le poids du mot chaud (integer). Aucune liste de mots chauds n'a besoin d'être créée au préalable. Le poids varie de [1, 5] ou est fixé à 50 : une valeur dans [1, 5] augmente la probabilité que le modèle produise le mot à mesure que la valeur croît ; une valeur de 50 désigne un super mot chaud, ce qui améliore considérablement le rappel, mais le nombre de super mots chauds ne peut pas dépasser 50.

Convient à l'optimisation temporaire des mots chauds au niveau de la session.

Lorsqu'ils sont configurés conjointement avec des mots chauds précompilés, seuls les mots chauds instantanés prennent effet. Pour plus de détails sur l'utilisation, consultez Mots chauds instantanés.

ImportantSeul qwen-audio-3.0-asr-flash-filetrans prend en charge les mots chauds en ligne.

RemarqueDéfinissez vocabulary via la méthode parameter ou la méthode parameters de l'instance TranscriptionParam :

Map<String, Integer> vocab = new HashMap<>();
    vocab.put("John Smith", 5);
    vocab.put("Jane Doe", 5);

    TranscriptionParam param = TranscriptionParam.builder()
      .model("qwen-audio-3.0-asr-flash-filetrans")
      .parameter("vocabulary", vocab)
      .build();
Map<String, Integer> vocab = new HashMap<>();
    vocab.put("John Smith", 5);
    vocab.put("Jane Doe", 5);

    TranscriptionParam param = TranscriptionParam.builder()
      .model("qwen-audio-3.0-asr-flash-filetrans")
      .parameters(Collections.singletonMap("vocabulary", vocab))
      .build();

channelId

List<Integer>

Non

Index des pistes audio à reconnaître dans un fichier audio multipiste. L'index commence à 0. Par exemple, [0] reconnaît la première piste, et [0, 1] reconnaît simultanément les première et deuxième pistes. Si vous omettez ce paramètre, seule la première piste est traitée.

ImportantChaque piste spécifiée est facturée indépendamment. Par exemple, demander [0, 1] pour un seul fichier entraîne deux facturations distinctes.

Valeur par défaut : [0].

specialWordFilter

String

Non

Mots sensibles à traiter lors de la reconnaissance vocale. Vous pouvez définir une méthode de gestion différente pour chaque mot sensible. Pour plus de détails, consultez Filtrage des mots sensibles.

diarizationEnabled

Boolean

Non

Indique s'il faut activer la diarisation des locuteurs. Désactivé par défaut.

S'applique uniquement à l'audio mono. L'audio multicanal ne prend pas en charge la diarisation des locuteurs.

Lorsque cette option est activée, le résultat de reconnaissance inclut un champ speaker_id qui distingue les différents locuteurs.

RemarqueLorsque la diarisation des locuteurs est activée, maintenez la durée audio en dessous de 2 heures. Sinon, la reconnaissance peut échouer ou expirer.

Valeur par défaut : false.

Pour un exemple de speaker_id, consultez Description du résultat de reconnaissance.

speakerCount

Integer

Non

ImportantPrend effet uniquement lorsque la diarisation des locuteurs est activée (diarization_enabled est défini sur true).

Valeur de référence pour le nombre de locuteurs. La plage valide est un entier de 2 à 100 (inclus).

Par défaut, le nombre de locuteurs est détecté automatiquement. Si vous définissez cette valeur, elle guide simplement l'algorithme pour produire le nombre spécifié lorsque cela est possible, sans garantir ce compte exact.

Aucune valeur par défaut.

language_hints

String[]

Non

Codes de langue à reconnaître. Si vous ne pouvez pas déterminer la langue à l'avance, laissez ce champ vide et le modèle détectera la langue automatiquement.

Pour les modèles Qwen-Audio-3.0-ASR-Flash-Filetrans, vous pouvez définir jusqu'à 4 valeurs ; toute valeur au-delà des 4 premières est ignorée. Pour les modèles Fun-ASR, vous ne pouvez définir qu'une seule valeur ; si vous en définissez plusieurs, seule la première prend effet.

Cliquez pour voir les codes de langue pris en charge

  • qwen-audio-3.0-asr-flash-filetrans, fun-asr, fun-asr-2025-11-07, fun-asr-mtl, fun-asr-mtl-2025-08-25 :

    • zh : Chinois
    • en : Anglais
    • ja : Japonais
    • ko : Coréen
    • vi : Vietnamien
    • th : Thaï
    • id : Indonésien
    • ms : Malais
    • tl : Filipino
    • hi : Hindi
    • ar : Arabe
    • fr : Français
    • de : Allemand
    • es : Espagnol
    • pt : Portugais
    • ru : Russe
    • it : Italien
    • nl : Néerlandais
    • sv : Suédois
    • da : Danois
    • fi : Finnois
    • no : Norvégien
    • el : Grec
    • pl : Polonais
    • cs : Tchèque
    • hu : Hongrois
    • ro : Roumain
    • bg : Bulgare
    • hr : Croate
    • sk : Slovaque
  • fun-asr-2025-08-25 :

    • zh : Chinois
    • en : Anglais

RemarqueDéfinissez language_hints via la méthode parameter ou la méthode parameters de l'instance TranscriptionParam :

TranscriptionParam param = TranscriptionParam.builder()
      .model("qwen-audio-3.0-asr-flash-filetrans")
      .parameter("language_hints", new String[]{"zh"})
      .build();
TranscriptionParam param = TranscriptionParam.builder()
      .model("qwen-audio-3.0-asr-flash-filetrans")
      .parameters(Collections.singletonMap("language_hints", new String[]{"zh"}))
      .build();

apiKey

String

Non

Votre clé API. Si vous avez configuré la clé API comme variable d'environnement, vous n'avez pas besoin de la définir dans votre code. Dans le cas contraire, vous devez la définir dans votre code.

Réponse

Résultat de tâche (TranscriptionResult)

TranscriptionResult encapsule le résultat de la tâche actuelle.

Interface/MéthodeParamètreValeur de retourDescription
public String getRequestId()

Aucun

requestId

Obtient le requestId.

public String getTaskId()

Aucun

taskId

Obtient le taskId.

public TaskStatus getTaskStatus()

Aucun

TaskStatus, l'état de la tâche

Obtient l'état de la tâche.

TaskStatus est une énumération. Seuls les quatre états suivants sont pertinents : PENDING, RUNNING, SUCCEEDED et FAILED.

RemarqueLorsqu'une tâche contient plusieurs sous-tâches, l'état global de la tâche est marqué comme SUCCEEDED dès qu'une seule sous-tâche réussit. Utilisez le champ subtask_status pour vérifier le résultat de chaque sous-tâche individuelle.

public List<TranscriptionTaskResult> getResults()

Aucun

Résultat de sous-tâche (TranscriptionTaskResult)

Obtient le résultat de sous-tâche (TranscriptionTaskResult).

Chaque tâche reconnaît un ou plusieurs fichiers audio. Les différents fichiers audio sont traités dans des sous-tâches distinctes ; chaque tâche correspond donc à une ou plusieurs sous-tâches.

public JsonObject getOutput()

Aucun

Le résultat de la tâche, au format JSON

Obtient le résultat de la tâche.

Le résultat est constitué de données au format JSON. Si vous souhaitez obtenir le résultat de la tâche via l'interface getOutput, analysez-le vous-même après l'avoir obtenu.

Cliquez pour voir l'exemple JSON

Exemple de succès
{
        "task_id":"0795ff8c-b666-4e91-bb8b-xxx",
        "task_status":"SUCCEEDED",
        "submit_time":"2025-02-13 16:12:09.109",
        "scheduled_time":"2025-02-13 16:12:09.128",
        "end_time":"2025-02-13 16:12:10.189",
        "results":[
            {
                "file_url":"{YOUR_AUDIO_URL}",
                "transcription_url":"https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/prod/paraformer-v2/20250213/16%3A12/3baafe5f-d09d-46c6-8b01-724927670edb-1.json?Expires=1739520730&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
                "subtask_status":"SUCCEEDED"
            }
        ],
        "task_metrics":{
            "TOTAL":1,
            "SUCCEEDED":1,
            "FAILED":0
        }
    }
Exemple d'erreur

« code » est le code d'erreur et « message » est le message d'erreur. Ces deux champs n'apparaissent qu'en cas d'erreur. Vous pouvez les utiliser, conjointement avec les codes d'erreur, pour résoudre le problème.

{
              "task_id": "7bac899c-06ec-4a79-8875-xxxxxxxxxxxx",
              "task_status": "SUCCEEDED",
              "submit_time": "2024-12-16 16:30:59.170",
              "scheduled_time": "2024-12-16 16:30:59.204",
              "end_time": "2024-12-16 16:31:02.375",
              "results": [
                  {
                      "file_url": "{YOUR_AUDIO_URL}",
                      "code": "InvalidFile.DownloadFailed",
                      "message": "The audio file cannot be downloaded.",
                      "subtask_status": "FAILED"
                  }
              ],
              "task_metrics": {
                  "TOTAL": 1,
                  "SUCCEEDED": 0,
                  "FAILED": 1
              }
          }

Résultat de sous-tâche (TranscriptionTaskResult)

TranscriptionTaskResult encapsule le résultat d'une sous-tâche. Une sous-tâche reconnaît un seul fichier audio.

Interface/MéthodeParamètreValeur de retourDescription
public String getFileUrl()

Aucun

URL du fichier audio reconnu

Obtient l'URL du fichier audio reconnu.

public String getTranscriptionUrl()

Aucun

URL du résultat de reconnaissance

Obtient l'URL du résultat de reconnaissance. Cette URL est valide pendant 24 heures. Une fois expirée, vous ne pouvez plus interroger la tâche ni télécharger le résultat via l'URL retournée lors d'une requête précédente.

Le résultat de reconnaissance est enregistré sous forme de fichier JSON. Vous pouvez télécharger le fichier via l'URL ou lire directement son contenu via une requête HTTP.

Pour la signification de chaque champ dans les données JSON, consultez Description du résultat de reconnaissance.

public TaskStatus getSubTaskStatus()

Aucun

TaskStatus, l'état de la sous-tâche

Obtient l'état de la sous-tâche.

TaskStatus est une énumération. Seuls les quatre états suivants sont pertinents : PENDING, RUNNING, SUCCEEDED et FAILED.

public String getMessage()

Aucun

Informations clés générées lors de l'exécution de la tâche, pouvant être vides

Obtient les informations clés générées lors de l'exécution de la tâche.

En cas d'échec d'une tâche, vérifiez ce contenu pour en analyser la cause.

Description du résultat de reconnaissance

Le résultat de reconnaissance est enregistré sous forme de fichier JSON.

Cliquez pour voir l'exemple de résultat de reconnaissance

{
    "file_url":"{YOUR_AUDIO_URL}",
    "properties":{
        "audio_format":"pcm_s16le",
        "channels":[
            0
        ],
        "original_sampling_rate":16000,
        "original_duration_in_milliseconds":3834
    },
    "transcripts":[
        {
            "channel_id":0,
            "content_duration_in_milliseconds":3720,
            "text":"Hello world, this is Alibaba Speech Lab.",
            "sentences":[
                {
                    "begin_time":100,
                    "end_time":3820,
                    "text":"Hello world, this is Alibaba Speech Lab.",
                    "sentence_id":1,
                    "speaker_id":0, //This field is displayed only when automatic speaker diarization is enabled
                    "words":[
                        {
                            "begin_time":100,
                            "end_time":596,
                            "text":"Hello ",
                            "punctuation":""
                        },
                        {
                            "begin_time":596,
                            "end_time":844,
                            "text":"world",
                            "punctuation":", "
                        }
                        // Other content is omitted here
                    ]
                }
            ]
        }
    ]
}

Les paramètres suivants méritent une attention particulière :

Paramètre

Type

Description

audio_format

string

Format audio du fichier source.

channels

array[integer]

Index de piste de l'audio dans le fichier source. Pour un audio monopiste, [0] est retourné ; pour un audio bipiste, [0, 1] est retourné, et ainsi de suite.

original_sampling_rate

integer

Taux d'échantillonnage (Hz) de l'audio dans le fichier source.

original_duration_in_milliseconds

integer

Durée audio originale (ms) dans le fichier source.

channel_id

integer

Index de piste du résultat de transcription, commençant à 0.

content_duration

integer

Durée (ms) du contenu de la piste identifié comme parole.

Le service de modèle de reconnaissance vocale transcrit uniquement le contenu d'une piste identifié comme parole, et facture en fonction de cette durée. Le contenu non vocal n'est ni mesuré ni facturé. En règle générale, la durée du contenu vocal est inférieure à la durée audio originale. Étant donné que la présence de contenu vocal est déterminée par un modèle d'IA, le résultat peut différer légèrement de la situation réelle.

transcript

string

Résultat de transcription au niveau du paragraphe.

sentences

array

Résultat de transcription au niveau de la phrase.

words

array

Résultat de transcription au niveau du mot.

begin_time

integer

Horodatage de début (ms).

end_time

integer

Horodatage de fin (ms).

text

string

Résultat de transcription.

speaker_id

integer

Index du locuteur actuel, commençant à 0, utilisé pour distinguer les différents locuteurs.

Ce champ n'apparaît dans le résultat de reconnaissance que si la diarisation des locuteurs est activée.

punctuation

string

Ponctuation prédite après le mot, le cas échéant.

Interfaces clés

Classe de paramètres d'interrogation de tâche (TranscriptionQueryParam)

TranscriptionQueryParam est utilisé lors de l'attente de la fin d'une tâche (appel de la méthode wait de Transcription) ou de l'interrogation du résultat de la tâche (appel de la méthode fetch de Transcription).

Créez une instance TranscriptionQueryParam via la méthode statique FromTranscriptionParam.

Afficher l'exemple

// Build the transcription request parameters
TranscriptionParam param =
        TranscriptionParam.builder()
                // If you have not set the API key as an environment variable, replace apiKey with your own API key
                //.apiKey("apikey")
                .model("qwen-audio-3.0-asr-flash-filetrans")
                .fileUrls(
                        Arrays.asList(
                                "{YOUR_AUDIO_URL}"))
                .build();
try {
    Transcription transcription = new Transcription();
    // Submit the transcription request
    TranscriptionResult result = transcription.asyncCall(param);
    System.out.println("RequestId: " + result.getRequestId());
    TranscriptionQueryParam queryParam = TranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId());

} catch (Exception e) {
    System.out.println("error: " + e);
}
Interface/méthodeParamètresValeur de retourDescription
public static TranscriptionQueryParam FromTranscriptionParam(TranscriptionParam param, String taskId)
  • param : une instance TranscriptionParam
  • taskId : l'ID de la tâche

une instance TranscriptionQueryParam

Crée une instance TranscriptionQueryParam.

Classe principale (Transcription)

Importez Transcription avec « import com.alibaba.dashscope.audio.asr.transcription.*; ». Ses interfaces clés sont les suivantes :

Interface/méthodeParamètresValeur de retourDescription
public TranscriptionResult asyncCall(TranscriptionParam param)

param : les paramètres de reconnaissance vocale, une instance TranscriptionParam

Résultat de tâche (TranscriptionResult)

Soumet une tâche de reconnaissance vocale de manière asynchrone.

public TranscriptionResult wait(TranscriptionQueryParam queryParam)

queryParam : une instance TranscriptionQueryParam

Résultat de tâche (TranscriptionResult)

Bloque le thread actuel jusqu'à la fin de la tâche asynchrone (l'état de la tâche est SUCCEEDED ou FAILED).

public TranscriptionResult fetch(TranscriptionQueryParam queryParam)

queryParam : une instance TranscriptionQueryParam

Résultat de tâche (TranscriptionResult)

Interroge le résultat de la tâche actuelle de manière asynchrone.

Codes d'erreur

Si vous rencontrez une erreur, consultez les codes d'erreur pour résoudre le problème.

Lorsqu'une tâche contient plusieurs sous-tâches, l'état global de la tâche est marqué comme SUCCEEDED dès qu'au moins une sous-tâche réussit. Vérifiez le champ subtask_status pour déterminer le résultat de chaque sous-tâche.

Exemple de réponse d'erreur :

{
    "task_id": "7bac899c-06ec-4a79-8875-xxxxxxxxxxxx",
    "task_status": "SUCCEEDED",
    "submit_time": "2024-12-16 16:30:59.170",
    "scheduled_time": "2024-12-16 16:30:59.204",
    "end_time": "2024-12-16 16:31:02.375",
    "results": [
        {
            "file_url": "{YOUR_AUDIO_URL}",
            "code": "InvalidFile.DownloadFailed",
            "message": "The audio file cannot be downloaded.",
            "subtask_status": "FAILED"
        }
    ],
    "task_metrics": {
        "TOTAL": 1,
        "SUCCEEDED": 0,
        "FAILED": 1
    }
}

FAQ

Fonctionnalités

Q : L'audio encodé en Base64 est-il pris en charge ?

L'audio encodé en Base64 n'est pas pris en charge. Seul l'audio accessible via une URL publique peut être reconnu. Les flux binaires et les fichiers locaux ne peuvent pas être reconnus directement.

Q : Comment rendre un fichier audio disponible via une URL accessible publiquement ?

Les étapes typiques sont les suivantes. Il s'agit d'une approche parmi d'autres ; le processus exact varie selon le produit de stockage. Nous vous recommandons de télécharger l'audio vers Alibaba Cloud OSS :

1. Choisir une méthode de stockage et d'hébergement

Par exemple :

  • Service de stockage objet (recommandé) :

    • Utilisez le service de stockage objet d'un fournisseur cloud (tel qu'Alibaba Cloud OSS) pour télécharger le fichier audio dans un bucket et le configurer en accès public.
    • Avantages : haute disponibilité, prise en charge de l'accélération CDN et gestion simplifiée.
  • Serveur web :

    • Placez le fichier audio sur un serveur web prenant en charge l'accès HTTP/HTTPS (tel que Nginx ou Apache).
    • Avantages : convient aux petits projets ou aux tests locaux.
  • Réseau de diffusion de contenu (CDN) :

    • Hébergez le fichier audio sur un CDN et accédez-y via l'URL fournie par le CDN.
    • Avantages : accélère la distribution des fichiers et convient aux scénarios à forte concurrence.

2. Télécharger le fichier audio

Téléchargez l'audio selon la méthode de stockage ou d'hébergement choisie. Par exemple :

  • Service de stockage objet :

    • Connectez-vous à la console du fournisseur cloud et créez un bucket.
    • Téléchargez le fichier audio et définissez son autorisation sur lecture publique ou générez un lien d'accès temporaire.
  • Serveur web :

    • Placez le fichier audio dans un répertoire dédié sur le serveur (tel que /var/www/html/audio/).
    • Assurez-vous que le fichier est accessible via HTTP/HTTPS.

3. Générer une URL accessible publiquement

Par exemple :

  • Service de stockage objet :

    • Après le téléchargement du fichier, le système génère automatiquement une URL d'accès public (généralement au format https://<bucket-name>.<region>.aliyuncs.com/<file-name>).
    • Pour un nom de domaine plus convivial, liez un domaine personnalisé et activez HTTPS.
  • Serveur web :

    • L'URL d'accès correspond généralement à l'adresse du serveur suivie du chemin du fichier (comme https://your-domain.com/audio/file.mp3).
  • CDN :

    • Après avoir configuré l'accélération CDN, utilisez l'URL fournie par le CDN (telle que https://cdn.your-domain.com/audio/file.mp3).

4. Vérifier que l'URL fonctionne

Assurez-vous que l'URL générée est accessible sur le réseau public. Par exemple :

  • Ouvrez l'URL dans un navigateur et vérifiez si le fichier audio se lit.
  • Utilisez un outil (tel que curl ou Postman) pour vérifier que l'URL retourne la réponse HTTP correcte (code d'état 200).

Lors de l'utilisation du SDK, si les fichiers audio sont stockés dans Alibaba Cloud OSS, les URL temporaires avec le préfixe oss:// ne sont pas prises en charge.

Lors de l'utilisation de l'API RESTful, si les fichiers audio sont stockés dans Alibaba Cloud OSS, les URL temporaires avec le préfixe oss:// sont prises en charge :

  • L'URL temporaire est valide pendant 48 heures et ne peut plus être utilisée après expiration. Ne l'utilisez pas dans un environnement de production.
  • L'API pour obtenir un identifiant de téléchargement est limitée à 100 QPS et ne prend pas en charge la mise à l'échelle. Ne l'utilisez pas dans des environnements de production, des scénarios à haute concurrence ou des scénarios de test de charge.
  • Pour les environnements de production, utilisez un service de stockage stable tel qu'OSS pour garantir la disponibilité à long terme des fichiers et éviter les problèmes de limitation de débit.

Q : Combien de temps faut-il pour obtenir le résultat de reconnaissance ?

Une fois une tâche soumise, elle passe à l'état mis en file d'attente (PENDING). Le temps d'attente dépend de la longueur de la file et de la durée de l'audio ; il ne peut donc pas être déterminé exactement, mais reste généralement inférieur à quelques minutes. En règle générale, plus l'audio est long, plus le traitement prend du temps.

Dépannage

Si votre code retourne une erreur, résolvez le problème en vous basant sur les informations contenues dans les codes d'erreur.

Q : L'interrogation ne retourne jamais de résultat ?

Cela peut être dû à une limitation de débit. Patientez un instant et réessayez.

Q : Pourquoi la parole n'est-elle pas reconnue (aucun résultat de reconnaissance) ?

Vérifiez que le format audio et le taux d'échantillonnage sont corrects et respectent les contraintes des paramètres.

Utilisez l'outil ffprobe pour obtenir le conteneur audio, le codec, le taux d'échantillonnage, les canaux et d'autres détails :

ffprobe -v error -show_entries format=format_name -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 input.xxx