oziAudio

Versión: 3.0.0Actualizado: 2026-05-27

Descripción

Componente declarativo de audio para interfaces web. Soporta tres modos de operación — player, recorder y full — todos activados mediante un atributo HTML sobre un elemento contenedor. Integra reproducción de archivos de audio, grabación por micrófono, vista previa del contenido grabado y envío automático al backend mediante oziLoadData.

El visual es completamente independiente de frameworks CSS — toda la apariencia se controla mediante tokens CSS --ozi-audio-* en :root, lo que permite una personalización total sin tocar el código del plugin. Los iconos son archivos SVG externos cargados bajo demanda con caché automático.


Ejemplos

[1] Modo player

Reproducción de audio con barra de progreso, volumen y control de velocidad.

<div
    data-ozi-audio="player"
    data-ozi-audio-url="/storage/audio/podcast.mp3"
    data-ozi-audio-title="Episodio 01">
</div>

Player sin volumen ni velocidad:

<div
    data-ozi-audio="player"
    data-ozi-audio-url="/storage/audio/intro.mp3"
    data-ozi-audio-volume="false"
    data-ozi-audio-speed="false">
</div>

[2] Modo recorder

Grabación por micrófono con temporizador en tiempo real, vista previa y envío al backend.

<div
    data-ozi-audio="recorder"
    data-ozi-audio-save-url="/api/audio/guardar"
    data-ozi-audio-save-field="grabacion">
</div>

Recorder sin vista previa:

<div
    data-ozi-audio="recorder"
    data-ozi-audio-preview="false"
    data-ozi-audio-save-url="/api/audio/guardar">
</div>

[3] Modo full — player + grabador

Player y grabador combinados en el mismo componente. Permite reproducir un audio base y grabar una nueva versión.

<div
    data-ozi-audio="full"
    data-ozi-audio-url="/storage/audio/base.mp3"
    data-ozi-audio-title="Grabación"
    data-ozi-audio-save-url="/api/audio/guardar"
    data-ozi-audio-save-field="audio_file">
</div>

[4] Personalización mediante tokens CSS

/* Tema oscuro */
.mi-player {
    --ozi-audio-bg: rgba(30, 30, 30, 0.95);
    --ozi-audio-border: rgba(255, 255, 255, 0.08);
    --ozi-audio-color: #555;
    --ozi-audio-color-secondary: #7c3aed;
    --ozi-audio-text: #ccc;
}

Características

  • Tres modosplayer, recorder y full
  • Player completo — barra de progreso, volumen, silencio y velocidad
  • Grabador — micrófono vía MediaRecorder con temporizador en tiempo real
  • Vista previa — player nativo tras grabar para revisión antes de guardar
  • Envío automático — backend vía oziLoadData
  • Pausa automática — pausa instancias concurrentes al iniciar reproducción
  • MutationObserver — detecta e inicializa elementos insertados en el DOM
  • Iconos SVG externos — cargados bajo demanda con caché, reemplazables por proyecto
  • Tokens CSS — apariencia 100% personalizable vía --ozi-audio-*

Atributos HTML

[1] Modo de Operación

Atributo Valor Descripción
data-ozi-audio player Solo reproducción
data-ozi-audio recorder Solo grabación
data-ozi-audio full Reproducción + grabación

[2] Configuración del Player

Atributo Valor por defecto Descripción
data-ozi-audio-url URL del archivo — obligatorio en modo player
data-ozi-audio-title Título mostrado en el player
data-ozi-audio-volume true Muestra control de volumen
data-ozi-audio-speed true Muestra control de velocidad

[3] Configuración del Grabador

Atributo Valor por defecto Descripción
data-ozi-audio-preview true Muestra player nativo para revisión antes de guardar
data-ozi-audio-save-url URL del backend para el envío
data-ozi-audio-save-field audio_file Nombre del campo en FormData

[4] Velocidades de Reproducción

1x1.25x1.5x1.75x2x0.75x1x


Tokens CSS

:root {
    /* Colores */
    --ozi-audio-color: #b8b8b9;
    --ozi-audio-color-secondary: #ff7f50;
    --ozi-audio-text: #808080;
    --ozi-audio-text-secondary: #dfdfdf;

    /* Contenedor */
    --ozi-audio-bg: rgba(255, 255, 255, 0.77);
    --ozi-audio-shadow: rgba(117, 108, 108, 0.22);
    --ozi-audio-border: rgba(255, 255, 255, 0.22);
    --ozi-audio-radius: 15px;
    --ozi-audio-padding: 8px 10px;
    --ozi-audio-width-min: 250px;
    --ozi-audio-width-max: 350px;

    /* Barras */
    --ozi-audio-timeline-height: 15px;
    --ozi-audio-volume-height: 7px;

    /* Botón grabar */
    --ozi-audio-record-bg: #dc3545;
    --ozi-audio-record-bg-hover: #bb2d3b;
    --ozi-audio-record-text: #ffffff;

    /* Botón guardar */
    --ozi-audio-save-bg: #198754;
    --ozi-audio-save-bg-hover: #157347;
    --ozi-audio-save-text: #ffffff;

    /* Iconos */
    --ozi-audio-icon-play-size: 20px;
    --ozi-audio-icon-volume-size: 18px;
    --ozi-audio-icon-record-size: 16px;
    --ozi-audio-icon-save-size: 14px;
}

Eventos

Evento Descripción
ozi:audio-play Se dispara al iniciar la reproducción
ozi:audio-pause Se dispara al pausar
ozi:audio-record-start Se dispara al iniciar la grabación
ozi:audio-recorded Se dispara cuando la grabación finaliza
ozi:audio-record-error Se dispara en caso de error en la grabación
ozi:audio-saved Se dispara tras un envío exitoso
ozi:audio-save-error Se dispara en caso de error en el envío
$('#miAudio').on('ozi:audio-recorded', function(e, payload) {
    console.log(payload.duration);  // duración en segundos
    console.log(payload.mimeType);  // ej: audio/webm
    console.log(payload.size);      // tamaño en bytes
    console.log(payload.file);      // objeto File
});

API Pública

Método Descripción
OziAudio.init(selector) Inicializa instancias
OziAudio.observe() Activa MutationObserver
OziAudio.get(selectorOrId) Retorna la instancia
OziAudio.destroy(selectorOrId) Destruye la instancia
OziAudio.play(selectorOrId) Inicia la reproducción
OziAudio.pause(selectorOrId) Pausa la reproducción
OziAudio.record(selectorOrId) Inicia la grabación
OziAudio.stopRecord(selectorOrId) Detiene la grabación
OziAudio.save(selectorOrId) Envía la grabación al backend
OziAudio.setIconBase(path) Define la ruta base de los iconos SVG