Todos los productos
Search
Centro de documentos

Alibaba Cloud Model Studio:SDK de Java para reconocimiento de voz no en tiempo real de Qwen-Audio-3.x-ASR-Flash-Filetrans/Fun-ASR

Última actualización: Oct 12, 2026

Este tema describe los parámetros y los detalles de la API del SDK de Java para reconocimiento de voz no en tiempo real de Qwen-Audio-3.x-ASR-Flash-Filetrans/Fun-ASR.

Guía del usuario:Reconocimiento de voz no en tiempo real. Para los requisitos de entrada, como formatos de audio compatibles, límites de tamaño de archivo y límites de duración, consulte Especificaciones de audio.

Requisitos previos

Ha activado el servicio y ha seguido los pasos para Obtener una clave de API. Por favor, Configure la clave de API como una variable de entorno en lugar de codificarla directamente en su código para prevenir riesgos de seguridad causados por fugas de código.

NotaCuando necesite proporcionar acceso temporal a aplicaciones o usuarios externos, o cuando want controlar estrictamente operaciones de alto riesgo como acceder o eliminar datos sensibles, le recomendamos utilizar tokens de autenticación temporal.

En comparación con las claves de API a largo plazo, los tokens de autenticación temporal tienen un período de validez corto (60 segundos) y mayor seguridad, lo que los hace adecuados para escenarios de llamadas temporales y reduce eficazmente el riesgo de fuga de claves de API.

Uso: En su código, reemplace la clave de API utilizada originalmente para la autenticación con el token de autenticación temporal obtenido.

Inicio rápido

La Clase principal (Transcription) proporciona interfaces para enviar una tarea de forma asíncrona, esperar sincrónicamente a que finalice la tarea y consultar el resultado de la tarea de forma asíncrona. Puede ejecutar el reconocimiento de voz no en tiempo real de cualquiera de las dos maneras siguientes:

  • Enviar una tarea de forma asíncrona y esperar sincrónicamente a que finalice: después de enviar una tarea, el hilo actual se bloquea hasta que la tarea termina y se devuelve el resultado de reconocimiento.
  • Enviar una tarea de forma asíncrona y consultar el resultado de la tarea de forma asíncrona: después de enviar una tarea, llame a la interfaz de consulta para obtener el resultado de la tarea cuando lo necesite.

Enviar una tarea de forma asíncrona y esperar sincrónicamente a que finalice

imagen
  1. Configure los Parámetros de solicitud.

  2. Instancie una Clase principal (Transcription).

  3. Llame al método asyncCall de la Clase principal (Transcription) para enviar la tarea de forma asíncrona.

    Nota

    • El servicio de transcripción de archivos procesa las tareas enviadas a través de la API con el mejor esfuerzo posible. Después de enviar una tarea, esta entra en el estado de en cola (PENDING). El tiempo de espera depende de la longitud de la cola y de la duración del archivo, por lo que no se puede determinar con precisión, pero generalmente es de unos pocos minutos. Una vez que comienza el procesamiento, el reconocimiento de voz se completa a una velocidad cientos de veces superior al tiempo real.
    • Después de que finaliza cada tarea, el resultado de reconocimiento y la URL de descarga son válidos durante 24 horas. Después de su caducidad, ya no podrá consultar la tarea ni descargar el resultado a través de la URL devuelta en una consulta anterior.
  4. Llame al método wait de la Clase principal (Transcription) para esperar sincrónicamente a que finalice la tarea.

    Una tarea puede estar en estado PENDING, RUNNING, SUCCEEDED o FAILED. Mientras la tarea esté en estado PENDING o RUNNING, la interfaz wait se bloquea. Cuando la tarea alcanza el estado SUCCEEDED o FAILED, la interfaz wait deja de bloquearse y devuelve el resultado de la tarea.

    wait devuelve un Resultado de la tarea (TranscriptionResult).

Haga clic para ver el ejemplo completo

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/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.1-asr-flash-filetrans") // This uses qwen-audio-3.1-asr-flash-filetrans as an example; change the model name as needed. Model list: https://www.alibabacloud.com/help/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);
    }
}

Enviar una tarea de forma asíncrona y consultar el resultado de la tarea de forma asíncrona

