# Normalizar audio cargado para reproducción web y en apps | AudioDN

> Convierte automáticamente el audio cargado por usuarios en una variante de reproducción consistente para sitios web, apps móviles y players personalizados sin operar tu propio pipeline de transcodificación.

Source: https://audiodeliverynetwork.com/es/examples/prepare-audio-for-playback/

---

# Estandarizar audio cargado para una reproducción fiable

AudioDN es una API de procesamiento y entrega de audio. Toma audio de origen compatible e inconsistente — una grabación de teléfono, una exportación de estudio, la elección de codec rara de un host de podcast — y produce una variante predecible y lista para reproducción, y luego la entrega mediante URLs firmadas. Configura la salida una vez (este ejemplo usa AAC a 128 kbps) y AudioDN aplica esa receta a las nuevas cargas automáticamente. Tu aplicación solo sube el origen, espera a que termine el procesamiento y solicita la variante por nombre. No operas FFmpeg, colas de transcodificación ni infraestructura de entrega.

#### Qué significa normalizar aquí

En este ejemplo, **normalizar** significa _estandarización de formato_: un codec de salida consistente, bitrate y configuración de canales, más el stripping opcional de metadatos y cover art, entregado como una variante con nombre. **No** significa normalización de loudness — AudioDN no realiza targeting de LUFS, limitación de true-peak, ajuste de ganancia ni procesamiento de rango dinámico en este flujo.

## De un vistazo

<table class="w-full border-collapse border border-border text-sm"><tbody><tr><th class="border border-border bg-muted px-3 py-2 text-left font-medium align-top w-48">Problema</th><td class="border border-border px-3 py-2 text-muted-foreground">El audio cargado llega en formatos, codecs y calidades inconsistentes.</td></tr><tr><th class="border border-border bg-muted px-3 py-2 text-left font-medium align-top">Entrada</th><td class="border border-border px-3 py-2 text-muted-foreground">Cualquier audio de origen compatible con AudioDN (por ejemplo WAV, FLAC, MP3).</td></tr><tr><th class="border border-border bg-muted px-3 py-2 text-left font-medium align-top">Salida</th><td class="border border-border px-3 py-2 text-muted-foreground">Una variante de reproducción con nombre consistente — aquí <code>aac</code> a 128 kbps, entregada como <code>audio/aac</code>.</td></tr><tr><th class="border border-border bg-muted px-3 py-2 text-left font-medium align-top">Configurado</th><td class="border border-border px-3 py-2 text-muted-foreground">Una vez, como receta de variante a nivel de organización (o por pista vía la API).</td></tr><tr><th class="border border-border bg-muted px-3 py-2 text-left font-medium align-top">Tu aplicación gestiona</th><td class="border border-border px-3 py-2 text-muted-foreground">La carga del origen y la integración de la reproducción.</td></tr><tr><th class="border border-border bg-muted px-3 py-2 text-left font-medium align-top">AudioDN gestiona</th><td class="border border-border px-3 py-2 text-muted-foreground">Procesamiento, transcodificación, almacenamiento y entrega segura.</td></tr></tbody></table>

## Cómo encaja el flujo

Una carga compatible se convierte en un archivo reproducible y consistente en cuatro pasos gestionados. El procesamiento debe completarse antes de la reproducción, así que tu aplicación espera a que la pista esté `ready` y luego solicita la variante por nombre.

Flujo de alto nivel

```
Audio de origen compatible (WAV, FLAC, MP3, ...)
        |
        v
Cargar a AudioDN
        |
        v
AudioDN procesa la pista           (track_status_id: processing)
        |
        v
Variante configurada generada      (track_status_id: ready)
        |
        v
Reproduce la misma variante con nombre en web, móvil o servidor
```

## 1\. Configura primero la salida

La **variante** de transcode es la función sobre la que realmente trata este ejemplo. Una variante es una receta reutilizable que indica a AudioDN cómo convertir cualquier carga compatible en una salida concreta. Configúrala una vez y AudioDN genera esa misma variante con nombre para las nuevas cargas automáticamente — tu código nunca tiene que detectar ni especializar el codec de origen, y siempre solicita el resultado por el mismo nombre.

### Configurar una variante de transcode aac en el dashboard

