QwenCloudBRASIL
Tradução de apoio para consulta. Código e identificadores técnicos preservados. Consultar referência original ↗

Transcrição de arquivo de áudio

Converta arquivos em texto

Modelos de reconhecimento de fala não em tempo real convertem áudio gravado em texto. Eles apoiam reconhecimento multilingue, reconhecimento de canto, rejeição de ruído, e diarização de falantes, o que os torna adequados para atender transcrição, análise de chamadas, geração de legendas, e cenários semelhantes.

QwenCloud Também ofereceQwen-ASRPara reconhecimento com compreensão semântica melhorada eQwen-Omni** para transcrição baseada em um rápido entendimento contextual.

Para a disponibilidade de modelos, idiomas suportados e comparação de características, veja [Modelos de voz para texto] (/developer-guides/speech/speech-to-text-models).

Características principais

Modelos apoiados.

Pré-requisitos

Começando.

Qwen-Audio-3.x-ASR-Flash-Filetrans/Fun-ASR

### - A disponibilidade do modelo.
Modelo Versão Preço unitário Quota livre(Nota)
fun-asr Estável. US$ 0.000035/second 36 mil segundos (10 horas)
Válido por 90 dias.
fun-asr-flash-2026-06-15
Suporta chamadas sincronizadas (até 5 minutos) e melhoria de contexto
Deslize US$ 0.000035/second 36 mil segundos (10 horas)
Válido por 90 dias.
- Linguagens suportadas:
  - fun-asr(30 línguas) (/api-reference/speech-recognition/fun-asr-recording/restful-api#supported-languages)

- * Taxas de amostragem suportadas *

- ** Formatos de áudio suportados**: aac, amr, avi, flac, flv, m4a, mkv, mov, mp3, mp4, mpeg, ogg, opus, wav, webm, wma, wmv

###  Faça sua primeira ligação.

[Pegue uma chave API] (/api-reference/preparation/api-keyE o define como uma variável de ambiente./api-reference/preparation/export-api-key-env). Para usar o SDK, [instale-o] (/api-reference/preparation/install-sdk).

 Porque arquivos de áudio e vídeo são grandes, transferência de arquivos e reconhecimento de fala podem levar muito tempo. A API de reconhecimento de arquivos usa invocação assíncrona para enviar tarefas.  Depois que o reconhecimento do arquivo estiver completo, você deve usar a API de consulta para recuperar os resultados do reconhecimento de fala.

#### Async, submeta e sincronize, espere.

Submeta uma tarefa e bloqueie até que seja feito.



  ```python Python
  from http import HTTPStatus
  from dashscope.audio.asr import Transcription
  from urllib import request
  import dashscope
  import os
  import json

  dashscope.base_http_api_url = 'https://maas.qwencloudapi.com/api/v1'

  # If you have not configured an environment variable, replace the following line with your API key: dashscope.api_key = "sk-xxx"
  dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")

  task_response = Transcription.async_call(
    model='qwen-audio-3.1-asr-flash-filetrans',
    file_urls=['https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260401/bjgrbu/hello_world_female_en.wav',
        'https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260401/rlrbee/hello_world_male_en.wav'],
    language_hints=['zh', 'en']  # language_hints is an optional parameter that specifies the language code of the audio to be recognized. For the value range, see the API reference.
  )

  transcription_response = Transcription.wait(task=task_response.output.task_id)

  if transcription_response.status_code == HTTPStatus.OK:
    for transcription in transcription_response.output['results']:
      if transcription['subtask_status'] == 'SUCCEEDED':
        url = transcription['transcription_url']
        result = json.loads(request.urlopen(url).read().decode('utf8'))
        print(json.dumps(result, indent=4,
        ensure_ascii=False))
      else:
        print('transcription failed!')
        print(transcription)
  else:
    print('Error: ', transcription_response.output.message)
  ```

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

  import java.io.BufferedReader;
  import java.io.InputStreamReader;
  import java.net.HttpURLConnection;
  import java.net.URL;
  import java.util.Arrays;
  import java.util.List;

  public class Main {
    public static void main(String[] args) {
      Constants.baseHttpApiUrl = "https://maas.qwencloudapi.com/api/v1";
      // Create transcription request parameters.
      TranscriptionParam param =
          TranscriptionParam.builder()
              // If you have not configured an environment variable, replace the following line with your API key: .apiKey("sk-xxx")
              .apiKey(System.getenv("DASHSCOPE_API_KEY"))
              .model("qwen-audio-3.1-asr-flash-filetrans")
              // language_hints is an optional parameter that specifies the language code of the audio to be recognized. For the value range, see the API reference.
              .parameter("language_hints", new String[]{"zh", "en"})
              .fileUrls(
                  Arrays.asList(
                  "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260401/bjgrbu/hello_world_female_en.wav",
                  "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260401/rlrbee/hello_world_male_en.wav"))
              .build();
      try {
        Transcription transcription = new Transcription();
        // Submit the transcription request.
        TranscriptionResult result = transcription.asyncCall(param);
        System.out.println("RequestId: " + result.getRequestId());
        // Check whether the task was submitted successfully.
        if (result.getTaskId() == null) {
          System.out.println("Error: " + result.getOutput());
          System.exit(1);
        }
        // Block and wait for the task to complete and get the result.
        result = transcription.wait(
            TranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
        // Get the transcription result.
        List<TranscriptionTaskResult> taskResultList = result.getResults();
        if (taskResultList != null && taskResultList.size() > 0) {
          for (TranscriptionTaskResult taskResult : taskResultList) {
            String transcriptionUrl = taskResult.getTranscriptionUrl();
            HttpURLConnection connection =
                (HttpURLConnection) new URL(transcriptionUrl).openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
            BufferedReader reader =
                new BufferedReader(new InputStreamReader(connection.getInputStream()));
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            JsonElement jsonResult = gson.fromJson(reader, JsonObject.class);
            System.out.println(gson.toJson(jsonResult));
          }
        }
      } catch (Exception e) {
        System.out.println("error: " + e);
      }
      System.exit(0);
    }
  }
  ```

O resultado do reconhecimento completo é impresso no console no formato JSON. O resultado inclui o texto transcrito e os tempos de início e fim do texto no arquivo de áudio ou vídeo, especificado em milissegundos.

   Primeiro resultado

  ```json
  {
    "file_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260401/bjgrbu/hello_world_female_en.wav",
    "properties": {
      "audio_format": "pcm_s16le",
      "channels": [
        0
      ],
      "original_sampling_rate": 24000,
      "original_duration_in_milliseconds": 3280
    },
    "transcripts": [
      {
        "channel_id": 0,
        "content_duration_in_milliseconds": 3000,
        "text": "Hello world, this is Alibaba Speech Lab. ",
        "sentences": [
          {
            "begin_time": 240,
            "end_time": 3240,
            "text": "Hello world, this is Alibaba Speech Lab. ",
            "sentence_id": 1,
            "words": [
              {
                "begin_time": 240,
                "end_time": 640,
                "text": "Hello",
                "punctuation": ""
              },
              {
                "begin_time": 640,
                "end_time": 960,
                "text": " world",
                "punctuation": ","
              },
              {
                "begin_time": 1280,
                "end_time": 1480,
                "text": " this",
                "punctuation": ""
              },
              {
                "begin_time": 1480,
                "end_time": 1840,
                "text": " is",
                "punctuation": ""
              },
              {
                "begin_time": 1840,
                "end_time": 2520,
                "text": " Alibaba",
                "punctuation": ""
              },
              {
                "begin_time": 2520,
                "end_time": 2920,
                "text": " Speech",
                "punctuation": ""
              },
              {
                "begin_time": 2920,
                "end_time": 3240,
                "text": " Lab",
                "punctuation": ". "
              }
            ]
          }
        ]
      }
    ]
  }
  ```

   Segundo resultado

  ```json
  {
    "file_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260401/rlrbee/hello_world_male_en.wav",
    "properties": {
      "audio_format": "pcm_s16le",
      "channels": [
        0
      ],
      "original_sampling_rate": 24000,
      "original_duration_in_milliseconds": 4000
    },
    "transcripts": [
      {
        "channel_id": 0,
        "content_duration_in_milliseconds": 3160,
        "text": "Hello world, this is Alibaba Speech Lab. ",
        "sentences": [
          {
            "begin_time": 800,
            "end_time": 3960,
            "text": "Hello world, this is Alibaba Speech Lab. ",
            "sentence_id": 1,
            "words": [
              {
                "begin_time": 800,
                "end_time": 1200,
                "text": "Hello",
                "punctuation": ""
              },
              {
                "begin_time": 1200,
                "end_time": 1640,
                "text": " world",
                "punctuation": ","
              },
              {
                "begin_time": 1880,
                "end_time": 2120,
                "text": " this",
                "punctuation": ""
              },
              {
                "begin_time": 2120,
                "end_time": 2560,
                "text": " is",
                "punctuation": ""
              },
              {
                "begin_time": 2560,
                "end_time": 3360,
                "text": " Alibaba",
                "punctuation": ""
              },
              {
                "begin_time": 3360,
                "end_time": 3720,
                "text": " Speech",
                "punctuation": ""
              },
              {
                "begin_time": 3720,
                "end_time": 3960,
                "text": " Lab",
                "punctuation": ". "
              }
            ]
          }
        ]
      }
    ]
  }
  ```



#### Submeter e fazer uma pergunta

 Envie uma tarefa e pesquise para resultados em vez de bloquear.



  ```python Python
  from http import HTTPStatus
  from dashscope.audio.asr import Transcription
  import dashscope
  import os
  import json

  dashscope.base_http_api_url = 'https://maas.qwencloudapi.com/api/v1'

  # If you have not configured an environment variable, replace the following line with your API key: dashscope.api_key = "sk-xxx"
  dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")

  transcribe_response = Transcription.async_call(
    model='qwen-audio-3.1-asr-flash-filetrans',
    file_urls=['https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260401/bjgrbu/hello_world_female_en.wav',
        'https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260401/rlrbee/hello_world_male_en.wav']
  )

  while True:
    if transcribe_response.output.task_status == 'SUCCEEDED' or transcribe_response.output.task_status == 'FAILED':
      break
    transcribe_response = Transcription.fetch(task=transcribe_response.output.task_id)

  if transcribe_response.status_code == HTTPStatus.OK:
    print(json.dumps(transcribe_response.output, indent=4, ensure_ascii=False))
    print('transcription done!')
  ```

  ```java Java
  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) {
      Constants.baseHttpApiUrl = "https://maas.qwencloudapi.com/api/v1";
      // Create transcription request parameters.
      TranscriptionParam param =
          TranscriptionParam.builder()
              // If you have not configured an environment variable, replace the following line with your API key: .apiKey("sk-xxx")
              .apiKey(System.getenv("DASHSCOPE_API_KEY"))
              .model("qwen-audio-3.1-asr-flash-filetrans")
              .fileUrls(
                  Arrays.asList(
                      "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260401/bjgrbu/hello_world_female_en.wav",
                      "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260401/rlrbee/hello_world_male_en.wav"))
              .build();
      try {
        Transcription transcription = new Transcription();
        // Submit the transcription request.
        TranscriptionResult result = transcription.asyncCall(param);
        System.out.println("RequestId: " + result.getRequestId());
        // Check whether the task was submitted successfully.
        if (result.getTaskId() == null) {
          System.out.println("Error: " + result.getOutput());
          System.exit(1);
        }
        // Poll for the task execution result until the task is complete.
        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);
    }
  }
  ```



#### API RESTful

Use qualquer biblioteca HTTP para enviar tarefas e pesquisas para resultados.  Esta amostra Python demonstra o fluxo de trabalho:

```python
import requests
import json
import os
import time

