Reproductor de Música con Visualizador

Avanzado

Un reproductor de música interactivo con visualizaciones de audio dinámicas, analizador de espectro y efectos de partículas.

Vista Previa en Vivo

Implementación del Código

HTML
<div class="visualizer-player">
  <div class="visualizer-background">
    <canvas id="visualizer-canvas"></canvas>
    <div class="particles-container" id="particles-container"></div>
  </div>
  
  <div class="player-content">
    <div class="album-section">
      <div class="album-artwork">
        <div class="album-image">
          <div class="pulse-ring"></div>
          <div class="pulse-ring pulse-ring-2"></div>
          <div class="album-cover-img"></div>
        </div>
        <div class="now-playing-indicator">
          <div class="sound-wave">
            <div class="wave"></div>
            <div class="wave"></div>
            <div class="wave"></div>
            <div class="wave"></div>
          </div>
        </div>
      </div>
      
      <div class="track-metadata">
        <h2 id="track-title">Viaje Cósmico</h2>
        <p id="track-artist">Stellar Beats</p>
        <div class="track-stats">
          <span class="genre">Ambient</span>
          <span class="bpm">128 BPM</span>
        </div>
      </div>
    </div>
    
    <div class="spectrum-analyzer">
      <div class="frequency-bars">
        <div class="freq-bar" data-frequency="60"></div>
        <div class="freq-bar" data-frequency="170"></div>
        <div class="freq-bar" data-frequency="310"></div>
        <div class="freq-bar" data-frequency="600"></div>
        <div class="freq-bar" data-frequency="1000"></div>
        <div class="freq-bar" data-frequency="3000"></div>
        <div class="freq-bar" data-frequency="6000"></div>
        <div class="freq-bar" data-frequency="12000"></div>
        <div class="freq-bar" data-frequency="14000"></div>
        <div class="freq-bar" data-frequency="16000"></div>
      </div>
      <div class="frequency-labels">
        <span>60Hz</span>
        <span>170Hz</span>
        <span>310Hz</span>
        <span>600Hz</span>
        <span>1kHz</span>
        <span>3kHz</span>
        <span>6kHz</span>
        <span>12kHz</span>
        <span>14kHz</span>
        <span>16kHz</span>
      </div>
    </div>
    
    <div class="progress-visualization">
      <div class="time-info">
        <span id="current-time">2:45</span>
        <span id="total-time">5:32</span>
      </div>
      <div class="waveform-progress">
        <svg class="waveform-svg" viewBox="0 0 400 60">
          <path id="waveform-path" d="M0,30 Q50,10 100,30 T200,30 T300,30 T400,30" stroke="rgba(255,255,255,0.3)" stroke-width="2" fill="none"/>
          <path id="waveform-progress" d="M0,30 Q50,10 100,30 T200,30" stroke="#00f5ff" stroke-width="2" fill="none"/>
        </svg>
        <div class="progress-thumb" id="progress-thumb"></div>
      </div>
    </div>
    
    <div class="control-interface">
      <div class="playback-controls">
        <button class="ctrl-btn" id="shuffle-btn" aria-label="Aleatorio">
          <svg viewBox="0 0 24 24" fill="currentColor">
            <path d="M10.59 9.17L5.41 4 4 5.41l5.17 5.17 1.42-1.41zM14.5 4l2.04 2.04L4 18.59 5.41 20 17.96 7.46 20 9.5V4h-5.5zm.33 9.41l-1.41 1.41 3.13 3.13L14.5 20H20v-5.5l-2.04 2.04-3.13-3.13z"/>
          </svg>
        </button>
        
        <button class="ctrl-btn" id="prev-btn" aria-label="Anterior">
          <svg viewBox="0 0 24 24" fill="currentColor">
            <path d="M6 6h2v12H6zm3.5 6l8.5 6V6z"/>
          </svg>
        </button>
        
        <button class="play-button" id="play-btn" aria-label="Reproducir/Pausar">
          <div class="play-icon">
            <svg viewBox="0 0 24 24" fill="currentColor">
              <path d="M8 5v14l11-7z"/>
            </svg>
          </div>
          <div class="pause-icon" style="display: none;">
            <svg viewBox="0 0 24 24" fill="currentColor">
              <path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z"/>
            </svg>
          </div>
        </button>
        
        <button class="ctrl-btn" id="next-btn" aria-label="Siguiente">
          <svg viewBox="0 0 24 24" fill="currentColor">
            <path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"/>
          </svg>
        </button>
        
        <button class="ctrl-btn" id="repeat-btn" aria-label="Repetir">
          <svg viewBox="0 0 24 24" fill="currentColor">
            <path d="M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z"/>
          </svg>
        </button>
      </div>
      
      <div class="audio-controls">
        <div class="volume-section">
          <button class="ctrl-btn" id="volume-btn" aria-label="Volumen">
            <svg viewBox="0 0 24 24" fill="currentColor">
              <path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"/>
            </svg>
          </button>
          <div class="volume-slider">
            <input type="range" id="volume-range" min="0" max="100" value="80">
            <div class="volume-fill"></div>
          </div>
        </div>
        
        <div class="equalizer-toggle">
          <button class="ctrl-btn" id="eq-btn" aria-label="Ecualizador">
            <svg viewBox="0 0 24 24" fill="currentColor">
              <path d="M7 18h2V6H7v12zm4 4h2V2h-2v20zm-8-8h2v-4H3v4zm12 4h2V6h-2v12zm4-8v4h2v-4h-2z"/>
            </svg>
          </button>
        </div>
      </div>
    </div>
    
    <div class="playlist-visualizer">
      <h3>Cola de Reproducción</h3>
      <div class="track-queue">
        <div class="queue-item active" data-title="Viaje Cósmico" data-artist="Stellar Beats" data-duration="5:32">
          <div class="queue-visualizer">
            <div class="mini-bars">
              <div class="mini-bar"></div>
              <div class="mini-bar"></div>
              <div class="mini-bar"></div>
            </div>
          </div>
          <div class="queue-info">
            <span class="queue-title">Viaje Cósmico</span>
            <span class="queue-artist">Stellar Beats</span>
          </div>
          <span class="queue-duration">5:32</span>
        </div>
        
        <div class="queue-item" data-title="Sueños Digitales" data-artist="Synth Masters" data-duration="4:18">
          <div class="queue-visualizer">
            <div class="mini-bars">
              <div class="mini-bar"></div>
              <div class="mini-bar"></div>
              <div class="mini-bar"></div>
            </div>
          </div>
          <div class="queue-info">
            <span class="queue-title">Sueños Digitales</span>
            <span class="queue-artist">Synth Masters</span>
          </div>
          <span class="queue-duration">4:18</span>
        </div>
        
        <div class="queue-item" data-title="Pulso Neón" data-artist="Electric Waves" data-duration="3:47">
          <div class="queue-visualizer">
            <div class="mini-bars">
              <div class="mini-bar"></div>
              <div class="mini-bar"></div>
              <div class="mini-bar"></div>
            </div>
          </div>
          <div class="queue-info">
            <span class="queue-title">Pulso Neón</span>
            <span class="queue-artist">Electric Waves</span>
          </div>
          <span class="queue-duration">3:47</span>
        </div>
      </div>
    </div>
  </div>
  
  <audio id="audio-element"></audio>
</div>

Características del Fragmento

Diseño Responsivo: Sí
Soporte para Modo Oscuro: Sí
Categoría: content-cards
Nivel de Dificultad: Avanzado

Compatibilidad del Navegador

🟢
chrome 60+
🟠
firefox 55+
🔵
safari 10+
🟦
edge 15+