imagen
  1. Configure los Parámetros de solicitud.

  2. Instancie una Clase principal (Transcription).

  3. Llame al método asyncCall de la Clase principal (Transcription) para enviar la tarea de forma asíncrona.

    Nota

    • El servicio de transcripción de archivos procesa las tareas enviadas a través de la API con el mejor esfuerzo posible. Después de enviar una tarea, esta entra en el estado de en cola (PENDING). El tiempo de espera depende de la longitud de la cola y de la duración del archivo, por lo que no se puede determinar con precisión, pero generalmente es de unos pocos minutos. Una vez que comienza el procesamiento, el reconocimiento de voz se completa a una velocidad cientos de veces superior al tiempo real.
    • Después de que finaliza cada tarea, el resultado de reconocimiento y la URL de descarga son válidos durante 24 horas. Después de su caducidad, ya no podrá consultar la tarea ni descargar el resultado a través de la URL devuelta en una consulta anterior.
  4. Llame al método fetch de la Clase principal (Transcription) en un bucle hasta obtener el resultado final de la tarea.

    Cuando el estado de la tarea sea SUCCEEDED o FAILED, detenga el sondeo y procese el resultado.

    fetch devuelve un Resultado de la tarea (TranscriptionResult).

Haga clic para ver el ejemplo completo

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/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.1-asr-flash-filetrans") // This uses qwen-audio-3.1-asr-flash-filetrans as an example; change the model name as needed. Model list: https://www.alibabacloud.com/help/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

De forma predeterminada, el SDK utiliza el endpoint de la región de China (Beijing). Para cambiar a otra región, modifique Constants.baseHttpApiUrl antes de la inicialización.

Singapore

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

Al realizar una llamada, reemplace {WorkspaceId} con su ID de espacio de trabajo real.

China (Beijing)

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

Al realizar una llamada, reemplace {WorkspaceId} con su ID de espacio de trabajo real.

