Oferta de lanzamiento: Los planes Creator y Business tienen descuento por tiempo limitado. Ver precios

Waveform

¿Estás construyendo un player personalizado pero quieres una visualización de forma de onda lista para producción? La forma de onda está disponible como componente independiente — carga solo lo que necesitas, estilízala como quieras y conéctala a tu propia lógica de reproducción.

Uso

Instálalo desde npm e importa el componente waveform independiente, luego establece la propiedad levels con los datos de amplitud de la respuesta de la API de sesión de reproducción en first_track.levels.

npm install @audiodn/components
import '@audiodn/components/waveform'
<audiodn-waveform
variant="vertical"
height="100"
line-width="2"
gap="3"
progress="0.6"
></audiodn-waveform>

¿Prefieres sin paso de build? Cárgalo directamente desde un CDN:

<script type="module" src="https://unpkg.com/@audiodn/components@latest/dist/waveform.js"></script>
// Create a play session; its response includes the first track's level data.
const res = await fetch('https://api.audiodelivery.net/v1/play_session/track', {
method: 'POST',
headers: {
  'Authorization': 'Bearer YOUR_API_KEY',
  'Content-Type': 'application/json'
},
body: JSON.stringify({ track_id: 'TRACK_ID' })
});
const { first_track } = await res.json();

const waveform = document.querySelector('audiodn-waveform');
waveform.levels = first_track.levels.levels;

Atributos

AtributoTipoPredeterminadoDescripción
levelsnumber[][]Array de valores de amplitud 0–1 (se establece vía propiedad JS)
variantstring”vertical”Estilo de renderizado: barras “vertical”, curvas “wavy” o barras “reflection” con una reflexión espejada inclinada
heightnumber120Alto del canvas en píxeles
line-widthnumber2Ancho de cada barra de forma de onda o del trazo de la onda
line-colorstring”#888888”Color del trazo (sobrescrito por la variable CSS —adn-waveform-color-fg)
gapnumber3Espaciado entre barras en la variante vertical
scale-strengthnumber0.4Controla el escalado de amplitud — valores más bajos comprimen el rango quieto/fuerte
reflection-anglenumber45Solo reflection: inclinación máxima de la reflexión en grados, alcanzada al 0% / 100% de progreso
reflection-sizenumber0.25Solo reflection: alto de la reflexión como fracción del alto de la forma de onda principal
reflection-opacitynumber0.55Solo reflection: opacidad de la reflexión en la línea base (se desvanece a 0 hacia abajo)
progressnumber0Posición de progreso de reproducción (0–1)
durationnumber0Duración de la pista en segundos

Vertical

Estilo predeterminado de barras verticales. line-width, gap y height configurables vía atributos.

<audiodn-waveform
variant="vertical"
height="100"
line-width="2"
gap="3"
progress="0.6"
></audiodn-waveform>
// Level data is returned by the play session API:
// POST /v1/play_session/:scope
// Response: { first_track: { levels: { levels: [...], min, max, avg } } }

const { levels } = response.first_track;

const waveform = document.querySelector('audiodn-waveform');
waveform.levels = levels.levels; // array of 0–1 amplitude values

// Frameworks with property bindings (Vue, React, Svelte, Angular, etc.)
// can pass levels directly — no querySelector needed:
//   Vue:    <audiodn-waveform :levels="levels.levels" />
//   React:  <audiodn-waveform ref={r => r && (r.levels = data)} />

Wavy

Estilo de onda curva suave usando variant=“wavy”.

<audiodn-waveform
variant="wavy"
height="100"
line-width="2"
gap="3"
progress="0.35"
></audiodn-waveform>
const { levels } = response.first_track;

const waveform = document.querySelector('audiodn-waveform');
waveform.levels = levels.levels;

Reflection

Barras con base plana y una imagen espejo más corta y desvanecida debajo, con variant=“reflection”. La reflexión se inclina según progress — barre de derecha a izquierda a medida que la reproducción avanza del inicio (0) al final (1), dando a la forma de onda una sutil sensación de movimiento. Ajústala con reflection-angle, reflection-size y reflection-opacity.

<audiodn-waveform
variant="reflection"
height="100"
line-width="2"
gap="3"
progress="0.3"
reflection-angle="45"
reflection-size="0.25"
reflection-opacity="0.55"
></audiodn-waveform>
const { levels } = response.first_track;

const waveform = document.querySelector('audiodn-waveform');
waveform.levels = levels.levels;

// Update progress as the track plays — the reflection leans with it:
waveform.progress = currentTime / duration;

Líneas finas

Barras estrechas con espaciado ajustado: line-width=“1”, gap=“1”. Sin progress — la forma de onda se renderiza a media opacidad sin playhead.

<audiodn-waveform
variant="vertical"
height="80"
line-width="1"
gap="1"
></audiodn-waveform>

Wavy grueso

Curvas onduladas anchas con espaciado generoso: line-width=“4”, gap=“6”. Sin progress — la forma de onda se renderiza a media opacidad sin playhead.

<audiodn-waveform
variant="wavy"
height="80"
line-width="4"
gap="6"
></audiodn-waveform>

Playhead

Muestra una posición de playhead al 40% con overlay de resaltado.

<audiodn-waveform
variant="vertical"
height="100"
line-width="2"
gap="3"
progress="0.4"
></audiodn-waveform>

Temas

Sobrescribe propiedades CSS personalizadas en el host para restilizar la forma de onda. Todas las propiedades usan el prefijo —adn-waveform-*, con —adn-color-accent como fallback compartido para el color de línea.

Light / Dark (preferencia del sistema)

.theme-wf-lightdark {
--adn-waveform-color-fg: light-dark(#333, #ccc);
--adn-waveform-color-playhead: light-dark(#333, #eee);
--adn-waveform-playhead-width: 2px;
--adn-waveform-bg: light-dark(#f5f5f5, #1a1a1a);
--adn-waveform-border: 1px solid light-dark(#ddd, #333);
--adn-waveform-radius: 8px;
--adn-waveform-padding: 8px;
}

Midnight

.theme-wf-midnight {
--adn-waveform-color-fg: #7c3aed;
--adn-waveform-color-playhead: #a78bfa;
--adn-waveform-playhead-width: 2px;
--adn-waveform-bg: #1a1a2e;
--adn-waveform-border: 1px solid #3a3a5e;
--adn-waveform-radius: 12px;
--adn-waveform-padding: 12px;
}

Electric

.theme-wf-electric {
--adn-waveform-color-fg: #00d4ff;
--adn-waveform-color-playhead: #e040fb;
--adn-waveform-playhead-width: 3px;
--adn-waveform-bg: #0a0a0f;
--adn-waveform-border: 1px solid #00d4ff33;
--adn-waveform-radius: 4px;
--adn-waveform-padding: 8px;
}