# If you have not configured environment variables, replace the following line with your API key: api_key = "sk-xxx"
api_key = os.getenv("DASHSCOPE_API_KEY")
file_urls = [
  "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260401/bjgrbu/hello_world_female_en.wav",
  "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260401/rlrbee/hello_world_male_en.wav",
]

region = "maas.qwencloudapi.com"

# Submit a file transcription task, including a list of file URLs to be transcribed
def submit_task(apikey, file_urls) -> str:

  headers = {
    "Authorization": f"Bearer {apikey}",
    "Content-Type": "application/json",
    "X-DashScope-Async": "enable",
  }
  data = {
    "model": "qwen-audio-3.1-asr-flash-filetrans",
    "input": {"file_urls": file_urls},
    "parameters": {
      "channel_id": [0],
      # "vocabulary_id": "vocab-Xxxx", # Optional, hotword ID.
    },
  }
  # URL of the audio file transcription service
  service_url = (
    f"https://{region}/api/v1/services/audio/asr/transcription"
  )
  response = requests.post(
    service_url, headers=headers, data=json.dumps(data)
  )

  # Print the response content
  if response.status_code == 200:
    return response.json()["output"]["task_id"]
  else:
    print("task failed!")
    print(response.json())
    return None

# Recursively query the task status until it is successful
def wait_for_complete(task_id):
  headers = {
    "Authorization": f"Bearer {api_key}",
    "Content-Type": "application/json",
    "X-DashScope-Async": "enable",
  }

  pending = True
  while pending:
    # URL of the task status query service
    service_url = f"https://{region}/api/v1/tasks/{task_id}"
    response = requests.post(
      service_url, headers=headers
    )
    if response.status_code == 200:
      status = response.json()['output']['task_status']
      if status == 'SUCCEEDED':
        print("task succeeded!")
        pending = False
        return response.json()['output']['results']
      elif status == 'RUNNING' or status == 'PENDING':
        pass
      else:
        print("task failed!")
        pending = False
    else:
      print("query failed!")
      pending = False
    print(response.json())
    time.sleep(0.1)