ImportanteAlibaba Cloud Model Studio ha lanzado dominios específicos del espacio de trabajo para las regiones China (Pekín) y Singapore. Los nuevos dominios dedicados ofrecen un rendimiento superior y una mayor estabilidad para las solicitudes de inferencia. Recomendamos migrar a los nuevos dominios:

  • China (Pekín): de dashscope.aliyuncs.com a {WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapur: de dashscope-intl.aliyuncs.com a {WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

Reemplace {WorkspaceId} con su ID de espacio de trabajo real. Los dominios existentes permanecen totalmente funcionales.

Cambiar a la región de Singapur:

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";

Nota:

  • Las claves de API varían según la región. Asegúrese de utilizar la clave de API correspondiente a la región de destino.
  • La configuración de región es global y afecta las llamadas a la API de todos los SDK de DashScope.

Parámetros de solicitud

Configure los parámetros de solicitud utilizando los métodos encadenados de TranscriptionParam.

Haga clic para ver el ejemplo

TranscriptionParam param = TranscriptionParam.builder()
  .model("qwen-audio-3.1-asr-flash-filetrans")
  .fileUrls(
          Arrays.asList(
                  "{YOUR_AUDIO_URL}"))
  .build();
ParámetroTipoObligatorioDescripción

model

String

Sí

El nombre del modelo. Los valores admitidos incluyen las familias de modelos Qwen-Audio-3.x-ASR-Flash-Filetrans y Fun-ASR. Para más detalles, consulte Modelos y regiones admitidos.

fileUrls

List<String>

Sí

Una lista de URL de los archivos de audio o video a transcribir. Se admiten HTTP y HTTPS. Una sola solicitud admite únicamente una URL. Para los requisitos de entrada, como formatos de audio compatibles, límites de tamaño de archivo y límites de duración, consulte Especificaciones de audio.

Si la grabación se almacena en Alibaba Cloud OSS, la API RESTful admite URLs temporales con el prefijo oss://, mientras que el SDK no admite URLs temporales con el prefijo oss://.

Importante

  • Una URL temporal es válida durante 48 horas y no se puede usar después de que expire. No la use en producción.

  • La interfaz de credenciales de carga tiene un límite de tasa de 100 QPS y no se puede escalar. No la use en escenarios de producción, alta concurrencia o pruebas de carga.

  • Para producción, utilice almacenamiento estable como Alibaba Cloud OSS para mantener los archivos disponibles a largo plazo y evitar límites de tasa.

  • Si una URL de archivo de audio configurada como una URL pública temporal de OSS no es accesible, configure X-DashScope-OssResourceResolve en enable en el encabezado de la solicitud (no recomendado).

    El SDK no admite la configuración de encabezados de solicitud.

keep_dialect

boolean

No

Admitido solo por qwen-audio-3.1-asr-flash-filetrans. El valor predeterminado es false, que transcribe dialectos al chino estándar. Establézcalo en true para conservar las expresiones dialectales. Configúrelo con .parameter("keep_dialect", value). Consulte la Referencia de API para más detalles.

vocabularyId

String

No

El ID de una lista de palabras clave precompilada.

Genere este ID con antelación llamando a la API de creación de lista de palabras clave. Pase el ID durante el reconocimiento para usar las palabras clave de la lista.

Adecuado para escenarios donde el vocabulario es conocido y relativamente estable, y donde necesita reutilizar la misma lista de palabras en distintas solicitudes.

Para obtener detalles sobre el uso, consulte Palabras clave precompiladas.

vocabulary

Map<String, Integer>

No

Palabras clave instantáneas.

Se pasan como pares clave-valor, donde la clave es el texto de la palabra clave (string) y el valor es el peso de la palabra clave (integer). No es necesario crear una lista de palabras clave con antelación. El peso oscila entre [1, 5] o se establece en 50: un valor en [1, 5] hace que el modelo tenga más probabilidades de generar la palabra a medida que aumenta el valor; un valor de 50 designa una súper palabra clave, lo que mejora enormemente la recuperación, pero el número de súper palabras clave no puede exceder 50.

Adecuado para la optimización temporal de palabras clave a nivel de sesión.

Cuando las palabras clave instantáneas y precompiladas se configuran juntas, el sistema fusiona ambos conjuntos. Si el conjunto fusionado contiene más de 2000 palabras clave, el sistema selecciona aleatoriamente 2000 para usar. Para detalles de uso, consulte Palabras clave instantáneas.

ImportanteSolo qwen-audio-3.1-asr-flash-filetrans y qwen-audio-3.0-asr-flash-filetrans admiten palabras clave en línea.

NotaConfigure vocabulary mediante el método parameter o el método parameters de la instancia 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.1-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.1-asr-flash-filetrans")
  .parameters(Collections.singletonMap("vocabulary", vocab))
  .build();

channelId

List<Integer>

No

El índice de las pistas de audio a reconocer en un archivo de audio multipista. El índice comienza en 0. Por ejemplo, [0] reconoce la primera pista, y [0, 1] reconoce la primera y la segunda pista simultáneamente. Si omite este parámetro, solo se procesa la primera pista.

ImportanteCada pista especificada se factura de forma independiente. Por ejemplo, solicitar [0, 1] para un solo archivo incurre en dos cargos separados.

Valor predeterminado: [0].

specialWordFilter

String

No

Las palabras sensibles a procesar durante el reconocimiento de voz. Puede establecer un método de manejo diferente para cada palabra sensible. Para más detalles, consulte Filtrado de palabras sensibles.

diarizationEnabled

Boolean

No

Si se debe habilitar la diarización de hablantes. Deshabilitado de forma predeterminada.

Se aplica solo a audio monoaural. El audio multicanal no admite la diarización de hablantes.

Cuando está habilitado, el resultado del reconocimiento incluye un campo speaker_id que distingue a los diferentes hablantes.

NotaCuando la diarización de hablantes está habilitada, mantenga la duración del audio dentro de 2 horas. De lo contrario, el reconocimiento puede fallar o agotar el tiempo de espera.

Valor predeterminado: false.

Para ver un ejemplo de speaker_id, consulte Descripción del resultado de reconocimiento.

speakerCount

Integer

No

ImportanteSurte efecto solo cuando la diarización de hablantes está habilitada (diarization_enabled está configurado en true).

Un valor de referencia para el número de hablantes. El rango válido es un entero de 2 a 100 (inclusive).

De forma predeterminada, el número de hablantes se detecta automáticamente. Si configura este valor, solo guía al algoritmo para generar el recuento especificado cuando sea posible y no garantiza ese recuento exacto.

Sin valor predeterminado.

language_hints

String[]

No

Los códigos de idioma a reconocer. Si no puede determinar el idioma con antelación, déjelo sin configurar y el modelo detectará el idioma automáticamente.

Para los modelos Qwen-Audio-3.x-ASR-Flash-Filetrans, puede configurar hasta 4 valores; cualquier valor más allá de los primeros 4 se ignora. Para los modelos Fun-ASR, solo puede configurar 1 valor; si configura varios, solo el primero surte efecto.

Haga clic para ver los códigos de idioma admitidos

  • qwen-audio-3.1-asr-flash-filetrans, qwen-audio-3.0-asr-flash-filetrans, fun-asr:

    • zh: Chino
    • en: Inglés
    • ja: Japonés
    • ko: Coreano
    • vi: Vietnamita
    • th: Tailandés
    • id: Indonesio
    • ms: Malayo
    • tl: Filipino
    • hi: Hindi
    • ar: Árabe
    • fr: Francés
    • de: Alemán
    • es: Español
    • pt: Portugués
    • ru: Ruso
    • it: Italiano
    • nl: Neerlandés
    • sv: Sueco
    • da: Danés
    • fi: Finés
    • no: Noruego
    • el: Griego
    • pl: Polaco
    • cs: Checo
    • hu: Húngaro
    • ro: Rumano
    • bg: Búlgaro
    • hr: Croata
    • sk: Eslovaco

NotaConfigure language_hints mediante el método parameter o el método parameters de la instancia TranscriptionParam:

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

apiKey

String

No

Su clave de API. Si ha configurado la clave de API como una variable de entorno, no necesita establecerla en su código. De lo contrario, debe establecerla en su código.

Respuesta

Resultado de la tarea (TranscriptionResult)

TranscriptionResult encapsula el resultado de la tarea actual.

Interfaz/MétodoParámetroValor de retornoDescripción
public String getRequestId()

None

requestId

Obtiene el requestId.

public String getTaskId()

None

taskId

Obtiene el taskId.

public TaskStatus getTaskStatus()

None

TaskStatus, el estado de la tarea

Obtiene el estado de la tarea.

TaskStatus es una enumeración. Solo necesita prestar atención a los siguientes cuatro estados: PENDING, RUNNING, SUCCEEDED y FAILED.

NotaCuando una tarea contiene múltiples subtareas, el estado general de la tarea se marca como SUCCEEDED siempre que cualquier subtarea tenga éxito. Utilice el campo subtask_status para verificar el resultado de cada subtarea individual.

public List<TranscriptionTaskResult> getResults()

None

Resultado de subtarea (TranscriptionTaskResult)

Obtiene el Resultado de subtarea (TranscriptionTaskResult).

Cada tarea reconoce uno o más archivos de audio. Los diferentes archivos de audio se procesan en subtareas separadas, por lo que cada tarea corresponde a una o más subtareas.

public JsonObject getOutput()

None

El resultado de la tarea, en formato JSON

Obtiene el resultado de la tarea.

El resultado son datos en formato JSON. Si want obtener el resultado de la tarea a través de la interfaz getOutput, analícelo usted mismo después de obtener el resultado.

Haga clic para ver el ejemplo JSON

Ejemplo de éxito
{
    "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
    }
}
Ejemplo de error

“code” es el código de error y “message” es el mensaje de error. Estos dos campos aparecen solo cuando ocurre un error. Puede utilizarlos, junto con los Códigos de error, para solucionar el problema.

{
          "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
          }
      }