1.  Inicia sesión en el [dashboard de AudioDN](https://account.audiodeliverynetwork.com) y abre **Variants**.
    
2.  Haz clic en **Add Variant** y elige el tipo **Transcode**.
3.  Establece el index a `aac`, el codec a **AAC** y el bitrate a **128**. Deja el estéreo activado y habilita strip tags y strip cover art para estandarizar los metadatos.
    
4.  Guarda. Las nuevas cargas se transcodifican a esta variante `aac` automáticamente.

#### Añadir la variante a una pista existente

Las recetas a nivel de organización se aplican a las nuevas cargas. Para añadir la misma salida a una sola pista que ya está `ready`, añade una variante específica de la pista con `POST /v1/track/:track_id/variant` (codec y bitrate por defecto `aac` a `128`). Referencia completa de campos: [API de variantes](/docs/api/variants).

### Por qué AAC a 128 kbps

AAC es un valor práctico por defecto para reproducción web y en apps en general: está ampliamente soportado en navegadores modernos, sistemas operativos móviles y players de medios, y 128 kbps ofrece un equilibrio útil entre calidad, tamaño de archivo y rendimiento de streaming para la escucha típica. AudioDN entrega esta variante con el content type `audio/aac`. Si tu producto necesita otros compromisos, configura un codec o bitrate distinto, o añade más variantes — consulta [Tipos de variantes](/docs/variant-types).

## 2\. Sube el origen

No importa cómo llegue el archivo — un master de estudio sin pérdida, un memo de voz comprimido o lo que haya producido el teléfono de un oyente. La carga es una secuencia corta y explícita: crea una sesión (opcionalmente con un track anidado para crear la primera pista de antemano), crea las pistas adicionales, haz PUT de los bytes a la URL de carga de la pista y luego espera hasta que la pista esté `ready`.

Secuencia de carga (conceptual)

```
POST /v1/upload_session                       -> upload_session_id
  (objeto track anidado opcional)              -> también track_id + track_upload.upload_url
POST /v1/upload/{upload_session_id}/track     -> track_upload.upload_url  (por cada archivo adicional)
PUT  {track_upload.upload_url}                  (enviar los bytes de origen)
GET  /v1/track/{track_id}                       (polling hasta track_status_id = ready)
Solicitar la variante configurada              (p. ej. variants="aac")
```

#### Track anidado opcional

Por defecto una sesión de carga solo devuelve un `upload_session_id`. Incluye un objeto `track` anidado en `POST /v1/upload_session` para recibir también `track_upload.upload_url` en esa respuesta (aún puedes añadir más pistas después). En caso contrario, crea cada pista con `POST /v1/upload/{upload_session_id}/track`.

Luego haz polling de `GET /v1/track/:track_id` hasta que `track_status_id` sea `ready`, o escucha un webhook de pista, antes de iniciar la reproducción.

Ejemplo completo de carga (API y componente Uploader)MostrarOcultar

### Opción A — Cargar vía la API

Tu servidor (o el cliente, con una clave Client-Side Upload) dirige la carga directamente.

Crear una sesión de carga

#### Ejemplo de solicitud

  

```
# COLLECTION_ID: uuid de la colección a la que subir
curl -X POST "https://api.audiodelivery.net/v1/upload_session" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "collection_id": "COLLECTION_ID",
  "expires_in": 7200
}'
```

```
// COLLECTION_ID: uuid de la colección a la que subir

const payload = {
  "collection_id": "COLLECTION_ID",
  "expires_in": 7200
};

const response = await fetch('https://api.audiodelivery.net/v1/upload_session', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(payload)
});

const data = await response.json();
```

```
# COLLECTION_ID: uuid de la colección a la que subir

import requests

headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
}

payload = {
    "collection_id": "COLLECTION_ID",
    "expires_in": 7200
}

response = requests.post(
    "https://api.audiodelivery.net/v1/upload_session",
    headers=headers,
    json=payload,
)
data = response.json()
```

Crear una pista en la sesión

#### Ejemplo de solicitud

  

```
# SESSION_ID: upload_session_id devuelto por la llamada anterior
curl -X POST "https://api.audiodelivery.net/v1/upload/SESSION_ID/track" \
  -H "Content-Type: application/json" \
  -d '{
  "file_name": "track.wav"
}'
```

```
// SESSION_ID: upload_session_id devuelto por la llamada anterior

const payload = {
  "file_name": "track.wav"
};

const response = await fetch('https://api.audiodelivery.net/v1/upload/SESSION_ID/track', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(payload)
});

const data = await response.json();
```

```
# SESSION_ID: upload_session_id devuelto por la llamada anterior

import requests

headers = {
    "Content-Type": "application/json",
}

payload = {
    "file_name": "track.wav"
}

response = requests.post(
    "https://api.audiodelivery.net/v1/upload/SESSION_ID/track",
    headers=headers,
    json=payload,
)
data = response.json()
```

Subir los bytes del archivo

PUT track\_upload.upload\_url

```
# Tras create-track, que devuelve track_upload.upload_url, haz PUT de los bytes de origen.
# Cualquier formato de origen compatible funciona, independientemente de su calidad o codec original.
curl -X PUT "$UPLOAD_URL" \
  --data-binary @track.wav \
  -H "Content-Type: audio/wav"
```

### Opción B — Cargar vía el componente Uploader

Añade un uploader drag-and-drop a tu página; no se necesita backend con una clave Client-Side Upload.

#### Dependencia

 

```
npm install @audiodn/components
```

```
<script type="module" src="https://unpkg.com/@audiodn/components@latest/dist/uploader.js"></script>
```

#### Uso

```
<script type="module">
import '@audiodn/components/uploader';
</script>

<audiodn-uploader
api-key="YOUR_UPLOAD_API_KEY"
collection-id="COLLECTION_ID"
></audiodn-uploader>
```

El componente gestiona drag-and-drop, progreso por archivo y reintentos por ti. Referencia completa de atributos: [Documentación del componente Uploader](/docs/components/uploader).

Referencia completa campo a campo: [API de sesiones de carga](/docs/api/upload-sessions).

## 3\. Reproduce la variante

Una vez que la pista está `ready`, cada superficie que envía tu producto solicita exactamente la misma variante por nombre y obtiene exactamente el mismo archivo predecible — sin detección de formato ni casos especiales por plataforma. El camino más rápido en la web es el componente `<audiodn-player>` con una clave Client-Side Player:

#### Dependencia

 

```
npm install @audiodn/components
```

```
<script type="module" src="https://unpkg.com/@audiodn/components@latest/dist/player.js"></script>
```

#### Uso

```
<script type="module">
  import '@audiodn/components/player';
</script>

<audiodn-player
  api-key="YOUR_PLAYER_API_KEY"
  scope="track"
  id="TRACK_ID"
  variants="aac"
  size="regular"
></audiodn-player>
```

### Demo en vivo

La pista del hero de la homepage, reproducida aquí desde su única variante estandarizada `aac`.

Música de [Nyktrn](https://soundcloud.com/nyktrn)

### Solicita la misma variante en cualquier lugar

El player es opcional. Aplicaciones web personalizadas, móviles, Flutter, nativas y de servidor pueden crear una play session y reproducir en streaming la URL firmada devuelta para la misma variante con nombre, o firmar URLs de entrega directamente para reproducción en el backend.

-   **Sitio web / player personalizado** — incrusta `<audiodn-player>`, o solicita el archivo para tu propia UI. Consulta la guía de [Integración web](/docs/integration/web).
    
-   **App móvil** — crea una play session solicitando la variante `aac` desde Swift, Kotlin o Flutter, y luego reproduce en streaming la URL firmada con cualquier player de audio de la plataforma. Consulta [Integración móvil](/docs/integration/mobile).
    
-   **Servidor / API** — firma URLs de entrega para reproducción backend-to-backend o descargas. Consulta [Entrega firmada](/docs/integration/signed-delivery) y la [API de variantes](/docs/api/variants).
    

Más opciones del player (temas, tamaños, playlists, cover art): [Documentación del componente Player](/docs/components/player).

## Cuándo usar este flujo

Úsalo siempre que tu producto acepte audio que no controlas y necesite reproducirse de forma consistente. Eso cubre cargas de usuarios, artistas, teléfonos, navegadores, dispositivos de grabación, software de edición, sistemas externos y múltiples herramientas de producción a la vez.

Encaja en plataformas de música, podcasts, grabaciones de voz, audio social, productos educativos, marketplaces, apps de audio generado por IA y otros productos de audio generado por usuarios. En cada caso AudioDN puede sustituir la infraestructura personalizada que de otro modo operarías: almacenamiento de carga, colas de procesamiento, workers de FFmpeg, almacenamiento de salida, firma de entrega y entrega de reproducción.

## Qué no cubre este ejemplo

Este ejemplo se centra en producir un formato de reproducción consistente a partir de cargas inconsistentes. Lo siguiente son capacidades relacionadas pero separadas, no parte de este flujo:

-   **Clips de vista previa** — extractos cortos con seek restringido. Consulta [Player de clip de vista previa](/examples/preview-clip-player).
-   **Waveforms** — variantes de imagen o vídeo de waveform. Consulta [Tipos de variantes](/docs/variant-types).
-   **Variantes adicionales** — bitrates o codecs extra junto a `aac` para entrega multi-calidad.
-   **Descargas sin pérdida** — ofrecer descargas FLAC o WAV desde la misma carga.
-   **Normalización de loudness** — AudioDN no realiza targeting de LUFS ni ajuste de ganancia; este flujo estandariza el formato, no el volumen.

## FAQ

### ¿Cómo normalizo el audio cargado por usuarios para reproducción web?

Sube el origen a AudioDN, espera hasta que el track\_status\_id de la pista sea ready y luego solicita tu variante de transcode configurada (por ejemplo AAC a 128 kbps). AudioDN estandariza el codec, el bitrate y la disposición de canales para que cada carga se reproduzca como el mismo archivo predecible.

### ¿Puede AudioDN convertir distintos formatos de audio en un formato consistente?

Sí. AudioDN acepta formatos de origen compatibles como WAV, FLAC y MP3 y los transcodifica a una única variante de salida configurada, de modo que tu player siempre solicita un archivo consistente independientemente de lo que se haya subido.

### ¿Necesito operar FFmpeg?

No. AudioDN ejecuta el pipeline de transcodificación por ti. Subes el origen y solicitas la variante terminada; no ejecutas workers de FFmpeg, colas de procesamiento ni almacenamiento de salida tú mismo.

### ¿AudioDN normaliza el volumen (loudness) del audio?

No. Este flujo realiza estandarización de formato (codec, bitrate, configuración de canales y manejo de metadatos), no normalización de loudness, targeting de LUFS, limitación de true-peak ni ajuste de ganancia.

### ¿Cuándo está disponible la variante de reproducción?

Cuando termina el procesamiento. Haz polling de GET /v1/track/{track\_id} hasta que track\_status\_id sea ready, o escucha un webhook de pista. Empieza la reproducción solo cuando la pista esté ready.

### ¿Puedo usar mi propio player de audio?

Sí. El web component audiodn-player es opcional. Cualquier cliente web, móvil o de servidor puede crear una play session y reproducir en streaming la URL firmada devuelta para la misma variante con nombre.

### ¿Se puede usar la misma variante en una app móvil?

Sí. Las apps nativas de iOS, Android y Flutter solicitan la misma variante por nombre mediante una play session y reproducen la URL firmada devuelta con el player de audio de la plataforma.

### ¿Crear una sesión de carga devuelve la URL de carga?

Por defecto, no — crear una sesión de carga solo devuelve un upload\_session\_id. Opcionalmente incluye un objeto track anidado en POST /v1/upload\_session para recibir también track\_upload.upload\_url en esa respuesta (aún puedes añadir más pistas después). En caso contrario, crea una pista con POST /v1/upload/{upload\_session\_id}/track; esa respuesta contiene la URL de carga específica de la pista.

## Lista de comprobación

-   Existe una receta de variante de transcode `aac` a 128 kbps (configurada una vez en el dashboard, o añadida a una sola pista vía `POST /v1/track/:track_id/variant`).
-   Un archivo de origen compatible se ha subido — vía la API o el componente `<audiodn-uploader>` — y ha alcanzado `track_status_id` `ready`.
-   El player está acotado a la pista, solicitando la variante `aac` con una clave Client-Side Player.
-   La misma variante `aac` se solicita de forma consistente en las integraciones web, móvil y de servidor.

Publicado 15 de julio de 2026