task_id = submit_task(apikey=api_key, file_urls=file_urls)
print("task_id: ", task_id)
result = wait_for_complete(task_id)
print("transcription result: ", result)
```

####  Chamadas sincrônicas (Qwen-Audio-3.x-ASR-Flash/Fun-ASR-Flash)

O Qwen-Audio-3.x-ASR-Flash e Fun-ASR-Flash  Série de modelos suportam chamadas sincronizadas para arquivos de áudio menores de 5 minutos.  Os resultados podem ser retornados em modo de transmissão ou não.

```bash
curl --location --request POST 'https://maas.qwencloudapi.com/api/v1/services/aigc/multimodal-generation/generation' \
  --header "Authorization: Bearer $DASHSCOPE_API_KEY" \
  --header "Content-Type: application/json" \
  --header "X-DashScope-SSE: disable" \
  --data '{
  "model": "qwen-audio-3.1-asr-flash",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "input_audio",
            "input_audio": {
              "data": "{YOUR_AUDIO_URL}"
            }
          }
        ]
      }
    ]
  },
  "parameters": {
    "format": "wav",
    "sample_rate": "16000"
  }
}'
```



  **Responda nota estrutura:** Qwen-Audio-3.x-ASR-Flash e Fun-ASR-Flash A série de modelos retorna uma estrutura de resposta através da API síncrona DashScope (o endpoint multimodal) que difere do formato de resposta multimodal padrão DashScope. O texto reconhecido está disponível em `output.output.sentence.text` e `output.text` Na resposta, não em `output.choices[].message.content`.  Quando analisar respostas desses modelos, use o `output.output`  caminho para acessar os resultados do reconhecimento.

   Exemplo de resposta:

  ```json
  {
    "output": {
      "output": {
        "sentence": {
          "text": "Hello World, this is Alibaba Speech Lab."
        }
      },
      "text": "Hello World, this is Alibaba Speech Lab."
    },
    "request_id": "..."
  }
  ```

Qwen-ASR

 Antes de começar, pegue uma chave API (/api-reference/preparation/api-key). Para usar o SDK, [instale-o] (/api-reference/preparation/install-sdk).

DashScope

Qwen3-ASR-Flash-Filetrans

        Qwen3-ASR-Flash-Filetrans é projetado para transcrição assíncrona de arquivos de áudio e suporta gravações de até 12 horas de duração. Este modelo requer uma URL acessível publicamente de um arquivo de áudio como entrada e não suporta uploads diretos de arquivos locais. É uma API não-streaming que retorna o resultado completo de reconhecimento após a tarefa completa.

cURL

             Quando você usa o CURL para reconhecimento de fala, primeiro envie uma tarefa para obter uma tarefa ID (tarefa\_id), e depois use o ID para recuperar o resultado da tarefa.

            #### Submeta uma tarefa

            ```bash
            curl -X POST 'https://maas.qwencloudapi.com/api/v1/services/audio/asr/transcription' \
            -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
            -H "Content-Type: application/json" \
            -H "X-DashScope-Async: enable" \
            -d '{
              "model": "qwen3-asr-flash-filetrans",
              "input": {
                "file_url": "{YOUR_AUDIO_URL}"
              },
              "parameters": {
                "channel_id":[
                  0
                ],
                "enable_itn": false,
                "enable_words": true
              }
            }'
            ```

            ####  Obter o resultado da tarefa

            ```bash
            curl -X GET 'https://maas.qwencloudapi.com/api/v1/tasks/{task_id}' \
            -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
            -H "Content-Type: application/json"
            ```

            ####  Exemplo completo.

            

              ```java Java
              import com.google.gson.Gson;
              import com.google.gson.annotations.SerializedName;
              import okhttp3.*;

              import java.io.IOException;
              import java.util.concurrent.TimeUnit;

              public class Main {
                private static final String API_URL_SUBMIT = "https://maas.qwencloudapi.com/api/v1/services/audio/asr/transcription";
                private static final String API_URL_QUERY = "https://maas.qwencloudapi.com/api/v1/tasks/";
                private static final Gson gson = new Gson();

                public static void main(String[] args) {
                  // If you have not configured environment variables, replace the following line with: String apiKey = "sk-xxx"
                  String apiKey = System.getenv("DASHSCOPE_API_KEY");

                  OkHttpClient client = new OkHttpClient();

                  // 1. Submit task
                  String payloadJson = """
                      {
                        "model": "qwen3-asr-flash-filetrans",
                        "input": {
                          "file_url": "{YOUR_AUDIO_URL}"
                        },
                        "parameters": {
                          "channel_id": [0],
                          "enable_itn": false,
                          "enable_words": true
                        }
                      }
                      """;

                  RequestBody body = RequestBody.create(payloadJson, MediaType.get("application/json; charset=utf-8"));
                  Request submitRequest = new Request.Builder()
                      .url(API_URL_SUBMIT)
                      .addHeader("Authorization", "Bearer " + apiKey)
                      .addHeader("Content-Type", "application/json")
                      .addHeader("X-DashScope-Async", "enable")
                      .post(body)
                      .build();

                  String taskId = null;

                  try (Response response = client.newCall(submitRequest).execute()) {
                    if (response.isSuccessful() && response.body() != null) {
                      String respBody = response.body().string();
                      ApiResponse apiResp = gson.fromJson(respBody, ApiResponse.class);
                      if (apiResp.output != null) {
                        taskId = apiResp.output.taskId;
                        System.out.println("Task submitted. task_id: " + taskId);
                      } else {
                        System.out.println("Submission response content: " + respBody);
                        return;
                      }
                    } else {
                      System.out.println("Task submission failed! HTTP code: " + response.code());
                      if (response.body() != null) {
                        System.out.println(response.body().string());
                      }
                      return;
                    }
                  } catch (IOException e) {
                    e.printStackTrace();
                    return;
                  }

                  // 2. Poll task status
                  boolean finished = false;
                  while (!finished) {
                    try {
                      TimeUnit.SECONDS.sleep(2);  // Wait for 2 seconds before querying again
                    } catch (InterruptedException e) {
                      Thread.currentThread().interrupt();
                      return;
                    }

                    String queryUrl = API_URL_QUERY + taskId;
                    Request queryRequest = new Request.Builder()
                        .url(queryUrl)
                        .addHeader("Authorization", "Bearer " + apiKey)
                        .addHeader("Content-Type", "application/json")
                        .get()
                        .build();

                    try (Response response = client.newCall(queryRequest).execute()) {
                      if (response.body() != null) {
                        String queryResponse = response.body().string();
                        ApiResponse apiResp = gson.fromJson(queryResponse, ApiResponse.class);

                        if (apiResp.output != null && apiResp.output.taskStatus != null) {
                          String status = apiResp.output.taskStatus;
                          System.out.println("Current task status: " + status);
                          if ("SUCCEEDED".equalsIgnoreCase(status)
                              || "FAILED".equalsIgnoreCase(status)
                              || "UNKNOWN".equalsIgnoreCase(status)) {
                            finished = true;
                            System.out.println("Task completed. Final result: ");
                            System.out.println(queryResponse);
                          }
                        } else {
                          System.out.println("Query response content: " + queryResponse);
                        }
                      }
                    } catch (IOException e) {
                      e.printStackTrace();
                      return;
                    }
                  }
                }

                static class ApiResponse {
                  @SerializedName("request_id")
                  String requestId;
                  Output output;
                }

                static class Output {
                  @SerializedName("task_id")
                  String taskId;
                  @SerializedName("task_status")
                  String taskStatus;
                }
              }
              ```

              ```python Python
              import os
              import time
              import requests
              import json

              API_URL_SUBMIT = "https://maas.qwencloudapi.com/api/v1/services/audio/asr/transcription"
              API_URL_QUERY_BASE = "https://maas.qwencloudapi.com/api/v1/tasks/"

              def main():
                # If you have not configured environment variables, replace the following line with: api_key = "sk-xxx"
                api_key = os.getenv("DASHSCOPE_API_KEY")

                headers = {
                  "Authorization": f"Bearer {api_key}",
                  "Content-Type": "application/json",
                  "X-DashScope-Async": "enable"
                }

                # 1. Submit the task
                payload = {
                  "model": "qwen3-asr-flash-filetrans",
                  "input": {
                    "file_url": "{YOUR_AUDIO_URL}"
                  },
                  "parameters": {
                    "channel_id": [0],
                    # "language": "zh",
                    "enable_itn": False,
                    "enable_words": True
                  }
                }

                print("Submitting ASR transcription task...")
                try:
                  submit_resp = requests.post(API_URL_SUBMIT, headers=headers, data=json.dumps(payload))
                except requests.RequestException as e:
                  print(f"Failed to submit task request: {e}")
                  return

                if submit_resp.status_code != 200:
                  print(f"Task submission failed! HTTP code: {submit_resp.status_code}")
                  print(submit_resp.text)
                  return

                resp_data = submit_resp.json()
                output = resp_data.get("output")
                if not output or "task_id" not in output:
                  print("Abnormal submission response content:", resp_data)
                  return

                task_id = output["task_id"]
                print(f"Task submitted. task_id: {task_id}")

                # 2. Poll the task status
                finished = False
                while not finished:
                  time.sleep(2)  # Wait for 2 seconds before querying again

                  query_url = API_URL_QUERY_BASE + task_id
                  try:
                    query_resp = requests.get(query_url, headers={"Authorization": f"Bearer {api_key}"})
                  except requests.RequestException as e:
                    print(f"Failed to query task: {e}")
                    return

                  if query_resp.status_code != 200:
                    print(f"Task query failed! HTTP code: {query_resp.status_code}")
                    print(query_resp.text)
                    return

                  query_data = query_resp.json()
                  output = query_data.get("output")
                  if output and "task_status" in output:
                    status = output["task_status"]
                    print(f"Current task status: {status}")

                    if status.upper() in ("SUCCEEDED", "FAILED", "UNKNOWN"):
                      finished = True
                      print("Task completed. Final result:")
                      print(json.dumps(query_data, indent=2, ensure_ascii=False))
                  else:
                    print("Query response content:", query_data)

              if __name__ == "__main__":
                main()
              ```

Java SDK

            ```java
            import com.alibaba.dashscope.audio.qwen_asr.*;
            import com.alibaba.dashscope.utils.Constants;
            import com.google.gson.Gson;
            import com.google.gson.GsonBuilder;
            import com.google.gson.JsonObject;

            import java.io.BufferedReader;
            import java.io.InputStreamReader;
            import java.net.HttpURLConnection;
            import java.net.URL;
            import java.util.ArrayList;
            import java.util.HashMap;

            public class Main {
              public static void main(String[] args) {
                Constants.baseHttpApiUrl = "https://maas.qwencloudapi.com/api/v1";
                QwenTranscriptionParam param =
                    QwenTranscriptionParam.builder()
                        // If you have not configured environment variables, replace the following line with: .apiKey("sk-xxx")
                        .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                        .model("qwen3-asr-flash-filetrans")
                        .fileUrl("{YOUR_AUDIO_URL}")
                        //.parameter("language", "zh")
                        //.parameter("channel_id", new ArrayList<String>(){{add("0");add("1");}})
                        .parameter("enable_itn", false)
                        .parameter("enable_words", true)
                        .build();
                try {
                  QwenTranscription transcription = new QwenTranscription();
                  // Submit the task
                  QwenTranscriptionResult result = transcription.asyncCall(param);
                  System.out.println("create task result: " + result);
                  // Query the task status
                  result = transcription.fetch(QwenTranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
                  System.out.println("task status: " + result);
                  // Wait for the task to complete
                  result =
                      transcription.wait(
                          QwenTranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
                  System.out.println("task result: " + result);
                  // Get the speech recognition result
                  QwenTranscriptionTaskResult taskResult = result.getResult();
                  if (taskResult != null) {
                    // Get the URL of the recognition result
                    String transcriptionUrl = taskResult.getTranscriptionUrl();
                    // Get the result from the URL
                    HttpURLConnection connection =
                        (HttpURLConnection) new URL(transcriptionUrl).openConnection();
                    connection.setRequestMethod("GET");
                    connection.connect();
                    BufferedReader reader =
                        new BufferedReader(new InputStreamReader(connection.getInputStream()));
                    // Format and print the JSON result
                    Gson gson = new GsonBuilder().setPrettyPrinting().create();
                    System.out.println(gson.toJson(gson.fromJson(reader, JsonObject.class)));
                  }
                } catch (Exception e) {
                  System.out.println("error: " + e);
                }
              }
            }
            ```

Python SDK

            ```python
            import json
            import os
            import sys
            from http import HTTPStatus

            import dashscope
            from dashscope.audio.qwen_asr import QwenTranscription
            from dashscope.api_entities.dashscope_response import TranscriptionResponse

            # run the transcription script
            if __name__ == '__main__':
              # If you have not configured environment variables, replace the following line with: dashscope.api_key = "sk-xxx"
              dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")

              dashscope.base_http_api_url = 'https://maas.qwencloudapi.com/api/v1'
              task_response = QwenTranscription.async_call(
                model='qwen3-asr-flash-filetrans',
                file_url='{YOUR_AUDIO_URL}',
                #language="",
                enable_itn=False,
                enable_words=True
              )
              print(f'task_response: {task_response}')
              print(task_response.output.task_id)
              query_response = QwenTranscription.fetch(task=task_response.output.task_id)
              print(f'query_response: {query_response}')
              task_result = QwenTranscription.wait(task=task_response.output.task_id)
              print(f'task_result: {task_result}')
            ```

Qwen3-ASR-Flash

        Qwen3-ASR-Flash  suporta gravações de até 5 minutos. Este modelo aceita um URL de arquivo de áudio acessível publicamente ou um upload direto de um arquivo local como entrada.  Também pode retornar os resultados de reconhecimento como um fluxo.

        ####  Entrada: URL de arquivo de áudio

        

          ```python Python SDK
          import os
          import dashscope

          dashscope.base_http_api_url = 'https://maas.qwencloudapi.com/api/v1'

          messages = [
            {"role": "user", "content": [{"audio": "{YOUR_AUDIO_URL}"}]}
          ]

          response = dashscope.MultiModalConversation.call(
            # If you have not configured environment variables, replace the following line with: api_key = "sk-xxx"
            api_key=os.getenv("DASHSCOPE_API_KEY"),
            model="qwen3-asr-flash",
            messages=messages,
            result_format="message",
            asr_options={
              #"language": "zh", # Optional. If the audio language is known, you can specify it using this parameter to improve recognition accuracy.
              "enable_itn":False
            }
          )
          print(response)
          ```

          ```java Java SDK
          import java.util.Arrays;
          import java.util.Collections;
          import java.util.HashMap;
          import java.util.Map;

          import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
          import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
          import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
          import com.alibaba.dashscope.common.MultiModalMessage;
          import com.alibaba.dashscope.common.Role;
          import com.alibaba.dashscope.exception.ApiException;
          import com.alibaba.dashscope.exception.NoApiKeyException;
          import com.alibaba.dashscope.exception.UploadFileException;
          import com.alibaba.dashscope.utils.Constants;
          import com.alibaba.dashscope.utils.JsonUtils;

          public class Main {
            public static void simpleMultiModalConversationCall()
                throws ApiException, NoApiKeyException, UploadFileException {
              MultiModalConversation conv = new MultiModalConversation();
              MultiModalMessage userMessage = MultiModalMessage.builder()
                  .role(Role.USER.getValue())
                  .content(Arrays.asList(
                  Collections.singletonMap("audio", "{YOUR_AUDIO_URL}")))
                  .build();

              MultiModalMessage sysMessage = MultiModalMessage.builder().role(Role.SYSTEM.getValue())
                  .build();

              Map<String, Object> asrOptions = new HashMap<>();
              asrOptions.put("enable_itn", false);
              // asrOptions.put("language", "zh"); // Optional. If the audio language is known, you can specify it using this parameter to improve recognition accuracy.
              MultiModalConversationParam param = MultiModalConversationParam.builder()
                  // If you have not configured environment variables, replace the following line with: .apiKey("sk-xxx")
                  .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                  .model("qwen3-asr-flash")
                  .message(sysMessage)
                  .message(userMessage)
                  .parameter("asr_options", asrOptions)
                  .build();
              MultiModalConversationResult result = conv.call(param);
              System.out.println(JsonUtils.toJson(result));
            }
            public static void main(String[] args) {
              try {
                Constants.baseHttpApiUrl = "https://maas.qwencloudapi.com/api/v1";
                simpleMultiModalConversationCall();
              } catch (ApiException | NoApiKeyException | UploadFileException e) {
                System.out.println(e.getMessage());
              }
              System.exit(0);
            }
          }
          ```

          ```bash cURL
          curl -X POST "https://maas.qwencloudapi.com/api/v1/services/aigc/multimodal-generation/generation" \
          -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
          -H "Content-Type: application/json" \
          -d '{
            "model": "qwen3-asr-flash",
            "input": {
              "messages": [
                {
                  "content": [
                    {
                      "text": ""
                    }
                  ],
                  "role": "system"
                },
                {
                  "content": [
                    {
                      "audio": "{YOUR_AUDIO_URL}"
                    }
                  ],
                  "role": "user"
                }
              ]
            },
            "parameters": {
              "asr_options": {
                "enable_itn": false
              }
            }
          }'
          ```
        


        ####  Entrada: arquivo de áudio codificado pela base 64

         Dados codificados pela base de entrada64 ([ URL de dados])https://www.rfc-editor.org/rfc/rfc2397)) no formato: `data:<mediatype>;base64,<data>`.

        - `<mediatype>`: Tipo MIME

           Varia por formato de áudio, por exemplo:

          - WAV: `audio/wav`
          - - Sim. `audio/mpeg`

        - `<data>`A string do áudio codificada pela base 64.

          A codificação Base64 aumenta o tamanho do arquivo.  Mantenha o arquivo original pequeno o suficiente para que os dados codificados permaneçam dentro do limite de entrada de 10 MB.

        -  Exemplo: `data:audio/wav;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA//PAxABQ/BXRbMPe4IQAhl9`

Veja o código do exemplo.

            ```python Python
            import base64, pathlib

            # {YOUR_AUDIO_FILE} is the local audio file to transcribe. Replace it with the path to your own audio file and make sure it meets the audio requirements.
            file_path = pathlib.Path("{YOUR_AUDIO_FILE}")
            base64_str = base64.b64encode(file_path.read_bytes()).decode()
            data_uri = f"data:audio/mpeg;base64,{base64_str}"
            ```

            ```java Java
            import java.nio.file.*;
            import java.util.Base64;

            public class Main {
              /**
                  * filePath is a local audio file for voice cloning. Replace it with your own audio file path and ensure it meets audio requirements
                  */
              public static String toDataUrl(String filePath) throws Exception {
                byte[] bytes = Files.readAllBytes(Paths.get(filePath));
                String encoded = Base64.getEncoder().encodeToString(bytes);
                return "data:audio/mpeg;base64," + encoded;
              }

              // Usage example
              public static void main(String[] args) throws Exception {
                System.out.println(toDataUrl("{YOUR_AUDIO_FILE}"));
              }
            }
            ```
          

        


        

          ```python Python SDK
          import base64
          import dashscope
          import os
          import pathlib

          dashscope.base_http_api_url = 'https://maas.qwencloudapi.com/api/v1'

          # Replace with your actual audio file path
          file_path = "{YOUR_AUDIO_FILE}"
          # Replace with your actual audio file MIME type
          audio_mime_type = "audio/mpeg"

          file_path_obj = pathlib.Path(file_path)
          if not file_path_obj.exists():
            raise FileNotFoundError(f"Audio file not found: {file_path}")

          base64_str = base64.b64encode(file_path_obj.read_bytes()).decode()
          data_uri = f"data:{audio_mime_type};base64,{base64_str}"

          messages = [
            {"role": "user", "content": [{"audio": data_uri}]}
          ]
          response = dashscope.MultiModalConversation.call(
            # If you have not configured environment variables, replace the following line with: api_key = "sk-xxx",
            api_key=os.getenv("DASHSCOPE_API_KEY"),
            model="qwen3-asr-flash",
            messages=messages,
            result_format="message",
            asr_options={
              # "language": "zh", # Optional. If the audio language is known, you can specify it using this parameter to improve recognition accuracy.
              "enable_itn":False
            }
          )
          print(response)
          ```

          ```java Java SDK
          import java.io.IOException;
          import java.nio.file.Files;
          import java.nio.file.Paths;
          import java.util.*;

          import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
          import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
          import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
          import com.alibaba.dashscope.common.MultiModalMessage;
          import com.alibaba.dashscope.common.Role;
          import com.alibaba.dashscope.exception.ApiException;
          import com.alibaba.dashscope.exception.NoApiKeyException;
          import com.alibaba.dashscope.exception.UploadFileException;
          import com.alibaba.dashscope.utils.Constants;
          import com.alibaba.dashscope.utils.JsonUtils;

          public class Main {
            // Replace with your actual audio file path
            private static final String AUDIO_FILE = "{YOUR_AUDIO_FILE}";
            // Replace with your actual audio file MIME type
            private static final String AUDIO_MIME_TYPE = "audio/mpeg";

            public static void simpleMultiModalConversationCall()
                throws ApiException, NoApiKeyException, UploadFileException, IOException {
              MultiModalConversation conv = new MultiModalConversation();
              MultiModalMessage userMessage = MultiModalMessage.builder()
                  .role(Role.USER.getValue())
                  .content(Arrays.asList(
                  Collections.singletonMap("audio", toDataUrl())))
                  .build();

              MultiModalMessage sysMessage = MultiModalMessage.builder().role(Role.SYSTEM.getValue())
                  .build();

              Map<String, Object> asrOptions = new HashMap<>();
              asrOptions.put("enable_itn", false);
              // asrOptions.put("language", "zh"); // Optional. If the audio language is known, you can specify it using this parameter to improve recognition accuracy.
              MultiModalConversationParam param = MultiModalConversationParam.builder()
                  // If you have not configured environment variables, replace the following line with: .apiKey("sk-xxx")
                  .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                  .model("qwen3-asr-flash")
                  .message(sysMessage)
                  .message(userMessage)
                  .parameter("asr_options", asrOptions)
                  .build();
              MultiModalConversationResult result = conv.call(param);
              System.out.println(JsonUtils.toJson(result));
            }

            public static void main(String[] args) {
              try {
                Constants.baseHttpApiUrl = "https://maas.qwencloudapi.com/api/v1";
                simpleMultiModalConversationCall();
              } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
                System.out.println(e.getMessage());
              }
              System.exit(0);
            }

            // Generate data URI
            public static String toDataUrl() throws IOException {
              byte[] bytes = Files.readAllBytes(Paths.get(AUDIO_FILE));
              String encoded = Base64.getEncoder().encodeToString(bytes);
              return "data:" + AUDIO_MIME_TYPE + ";base64," + encoded;
            }
          }
          ```
        


        ####  Entrada: caminho absoluto para o arquivo de áudio local

         Ao usar o SDK DashScope para processar arquivos de áudio locais, você deve fornecer o caminho do arquivo. A tabela seguinte mostra como construir o caminho do arquivo para o seu cenário específico e sistema operacional.
Sistema SDK Caminho do arquivo de entrada Exemplo
Linux ou MacOS Python SDK file://<absolute file path> file:///home/audio/test.mp3
Linux ou MacOS Java SDK file://<absolute file path> file:///home/audio/test.mp3
Janelas Python SDK file://<absolute file path> file://D:/audio/test.mp3
Janelas Java SDK file:///<absolute file path> file:///D:/audio/test.mp3
           Quando se usa arquivos locais, o limite de chamada da API é 100 QPS e não pode ser escalado.  Não use este método em ambientes de produção, cenários de alta concorrência, ou testes de estresse. Para maior concordância, envie arquivos para OSS e ligue para a API usando o URL do arquivo de áudio.
        


        

          ```python Python SDK
          import os
          import dashscope

          dashscope.base_http_api_url = 'https://maas.qwencloudapi.com/api/v1'

          # Replace ABSOLUTE_PATH/{YOUR_AUDIO_FILE} with the absolute path to your local audio file
          audio_file_path = "file://ABSOLUTE_PATH/{YOUR_AUDIO_FILE}"

          messages = [
            {"role": "user", "content": [{"audio": audio_file_path}]}
          ]
          response = dashscope.MultiModalConversation.call(
            # If you have not configured environment variables, replace the following line with: api_key = "sk-xxx"
            api_key=os.getenv("DASHSCOPE_API_KEY"),
            model="qwen3-asr-flash",
            messages=messages,
            result_format="message",
            asr_options={
              # "language": "zh", # Optional. If the audio language is known, you can specify it using this parameter to improve recognition accuracy.
              "enable_itn":False
            }
          )
          print(response)
          ```

          ```java Java SDK
          import java.util.Arrays;
          import java.util.Collections;
          import java.util.HashMap;
          import java.util.Map;

          import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
          import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
          import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
          import com.alibaba.dashscope.common.MultiModalMessage;
          import com.alibaba.dashscope.common.Role;
          import com.alibaba.dashscope.exception.ApiException;
          import com.alibaba.dashscope.exception.NoApiKeyException;
          import com.alibaba.dashscope.exception.UploadFileException;
          import com.alibaba.dashscope.utils.Constants;
          import com.alibaba.dashscope.utils.JsonUtils;

          public class Main {
            public static void simpleMultiModalConversationCall()
                throws ApiException, NoApiKeyException, UploadFileException {
              // Replace ABSOLUTE_PATH/{YOUR_AUDIO_FILE} with the absolute path to your local file
              String localFilePath = "file://ABSOLUTE_PATH/{YOUR_AUDIO_FILE}";
              MultiModalConversation conv = new MultiModalConversation();
              MultiModalMessage userMessage = MultiModalMessage.builder()
                  .role(Role.USER.getValue())
                  .content(Arrays.asList(
                  Collections.singletonMap("audio", localFilePath)))
                  .build();

              MultiModalMessage sysMessage = MultiModalMessage.builder().role(Role.SYSTEM.getValue())
                  .build();

              Map<String, Object> asrOptions = new HashMap<>();
              asrOptions.put("enable_itn", false);
              // asrOptions.put("language", "zh"); // Optional. If the audio language is known, you can specify it using this parameter to improve recognition accuracy.
              MultiModalConversationParam param = MultiModalConversationParam.builder()
                  // If you have not configured environment variables, replace the following line with: .apiKey("sk-xxx")
                  .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                  .model("qwen3-asr-flash")
                  .message(sysMessage)
                  .message(userMessage)
                  .parameter("asr_options", asrOptions)
                  .build();
              MultiModalConversationResult result = conv.call(param);
              System.out.println(JsonUtils.toJson(result));
            }
            public static void main(String[] args) {
              try {
                Constants.baseHttpApiUrl = "https://maas.qwencloudapi.com/api/v1";
                simpleMultiModalConversationCall();
              } catch (ApiException | NoApiKeyException | UploadFileException e) {
                System.out.println(e.getMessage());
              }
              System.exit(0);
            }
          }
          ```
        


        ####  Saída de transmissão

        O modelo gera resultados incrementais ao invés de todos de uma vez.  Saída sem fluxo espera até que o modelo termine de gerar e então retorna o resultado completo. A saída de fluxo retorna resultados intermediários em tempo real, permitindo que você leia os resultados conforme são gerados e reduzindo o tempo de espera. Defina parâmetros diferentes com base no seu método de chamada para permitir a saída de streaming:

        - - Defina o código de segurança. `stream`  parâmetro para verdadeiro.
        - Use o `streamCall` Interface.
        - Defina o código de segurança. `X-DashScope-SSE` - Para onde? `enable`.

Python SDK

            ```python
            import os
            import dashscope

            dashscope.base_http_api_url = 'https://maas.qwencloudapi.com/api/v1'

            messages = [
              {"role": "user", "content": [{"audio": "{YOUR_AUDIO_URL}"}]}
            ]
            response = dashscope.MultiModalConversation.call(
              # If you have not configured environment variables, replace the following line with: api_key = "sk-xxx"
              api_key=os.getenv("DASHSCOPE_API_KEY"),
              model="qwen3-asr-flash",
              messages=messages,
              result_format="message",
              asr_options={
                # "language": "zh", # Optional. If the audio language is known, you can specify it using this parameter to improve recognition accuracy.
                "enable_itn":False
              },
              stream=True
            )

            for response in response:
              try:
                print(response["output"]["choices"][0]["message"].content[0]["text"])
              except:
                pass
            ```

Java SDK

            ```java
            import java.util.Arrays;
            import java.util.Collections;
            import java.util.HashMap;
            import java.util.Map;

            import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
            import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
            import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
            import com.alibaba.dashscope.common.MultiModalMessage;
            import com.alibaba.dashscope.common.Role;
            import com.alibaba.dashscope.exception.ApiException;
            import com.alibaba.dashscope.exception.NoApiKeyException;
            import com.alibaba.dashscope.exception.UploadFileException;
            import com.alibaba.dashscope.utils.Constants;
            import io.reactivex.Flowable;

            public class Main {
              public static void simpleMultiModalConversationCall()
                  throws ApiException, NoApiKeyException, UploadFileException {
                MultiModalConversation conv = new MultiModalConversation();
                MultiModalMessage userMessage = MultiModalMessage.builder()
                    .role(Role.USER.getValue())
                    .content(Arrays.asList(
                    Collections.singletonMap("audio", "{YOUR_AUDIO_URL}")))
                    .build();

                MultiModalMessage sysMessage = MultiModalMessage.builder().role(Role.SYSTEM.getValue())
                    .build();

                Map<String, Object> asrOptions = new HashMap<>();
                asrOptions.put("enable_itn", false);
                // asrOptions.put("language", "zh"); // Optional. If the audio language is known, you can specify it using this parameter to improve recognition accuracy.
                MultiModalConversationParam param = MultiModalConversationParam.builder()
                    // If you have not configured environment variables, replace the following line with: .apiKey("sk-xxx")
                    .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                    .model("qwen3-asr-flash")
                    .message(sysMessage)
                    .message(userMessage)
                    .parameter("asr_options", asrOptions)
                    .build();
                Flowable<MultiModalConversationResult> resultFlowable = conv.streamCall(param);
                resultFlowable.blockingForEach(item -> {
                  try {
                    System.out.println(item.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
                  } catch (Exception e){
                    System.exit(0);
                  }
                });
              }

              public static void main(String[] args) {
                try {
                  Constants.baseHttpApiUrl = "https://maas.qwencloudapi.com/api/v1";
                  simpleMultiModalConversationCall();
                } catch (ApiException | NoApiKeyException | UploadFileException e) {
                  System.out.println(e.getMessage());
                }
                System.exit(0);
              }
            }
            ```

cURL

            ```bash
            curl -X POST "https://maas.qwencloudapi.com/api/v1/services/aigc/multimodal-generation/generation" \
            -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
            -H "Content-Type: application/json" \
            -H "X-DashScope-SSE: enable" \
            -d '{
              "model": "qwen3-asr-flash",
              "input": {
                "messages": [
                  {
                    "content": [
                      {
                        "text": ""
                      }
                    ],
                    "role": "system"
                  },
                  {
                    "content": [
                      {
                        "audio": "{YOUR_AUDIO_URL}"
                      }
                    ],
                    "role": "user"
                  }
                ]
              },
              "parameters": {
                "incremental_output": true,
                "asr_options": {
                  "enable_itn": false
                }
              }
            }'
            ```

OpenAI compatible

     Só o Qwen3-ASR-Flash  Modelos de série suportam chamadas compatíveis com OpenAI.  Modo compatível com OpenAI só aceita URLs de arquivos de áudio acessíveis publicamente e não suporta caminhos de arquivos locais.

    Use a versão SDK OpenAI Python 1.52.0 ou posterior, e a versão SDK Node.js 4.68.0 ou posterior.

    O `asr_options` O parâmetro não faz parte do padrão OpenAI.  Ao usar o OpenAI Python SDK, passe-o através `extra_body`.  Ao usar o **Node.js OpenAI SDK (v4.x)**, passe `asr_options`  diretamente no objeto do corpo pedido em vez de embrulhá-lo em `extra_body`, como o SDK Node.js não suporta o `extra_body` Campo.

    ####  Entrada: URL de arquivo de áudio

Python SDK

        ```python
        from openai import OpenAI
        import os

        try:
          client = OpenAI(
            # If you have not configured environment variables, replace the following line with: api_key = "sk-xxx",
            api_key=os.getenv("DASHSCOPE_API_KEY"),
            base_url="https://maas.qwencloudapi.com/compatible-mode/v1",
          )

          stream_enabled = False  # Enable streaming output
          completion = client.chat.completions.create(
            model="qwen3-asr-flash",
            messages=[
              {
                "content": [
                  {
                    "type": "input_audio",
                    "input_audio": {
                      "data": "{YOUR_AUDIO_URL}"
                    }
                  }
                ],
                "role": "user"
              }
            ],
            stream=stream_enabled,
            # Do not set stream_options when stream is False
            # stream_options={"include_usage": True},
            extra_body={
              "asr_options": {
                # "language": "zh",
                "enable_itn": False
              }
            }
          )
          if stream_enabled:
            full_content = ""
            print("Streaming output:")
            for chunk in completion:
              # If stream_options.include_usage is True, the last chunk's choices field is an empty list and should be skipped (token usage can be obtained via chunk.usage)
              print(chunk)
              if chunk.choices and chunk.choices[0].delta.content:
                full_content += chunk.choices[0].delta.content
            print(f"Full content: {full_content}")
          else:
            print(f"Non-streaming output: {completion.choices[0].message.content}")
        except Exception as e:
          print(f"Error: {e}")
        ```

Node.js SDK

        ```javascript
        // Preparation before running:
        // Works on Windows/Mac/Linux:
        // 1. Ensure Node.js is installed (version >= 14 recommended)
        // 2. Run this command to install dependencies: npm install openai

        import OpenAI from "openai";

        const client = new OpenAI({
          // If you have not configured environment variables, replace the following line with: apiKey: "sk-xxx",
          apiKey: process.env.DASHSCOPE_API_KEY,
          baseURL: "https://maas.qwencloudapi.com/compatible-mode/v1",
        });

        async function main() {
          try {
            const streamEnabled = false; // Enable streaming output
            const completion = await client.chat.completions.create({
              model: "qwen3-asr-flash",
              messages: [
                {
                  role: "user",
                  content: [
                    {
                      type: "input_audio",
                      input_audio: {
                        data: "{YOUR_AUDIO_URL}"
                      }
                    }
                  ]
                }
              ],
              stream: streamEnabled,
              // Do not set stream_options when stream is False
              // stream_options: {
              //   "include_usage": true
              // },
              asr_options: {
                // language: "zh",
                enable_itn: false
              }
            });

            if (streamEnabled) {
              let fullContent = "";
              console.log("Streaming output:");
              for await (const chunk of completion) {
                console.log(JSON.stringify(chunk));
                if (chunk.choices && chunk.choices.length > 0) {
                  const delta = chunk.choices[0].delta;
                  if (delta && delta.content) {
                    fullContent += delta.content;
                  }
                }
              }
              console.log(`Full content: ${fullContent}`);
            } else {
              console.log(`Non-streaming output: ${completion.choices[0].message.content}`);
            }
          } catch (err) {
            console.error(`Error: ${err}`);
          }
        }

        main();
        ```

cURL

        ```bash
        curl -X POST 'https://maas.qwencloudapi.com/compatible-mode/v1/chat/completions' \
        -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "model": "qwen3-asr-flash",
          "messages": [
            {
              "content": [
                {
                  "type": "input_audio",
                  "input_audio": {
                    "data": "{YOUR_AUDIO_URL}"
                  }
                }
              ],
              "role": "user"
            }
          ],
          "stream":false,
          "asr_options": {
            "enable_itn": false
          }
        }'
        ```
      

    


    ####  Entrada: arquivo de áudio codificado pela base 64

     Dados codificados pela base de entrada64 ([ URL de dados])https://www.rfc-editor.org/rfc/rfc2397)) no formato: `data:<mediatype>;base64,<data>`.

    - `<mediatype>`: Tipo MIME

       Varia por formato de áudio, por exemplo:

      - WAV: `audio/wav`
      - - Sim. `audio/mpeg`

    - `<data>`A string do áudio codificada pela base 64.

      A codificação Base64 aumenta o tamanho do arquivo.  Mantenha o arquivo original pequeno o suficiente para que os dados codificados permaneçam dentro do limite de entrada de 10 MB.

    -  Exemplo: `data:audio/wav;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA//PAxABQ/BXRbMPe4IQAhl9`

Veja o código do exemplo.

        ```python Python
        import base64, pathlib

        # {YOUR_AUDIO_FILE} is the local audio file to transcribe. Replace it with the path to your own audio file and make sure it meets the audio requirements.
        file_path = pathlib.Path("{YOUR_AUDIO_FILE}")
        base64_str = base64.b64encode(file_path.read_bytes()).decode()
        data_uri = f"data:audio/mpeg;base64,{base64_str}"
        ```

        ```java Java
        import java.nio.file.*;
        import java.util.Base64;

        public class Main {
          /**
              * filePath is a local audio file for voice cloning. Replace it with your own audio file path and ensure it meets audio requirements
              */
          public static String toDataUrl(String filePath) throws Exception {
            byte[] bytes = Files.readAllBytes(Paths.get(filePath));
            String encoded = Base64.getEncoder().encodeToString(bytes);
            return "data:audio/mpeg;base64," + encoded;
          }

          // Usage example
          public static void main(String[] args) throws Exception {
            System.out.println(toDataUrl("{YOUR_AUDIO_FILE}"));
          }
        }
        ```

Python SDK

        ```python
        import base64
        from openai import OpenAI
        import os
        import pathlib

        try:
          # Replace with your actual audio file path
          file_path = "{YOUR_AUDIO_FILE}"
          # Replace with your actual audio file MIME type
          audio_mime_type = "audio/mpeg"

          file_path_obj = pathlib.Path(file_path)
          if not file_path_obj.exists():
            raise FileNotFoundError(f"Audio file not found: {file_path}")

          base64_str = base64.b64encode(file_path_obj.read_bytes()).decode()
          data_uri = f"data:{audio_mime_type};base64,{base64_str}"

          client = OpenAI(
            # If you have not configured environment variables, replace the following line with: api_key = "sk-xxx",
            api_key=os.getenv("DASHSCOPE_API_KEY"),
            base_url="https://maas.qwencloudapi.com/compatible-mode/v1",
          )

          stream_enabled = False  # Enable streaming output
          completion = client.chat.completions.create(
            model="qwen3-asr-flash",
            messages=[
              {
                "content": [
                  {
                    "type": "input_audio",
                    "input_audio": {
                      "data": data_uri
                    }
                  }
                ],
                "role": "user"
              }
            ],
            stream=stream_enabled,
            # Do not set stream_options when stream is False
            # stream_options={"include_usage": True},
            extra_body={
              "asr_options": {
                # "language": "zh",
                "enable_itn": False
              }
            }
          )
          if stream_enabled:
            full_content = ""
            print("Streaming output:")
            for chunk in completion:
              # If stream_options.include_usage is True, the last chunk's choices field is an empty list and should be skipped (token usage can be obtained via chunk.usage)
              print(chunk)
              if chunk.choices and chunk.choices[0].delta.content:
                full_content += chunk.choices[0].delta.content
            print(f"Full content: {full_content}")
          else:
            print(f"Non-streaming output: {completion.choices[0].message.content}")
        except Exception as e:
          print(f"Error: {e}")
        ```

Node.js SDK

        ```javascript
        // Preparation before running:
        // Works on Windows/Mac/Linux:
        // 1. Ensure Node.js is installed (version >= 14 recommended)
        // 2. Run this command to install dependencies: npm install openai

        import OpenAI from "openai";
        import { readFileSync } from 'fs';

        const client = new OpenAI({
          // If you have not configured environment variables, replace the following line with: apiKey: "sk-xxx",
          apiKey: process.env.DASHSCOPE_API_KEY,
          baseURL: "https://maas.qwencloudapi.com/compatible-mode/v1",
        });

        const encodeAudioFile = (audioFilePath) => {
            const audioFile = readFileSync(audioFilePath);
            return audioFile.toString('base64');
        };

        // Replace with your actual audio file path
        const dataUri = `data:audio/mpeg;base64,${encodeAudioFile("{YOUR_AUDIO_FILE}")}`;

        async function main() {
          try {
            const streamEnabled = false; // Enable streaming output
            const completion = await client.chat.completions.create({
              model: "qwen3-asr-flash",
              messages: [
                {
                  role: "user",
                  content: [
                    {
                      type: "input_audio",
                      input_audio: {
                        data: dataUri
                      }
                    }
                  ]
                }
              ],
              stream: streamEnabled,
              // Do not set stream_options when stream is False
              // stream_options: {
              //   "include_usage": true
              // },
              asr_options: {
                // language: "zh",
                enable_itn: false
              }
            });

            if (streamEnabled) {
              let fullContent = "";
              console.log("Streaming output:");
              for await (const chunk of completion) {
                console.log(JSON.stringify(chunk));
                if (chunk.choices && chunk.choices.length > 0) {
                  const delta = chunk.choices[0].delta;
                  if (delta && delta.content) {
                    fullContent += delta.content;
                  }
                }
              }
              console.log(`Full content: ${fullContent}`);
            } else {
              console.log(`Non-streaming output: ${completion.choices[0].message.content}`);
            }
          } catch (err) {
            console.error(`Error: ${err}`);
          }
        }

        main();
        ```

Qwen-Omni

Use **Qwen-Omni** (`qwen3.5-omni-plus`, `qwen3.5-omni-flash`, `qwen3-omni-flash`) para transcrição de arquivos com contexto baseado em alerta.  Essa abordagem permite descrever seu domínio no sistema para uma precisão melhor.



  Qwen-Omni  interpreta todo o áudio, não apenas o discurso.  Música, digitação ou ruído ambiente podem produzir descrições em vez de transcrição. Para áudio misto, pré-processo com DAV para isolar a fala, ou adicionar uma instrução rápida do sistema: "Transcreva apenas a fala humana. Ignore sons não falantes."



[Pegue uma chave API] (/api-reference/preparation/api-keyE o define como uma variável de ambiente./api-reference/preparation/export-api-key-env(Instalar o SDK] (/api-reference/preparation/install-sdk).



  ```python Python
  import os
  from openai import OpenAI

  client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://maas.qwencloudapi.com/compatible-mode/v1",
  )

  completion = client.chat.completions.create(
    model="qwen3-omni-flash",
    messages=[
      {"role": "system", "content": "Transcribe the following audio exactly as spoken. Output only the transcription text. Ignore non-speech sounds."},
      {"role": "user", "content": [
        {"type": "input_audio", "input_audio": {"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav"}},
        {"type": "text", "text": "Transcribe this audio."}
      ]}
    ],
    modalities=["text"],
    stream=True,
  )

  for chunk in completion:
    if chunk.choices and chunk.choices[0].delta.content:
      print(chunk.choices[0].delta.content, end="")
  ```

  ```bash cURL
  curl -X POST https://maas.qwencloudapi.com/compatible-mode/v1/chat/completions \
  -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3-omni-flash",
    "messages": [
      {"role": "system", "content": "Transcribe the following audio exactly as spoken. Output only the transcription text. Ignore non-speech sounds."},
      {"role": "user", "content": [
        {"type": "input_audio", "input_audio": {"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav"}},
        {"type": "text", "text": "Transcribe this audio."}
      ]}
    ],
    "modalities": ["text"],
    "stream": true
  }'
  ```





  Para completar Qwen-Omni  Capacitação incluindo conversa multimodal, veja [Audio e compreensão de arquivos de vídeo]/developer-guides/speech/multimodal-speech).

Melhoramento de contexto

Modelos apoiados: Qwen-Audio-3.x-ASR-Flash (qwen-audio-3.1-asr-flash) e Fun-ASR-Flash (fun-asr-flash-2026-06-15) apoio ao aumento do contexto.

**Caso de uso:**Projetado para cenários que combinam ASR com um modelo de linguagem grande. Passando o contexto de conversação anterior (repostas do LLM e resultados de reconhecimento anteriores) no modelo ASR melhora significativamente a precisão de transcrição para substantivos adequados, como nomes, locais e termos de produtos - mais flexíveis do que palavras quentes tradicionais.

Passe a história da conversa input.messages. Use o assistant O papel para as respostas anteriores da LLM e o user - O papel com input_text Tipo para resultados de reconhecimento mais adiantados. Os pares de contexto devem aparecer antes da mensagem de áudio atual.

** Tipos de texto suportados** incluem (mas não estão limitados a):

Exemplo:

Considere um clipe de áudio cuja transcrição correta é: "Que jargão interno você conhece em investimento bancário? Primeiro, os nove melhores bancos estrangeiros de investimento, Bulge Bracket, BB..."

Sem o realce do contexto Com o aprimoramento do contexto
Sem o aprimoramento do contexto, alguns nomes de bancos de investimento são mal reconhecidos. Por exemplo, "Pedra do Pássaro" deve ser "Bulge Bracket".

Resultado: "Que jargão interno você conhece em investimento bancário? Primeiro, os nove maiores bancos de investimento estrangeiros, Bird Rock, BB..."
Com o aprimoramento do contexto, os nomes dos bancos de investimento são reconhecidos corretamente.

Resultado: "Que jargão interno você conhece em investimento bancário? Primeiro, os nove melhores bancos estrangeiros de investimento, Bulge Bracket, BB..."

Resultado: "Que jargão interno você conhece em investimento bancário? Primeiro, os nove maiores bancos de investimento estrangeiros, Bird Rock, BB... com o aprimoramento do contexto, os nomes dos bancos de investimento são reconhecidos corretamente.

Resultado: "Que jargão interno você conhece em investimento bancário? Primeiro, os nove maiores bancos de investimento estrangeiros, Bulge Bracket, BB..."

Para produzir o resultado corrigido, inclua qualquer um dos seguintes no contexto:

Bulge Bracket, Boutique, Middle Market, domestic securities firms
Bulge Bracket Boutique Middle Market domestic securities firms
['Bulge Bracket', 'Boutique', 'Middle Market', 'domestic securities firms']
Investment bank classification: a quick guide.
Recently a few friends in Australia asked me what investment banks really are. Here is a quick primer. For students studying abroad, investment banks fall into four broad categories: Bulge Bracket, Boutique, Middle Market, and domestic securities firms.
Bulge Bracket banks: the nine top investment banks we often refer to, including Goldman Sachs, Morgan Stanley, and so on. They are large in both business scope and scale.
Boutique banks: relatively small in size but highly focused in their service areas. Firms such as Lazard and Evercore have deep expertise in specific fields.
Middle Market banks: serve mid-sized companies with M&A, IPO, and similar services. Though smaller than the bulge brackets, they hold strong positions in specific markets.
Domestic securities firms: as the Chinese market has risen, domestic firms play an increasingly important role internationally.
There are also further breakdowns by position and business line you can find in related charts. Hopefully this helps you understand investment banks and prepare for your career.
Investment bank classification: a quick guide.
Recently a few friends in Australia asked me what investment banks really are. Here is a quick primer. For students studying abroad, investment banks fall into four broad categories: Bulge Bracket, Boutique, Middle Market, and domestic securities firms.
Bulge Bracket banks: the nine top investment banks we often refer to, including Goldman Sachs, Morgan Stanley, and so on. They are large in both business scope and scale.
Boutique banks: relatively small in size but highly focused in their service areas. Firms such as Lazard and Evercore have deep expertise in specific fields.
Middle Market banks: serve mid-sized companies with M&A, IPO, and similar services. Though smaller than the bulge brackets, they hold strong positions in specific markets.
Domestic securities firms: as the Chinese market has risen, domestic firms play an increasingly important role internationally.
There are also further breakdowns by position and business line you can find in related charts. Hopefully this helps you understand investment banks and prepare for your career.
Wang Haoxuan, Li Zihan, Zhang Jingxing, Liu Xinyi, Chen Junjie, Yang Siyuan, Zhao Yutong, Huang Zhiqiang, Zhou Zimo, Wu Yajing, Xu Ruoxi, Sun Haoran, Hu Jinyu, Zhu Chenxi, Guo Wenbo, He Jingshu, Gao Yuhang, Lin Yifei,
Zheng Xiaoyan, Liang Bowen, Luo Jiaqi, Song Mingzhe, Xie Wanting, Tang Ziqian, Han Mengyao, Feng Yiran, Cao Qinxue, Deng Zirui, Xiao Wangshu, Xu Jiashu,
Cheng Yinuo, Yuan Zhiruo, Peng Haoyu, Dong Simiao, Fan Jingyu, Su Zijin, Lyu Wenxuan, Jiang Shihan, Ding Muchen,
Wei Shuyao, Ren Tianyou, Jiang Yichen, Hua Qingyu, Shen Xinghe, Fu Jinyu, Yao Xingchen, Zhong Lingyu, Yan Licheng, Jin Ruoshui, Tao Ranting, Qi Shaoshang, Xue Zhilan, Zou Yunfan, Xiong Ziang, Bai Wenfeng, Yi Qianfan

Recursos avançados

Além de [melhoramento do contexto] (#context-enhancement), a transcrição de arquivos de áudio suporta as seguintes capacidades. Para criar e usar palavras quentes, veja [Melhorar precisão de reconhecimento] (/developer-guides/speech/improve-recognition-accuracy).

Processamento de arquivos de áudio longo

A transcrição de arquivos de áudio suporta transcrição assíncrona de áudio longo, que combina com a hora de reunião, notas de entrevista e chamada de reprodução.

Limites*:

A transcrição de áudio longa usa um modelo assíncrono de tarefa com três passos:

  1. Envie a tarefa de transcrição e consiga um task_id.
  2. Procure pelo status da tarefa, ou use o método de espera do SDK para bloquear até que a tarefa termine.
  3. Quando a tarefa terminar, baixe o resultado JSON da URL devolvida.

Para amostras de código, veja [Começando] (#getting-started). Para intervalos de votação e gerenciamento de tarefas em lote, veja [Gestão de tarefas assíncrona] (/developer-guides/run-and-scale/async-task-management).

Diarização do presidente da câmara

A diarização do alto-falante identifica diferentes falantes no áudio e etiqueta cada frase no resultado da transcrição, que combina com reuniões multipessoas e gravações de entrevistas.

**Qwen-Audio-3.1-ASR-Flash Permite a diarização com o alto-falante. speaker_diarization_enabled. Para seus parâmetros e estrutura de resposta, veja [A API RESTful] (/api-reference/speech-recognition/fun-asr-recording/restful-api).

Modelos apoiados: Qwen-Audio-3.x-ASR-Flash-Filetrans, Fun-ASRE Paraformer.

** Como ativar **: Set diarization_enabled para true nos parâmetros de solicitação. Cada sentença no resultado, então inclui um speaker_id campo que identifica o alto-falante.

Estrutura de resposta (excerto):

{
  "transcripts": [
    {
      "sentences": [
        { "begin_time": 100, "end_time": 3820, "text": "Hello, let's review the project progress today.", "speaker_id": 0 },
        { "begin_time": 3820, "end_time": 6500, "text": "Sure, I'll start with my update.", "speaker_id": 1 }
      ]
    }
  ]
}

Quando a diarização do alto-falante é ativada, áudio maior que 2 horas não é recomendado, porque o reconhecimento pode falhar ou parar. Para os limites de duração que se aplicam quando a diarização está desligada, veja [Long audio file processing] (#long-audio-file-processing). A diarização do alto-falante suporta apenas áudio mono.

Os SDKs expõem esses campos com diferentes convenções de nomes (chaves dicionárias, propriedades de objetos ou métodos). Para o mapeamento completo do campo, veja [referência API] (#api-reference).

Filtragem sensível de palavras

A filtragem sensível de palavras substitui ou remove palavras sensíveis no resultado do reconhecimento, que se adequa a qualidade do serviço ao cliente, conformidade de conteúdo e revisão de legendas.

Modelos apoiados: Qwen-Audio-3.x-ASR-Flash-Filetrans, Fun-ASRE Paraformer.

Se você não passar no teste, eu vou te dar um jeito. special_word_filter parâmetro, a lista de palavras sensitivas se aplica e as palavras correspondentes são substituídas por um número igual de asteriscos (*).

** Configuração personalizada**: special_word_filter é um objeto JSON com três sub-campos:

Configuração do exemplo:

{
  "special_word_filter": {
    "filter_with_signed": {
      "word_list": ["test"]
    },
    "filter_with_empty": {
      "word_list": ["start", "happen"]
    },
    "system_reserved_filter": true
  }
}

O padrão difere de [reconhecimento de fala em tempo real] (/developer-guides/speech/asr-realtimeNo reconhecimento em tempo real, não é aplicada filtragem quando special_word_filter é omitido, porque system_reserved_filter predefinições para false.

Reconhecimento de emoções

Qwen3-ASR-Flash-Filetrans e Qwen3-ASR-Flash Sempre realizar reconhecimento emocional, sem configuração extra. O resultado inclui o rótulo emocional do orador, que é um dos sete valores: surprised, neutral, happy, sad, disgusted, angry, e fearful.

Caminhos de campo (variam pela interface):

Estrutura de resposta (Interface de tarefas assíncronas DashScope, excerto):

{
  "transcripts": [{
    "sentences": [{
      "begin_time": 0,
      "end_time": 1440,
      "text": "Welcome to QwenCloud.",
      "emotion": "neutral",
      "language": "en"
    }]
  }]
}

Qwen-Audio-3.x-ASR-Flash-Filetrans, Qwen-Audio-3.x-ASR-Flash, Fun-ASR-Flash, Fun-ASRE Paraformer não suporta reconhecimento emocional. Para usar o reconhecimento de emoções em cenários em tempo real, veja/developer-guides/speech/asr-realtime).

Pegue as datas.

A transcrição de arquivos de áudio pode retornar datas no resultado, que se encaixa na geração de legendas, destaque de palavras-chave e edição de áudio ou vídeo. O comportamento padrão e os controles variam de acordo com o modelo:

As datas estão em milissegundos e são devolvidas em dois níveis:

Estrutura de resposta (Interface de tarefas assíncronas DashScope, excerto):

{
  "transcripts": [{
    "sentences": [{
      "begin_time": 100,
      "end_time": 3820,
      "text": "Hello, let's review the project progress today.",
      "words": [
        { "begin_time": 100, "end_time": 596, "text": "Hello" },
        { "begin_time": 596, "end_time": 844, "text": "let's" }
      ]
    }]
  }]
}

As datas dentro do áudio são milissegundos inteiros, como 100. Não os confunda com o nível de tarefa. end_time, que é o tempo de conclusão da tarefa como uma string de datas, como "2024-09-12 15:11:40.903".

Indo ao vivo

Quando você move a transcrição de arquivos de áudio para a produção, as seguintes práticas melhoram a qualidade do reconhecimento e estabilidade do sistema.

Compare modelos.

Característica Fun-ASR
Linguagens apoiadas Chinês (Mandarim, Cantonês, Wu, Minnan, Hakka, Gan, Xiang, Jin; também suporta sotaques de Planícies Centrais, Sudoeste, Ji-Lu, Jianghuai, Lan-Yin, Jiao-Liao, Nordeste, Pequim, Hong Kong e Taiwan, incluindo dialetos oficiais de regiões como Henan, Shaanxi, Hubei, Sichuan, Chongqing, Yunnan, Guizhou, Guangdong, Guangxi, Hebei, Tianjin, Shandong, Anhui, Nanjing, Jiangsu, Hangzhou, Gansu e Ningxia), Inglês, japonês, coreano, vietnamita, indonésio, Tailandês, Malay, Filipino, árabe, búlgaro, croata, checo, dinamarquês, holandês, estoniano, Finlandês, grego, hindi, húngaro, irlandês, letão, lituano, maltês, polonês, português, romeno, eslovaco, esloveno, sueco
Formatos de áudio suportados AAC, AVI, FLAC, FLV, M4A, MKV, mov, mp3, mp4, mpeg, ogg, opus, wav, webm, wma, wmv
Taxa de amostragem Qualquer
Canais de som Qualquer
Formato de entrada URLs de arquivos acessíveis publicamente para serem reconhecidos. Até 100 arquivos de áudio são suportados.
Tamanho/duração do áudio Cada arquivo de áudio não deve ser maior que 2 GB e não deve durar mais de 12 horas.
Reconhecimento de emoções Não apoiado.
Hora Apoiado (sempre em)
Previsão de pontuação Apoiado (sempre em)
Palavras quentes Apoiado. A característica de palavra quente é suportada apenas no espaço de trabalho primário e não está disponível em sub-espaços de trabalho.
Itn Apoiado (sempre em)
Reconhecimento de voz cantada Apoiado.fun-asr Apenas)
Rejeição de ruído Apoiado (sempre em)
Filtragem sensível de palavras Suportado (filtros conteúdo doQwenCloud Lista de palavras sensíveis.por padrão)
Diarização do presidente da câmara Suportado (desativado por padrão, pode ser ativado)
Filtragem de palavras de preenchimento Não apoiado.
VAD Apoiado (sempre em)
Limitação de taxa (RPS) API de submissão de trabalho: 10, API de consulta de tarefas: 20
Tipos de conexão Java/Python SDK, API RESTful
-Preços. International: US$ 0.000035/second

Cantando reconhecimento de voz # # Apoiado #fun-asr Apenas) ..

Rejeição do ruído Suportada .. Filtragem de palavras sensíveis Suportado (filtros de conteúdo doQwenCloud "Lista de palavras sensíveis" (https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/%E7%99%BE%E7%82%BC%E6%95%8F%E6%84%9F%E8%AF%8D%E5%88%97%E8%A1%A8_20230716.words.txt) por padrão) Diarização do falante .. Suportado (por padrão, pode ser ativado) .. Não é suportado .. VAD, sempre apoiado. .. Rate limitant (RPS) ..Job submission API: 10, Tarefa consulta API: 20 .. ** Tipos de conexão** ** DashScope: Java/Python SDK, API de descanso .. Tradução:$0.000035 (≈ R$ 0,000176*)-Segunda. ..

Referência da API

Qwen-Audio-3.x-ASR-Flash-Filetrans/Fun-ASR

- [A API RESTRUENTE] (/api-reference/speech-recognition/fun-asr-recording/restful-api)
- [Fun-ASR-Flash (síncrono)](/api-reference/speech-recognition/fun-asr-recording/restful-api#fun-asr-flash-synchronous)
- [Python SDK] (/api-reference/speech-recognition/fun-asr-recording/python-sdk)
- [Java SDK] (/api-reference/speech-recognition/fun-asr-recording/java-sdk)
- [Android SDK] (/api-reference/speech-recognition/fun-asr-recording/android-sdk)
- [IOS SDK] (/api-reference/speech-recognition/fun-asr-recording/ios-sdk)
- [HarmonyOS SDK] (/api-reference/speech-recognition/fun-asr-recording/harmonyos-sdk)

Qwen-ASR

[Qwen-ASR  Referência da API (/api-reference/speech-recognition/qwen-asr/openai)

Qwen-Omni

- [Audio e vídeo de compreensão de arquivos] (/developer-guides/speech/multimodal-speech)
- [Fala-para-fala modelos] (/developer-guides/speech/s2s-models)

FAQ

Qwen-Audio-3.x-ASR-Flash-Filetrans/Fun-ASR

####  Como posso melhorar a precisão do reconhecimento?

 Vários fatores afetam a precisão.  Revise cada um e aplique a otimização correspondente.

 Fatores-chave:

1.  Qualidade do som: qualidade do dispositivo de gravação, taxa de amostra e ruído ambiente afetam diretamente a clareza.  Entrada de áudio de alta qualidade é essencial.
2.  Variações na velocidade de fala, sotaque e dialeto aumentam a dificuldade de reconhecimento, especialmente para dialetos raros ou sotaques pesados.
3. Linguagem e vocabulário: línguas mistas, termos técnicos, ou gírias aumentam a dificuldade de reconhecimento.  Configure palavras para melhorar a precisão para termos específicos de domínio.
4. O contexto insuficiente pode causar ambiguidade semântica, especialmente em situações em que o contexto circundante é necessário para o reconhecimento correto.

 Métodos de otimização:

1. Otimize a qualidade de áudio, use microfones de alto desempenho na taxa de amostragem recomendada. Minimize o ruído ambiente e eco.
2. Para áudio com sotaques fortes ou dialetos, selecione um modelo que suporte esses dialetos específicos.
3.  Configure palavras importantes, defina palavras importantes para termos técnicos, substantivos adequados e outras palavras específicas. Para mais informações, veja [Perstomize palavras quentes] (/developer-guides/speech/improve-recognition-accuracy).
4.  Evite dividir áudio em clipes excessivamente curtos.

Qwen-ASR

#### P: Como posso fornecer uma URL de áudio acessível publicamente para a API?

 Recomendamos usar o Serviço de Armazenamento de Objetos (OSS), que fornece armazenamento altamente disponível e confiável e facilmente gera URLs públicas.

** Verifique se sua URL é acessível publicamente:** Abra a URL em um navegador ou use o curl para garantir que o arquivo de áudio seja baixado ou reproduzido com sucesso (código de status 200 do HTTP).

####  Como posso verificar se meu formato de áudio atende às exigências?

Use a ferramenta de código aberto.https://ffmpeg.org/ffprobe.html) para obter rapidamente informações detalhadas de áudio:

```bash
# Check container format (format_name), codec (codec_name), sample rate (sample_rate), and number of channels (channels)
ffprobe -v error -show_entries format=format_name -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 your_audio_file.mp3
```

####  Como faço para processar áudio para atender os requisitos do modelo?

Use a ferramenta de código aberto [FFmpeg] (https://ffmpeg.en.lo4d.com/download) para cortar ou converter formatos de áudio:

- Extrair um segmento de um longo arquivo de áudio

```bash
# -i: Input file
# -ss 00:01:30: Start time (1 minute 30 seconds)
# -t 00:02:00: Duration (2 minutes)
# -c copy: Copy audio stream without re-encoding (fast)
# output_clip.wav: Output file
ffmpeg -i long_audio.wav -ss 00:01:30 -t 00:02:00 -c copy output_clip.wav
```

- Conversão de Formatos

  Por exemplo, converta qualquer áudio para 16 kHz, 16 bits, mono WAV.

```bash
# -i: Input file
# -ac 1: Set to 1 channel (mono)
# -ar 16000: Set sample rate to 16000 Hz (16 kHz)
# -sample_fmt s16: Set sample format to 16-bit signed integer PCM
# output.wav: Output file
ffmpeg -i input.mp3 -ac 1 -ar 16000 -sample_fmt s16 output.wav
```

Qwen-Omni

  Qwen-Omni  interpreta todo o áudio, não apenas o discurso.  Música, digitação ou ruído ambiente podem produzir descrições em vez de transcrição. Para áudio misto, pré-processo com DAV para isolar a fala, ou adicionar uma instrução rápida do sistema: "Transcreva apenas a fala humana. Ignore sons não falantes."



####  Quando devo usar Qwen-Omni Em vez de modelos dedicados de ASR?

Use Qwen-Omni  Quando:

1.  Precisa transcrever áudio com vocabulário especializado. Descreva seu domínio no sistema.
2.  Tradução: want Para fornecer contexto de conversação para uma precisão melhor.
3.  Você precisa processar áudio ao lado de imagens ou vídeo.
4.  Você prefere usar a API compatível com o OpenAI.

Use modelos dedicados de ASR (Fun-ASR, Qwen-ASR) quando:

1.  Modelos dedicados de RSA têm latência menor por pedido.
2.  Você precisa de suporte para palavras quentes (apenas disponível em Fun-ASR).
3.  Você precisa identificar diferentes alto-falantes (apenas disponíveis em Fun-ASR).
4. ** Longos arquivos de áudio**: Fun-ASR Suporta até 12 horas de áudio.

####  Como melhoro a precisão de transcrição com Qwen-Omni?

Use o sistema para fornecer contexto:

```python
messages=[
  {"role": "system", "content": "You are transcribing a medical consultation. Key terms: diabetes, hypertension, metformin."},
  {"role": "user", "content": [{"type": "input_audio", "input_audio": {"data": "..."}}, {"type": "text", "text": "Transcribe this audio."}]}
]
```

* Valores em reais sujeitos a ajustes e a flutuações cambiais. Conversões estimadas, sem impostos, spread ou tarifas; confirme o valor final na plataforma oficial.