Resultado de subtarea (TranscriptionTaskResult)

TranscriptionTaskResult encapsula el resultado de una subtarea. Una subtarea reconoce un único archivo de audio.

Interfaz/MétodoParámetroValor de retornoDescripción
public String getFileUrl()

None

La URL del archivo de audio reconocido

Obtiene la URL del archivo de audio reconocido.

public String getTranscriptionUrl()

None

La URL del resultado de reconocimiento

Obtiene la URL del resultado de reconocimiento. Esta URL es válida durante 24 horas. Después de su caducidad, ya no podrá consultar la tarea ni descargar el resultado a través de la URL devuelta en una consulta anterior.

El resultado de reconocimiento se guarda como un archivo JSON. Puede descargar el archivo a través de la URL o leer su contenido directamente mediante una solicitud HTTP.

Para conocer el significado de cada campo en los datos JSON, consulte Descripción del resultado de reconocimiento.

public TaskStatus getSubTaskStatus()

None

TaskStatus, el estado de la subtarea

Obtiene el estado de la subtarea.

TaskStatus es una enumeración. Solo necesita prestar atención a los siguientes cuatro estados: PENDING, RUNNING, SUCCEEDED y FAILED.

public String getMessage()

None

Información clave generada durante la ejecución de la tarea, que puede estar vacía

Obtiene la información clave generada durante la ejecución de la tarea.

Cuando una tarea falle, revise este contenido para analizar la causa.

Descripción del resultado de reconocimiento

El resultado del reconocimiento se guarda como un archivo JSON.

Haga clic para ver el ejemplo de resultado de reconocimiento

{
    "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
                    ]
                }
            ]
        }
    ]
}

Los siguientes parámetros son dignos de mención:

Parámetro

Tipo

Descripción

audio_format

string

El formato de audio del archivo fuente.

channels

array[integer]

El índice de pista del audio en el archivo fuente. Para audio de una sola pista, se devuelve [0]; para audio de doble pista, se devuelve [0, 1]; y así sucesivamente.

original_sampling_rate

integer

La frecuencia de muestreo (Hz) del audio en el archivo fuente.

original_duration_in_milliseconds

integer

La duración original del audio (ms) en el archivo fuente.

channel_id

integer

El índice de pista del resultado de la transcripción, comenzando desde 0.

content_duration

integer

La duración (ms) del contenido en la pista que se identifica como voz.

El servicio de modelo de reconocimiento de voz transcribe únicamente el contenido de una pista identificada como voz, y realiza la medición y facturación basándose en dicha duración. El contenido que no es de voz no se mide ni se factura. Por lo general, la duración del contenido de voz es menor que la duración del audio original. Dado que la existencia de contenido de voz es determinada por un modelo de IA, el resultado puede diferir ligeramente de la situación real.

transcript

string

El resultado de la transcripción a nivel de párrafo.

sentences

array

El resultado de la transcripción a nivel de oración.

words

array

El resultado de la transcripción a nivel de palabra.

begin_time

integer

La marca de tiempo de inicio (ms).

end_time

integer

La marca de tiempo de finalización (ms).

text

string

El resultado de la transcripción.

speaker_id

integer

El índice del hablante actual, comenzando desde 0, utilizado para distinguir entre diferentes hablantes.

Este campo aparece en el resultado del reconocimiento solo cuando la diarización de hablantes está habilitada.

punctuation

string

La puntuación predicha después de la palabra, si la hay.

Interfaces clave

Clase de parámetros de consulta de tarea (TranscriptionQueryParam)

TranscriptionQueryParam se utiliza al esperar a que finalice una tarea (llamando al método wait de Transcription) o al consultar el resultado de la tarea (llamando al método fetch de Transcription).

Cree una instancia de TranscriptionQueryParam mediante el método estático FromTranscriptionParam.

Mostrar ejemplo

// 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);
}
Interfaz/métodoParámetrosValor de retornoDescripción
public static TranscriptionQueryParam FromTranscriptionParam(TranscriptionParam param, String taskId)
  • param: una instancia de TranscriptionParam
  • taskId: el ID de la tarea

una instancia de TranscriptionQueryParam

Crea una instancia de TranscriptionQueryParam.

Clase principal (Transcription)

Importe Transcription con "import com.alibaba.dashscope.audio.asr.transcription.*;". Sus interfaces principales son las siguientes:

Interfaz/métodoParámetrosValor de retornoDescripción
public TranscriptionResult asyncCall(TranscriptionParam param)

param: los parámetros de reconocimiento de voz, una instancia de TranscriptionParam

Resultado de la tarea (TranscriptionResult)

Envía una tarea de reconocimiento de voz de forma asíncrona.

public TranscriptionResult wait(TranscriptionQueryParam queryParam)

queryParam: una instancia de TranscriptionQueryParam

Resultado de la tarea (TranscriptionResult)

Bloquea el hilo actual hasta que finalice la tarea asíncrona (el estado de la tarea es SUCCEEDED o FAILED).

public TranscriptionResult fetch(TranscriptionQueryParam queryParam)

queryParam: una instancia de TranscriptionQueryParam

Resultado de la tarea (TranscriptionResult)

Consulta el resultado de la tarea actual de forma asíncrona.

Códigos de error

Si encuentra un error, consulte Códigos de error para solucionar el problema.

Cuando una tarea contiene múltiples subtareas, el estado general de la tarea se marca como SUCCEEDED siempre que al menos una subtarea tenga éxito. Verifique el campo subtask_status para determinar el resultado de cada subtarea.

Ejemplo de respuesta de error:

{
    "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

Funcionalidades

P: ¿Se admite audio codificado en Base64?

No se admite audio codificado en Base64. Solo se puede reconocer audio en una URL de acceso público. Las secuencias binarias y los archivos locales no se pueden reconocer directamente.

P: ¿Cómo puedo hacer que un archivo de audio esté disponible en una URL de acceso público?

Los pasos típicos son los siguientes. Este es un enfoque; el proceso exacto varía según el producto de almacenamiento. Le recomendamos que cargue el audio en Alibaba Cloud OSS:

1. Elegir un método de almacenamiento y alojamiento

Por ejemplo:

  • Servicio de almacenamiento de objetos (recomendado):

    • Utilice el servicio de almacenamiento de objetos de un proveedor de servicios en la nube (como Alibaba Cloud OSS) para cargar el archivo de audio en un bucket y configurarlo como acceso público.
    • Ventajas: alta disponibilidad, soporte de aceleración CDN y gestión sencilla.
  • Servidor web:

    • Coloque el archivo de audio en un servidor web que admita acceso HTTP/HTTPS (como Nginx o Apache).
    • Ventajas: adecuado para proyectos pequeños o pruebas locales.
  • Red de entrega de contenido (CDN):

    • Aloje el archivo de audio en una CDN y acceda a él a través de la URL proporcionada por la CDN.
    • Ventajas: acelera la entrega de archivos y es adecuado para escenarios de alta concurrencia.

2. Cargar el archivo de audio

Cargue el audio según el método de almacenamiento o alojamiento que haya elegido. Por ejemplo:

  • Servicio de almacenamiento de objetos:

    • Inicie sesión en la consola del proveedor de servicios en la nube y cree un bucket.
    • Cargue el archivo de audio y configure su permiso como lectura pública o genere un enlace de acceso temporal.
  • Servidor web:

    • Coloque el archivo de audio en un directorio designado del servidor (como /var/www/html/audio/).
    • Asegúrese de que el archivo sea accesible mediante HTTP/HTTPS.

3. Generar una URL de acceso público

Por ejemplo:

  • Servicio de almacenamiento de objetos:

    • Después de cargar el archivo, el sistema genera automáticamente una URL de acceso público (generalmente en el formato https://<bucket-name>.<region>.aliyuncs.com/<file-name>).
    • Para un nombre de dominio más amigable, vincule un dominio personalizado y habilite HTTPS.
  • Servidor web:

    • La URL de acceso suele ser la dirección del servidor más la ruta del archivo (como https://your-domain.com/audio/file.mp3).
  • CDN:

    • Después de configurar la aceleración CDN, utilice la URL proporcionada por la CDN (como https://cdn.your-domain.com/audio/file.mp3).

4. Verificar que la URL funcione

Asegúrese de que la URL generada sea accesible a través de la red pública. Por ejemplo:

  • Abra la URL en un navegador y verifique si el archivo de audio se reproduce.
  • Utilice una herramienta (como curl o Postman) para verificar que la URL devuelva la respuesta HTTP correcta (código de estado 200).

Al utilizar el SDK, si los archivos de audio están almacenados en Alibaba Cloud OSS, no se admiten URLs temporales con el prefijo oss://.

Al utilizar la API RESTful, si los archivos de audio están almacenados en Alibaba Cloud OSS, se admiten URLs temporales con el prefijo oss://:

  • La URL temporal es válida durante 48 horas y no se puede utilizar después de su caducidad. No la utilice en un entorno de producción.
  • La API para obtener una credencial de carga está limitada a 100 QPS y no admite escalado horizontal. No la utilice en entornos de producción, escenarios de alta concurrencia o escenarios de pruebas de estrés.
  • Para entornos de producción, utilice un servicio de almacenamiento estable como OSS para garantizar la disponibilidad de archivos a largo plazo y evitar problemas de limitación de tasa.

P: ¿Cuánto tiempo tarda en obtenerse el resultado de reconocimiento?

Después de enviar una tarea, esta entra en estado de espera (PENDING). El tiempo de espera depende de la longitud de la cola y la duración del audio, por lo que no se puede indicar con exactitud, pero generalmente es de unos pocos minutos. En general, cuanto más largo sea el audio, más tiempo tardará.

Solución de problemas

Si su código devuelve un error, soluciónelo basándose en la información de Códigos de error.

P: ¿El sondeo nunca devuelve un resultado?

Esto puede deberse a una limitación de tasa. Espere un momento e inténtelo de nuevo.

P: ¿Por qué no se puede reconocer el habla (sin resultado de reconocimiento)?

Verifique que el formato de audio y la frecuencia de muestreo sean correctos y cumplan con las restricciones de los parámetros.

Utilice la herramienta ffprobe para obtener el contenedor de audio, códec, frecuencia de muestreo, canales y otros detalles:

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