content-cards
advanced
music
player
visualizer
animation
interactive
Category · Content Cards Difficulty Level · Advanced Published on · August 18, 2025

Music Player with Visualizer

An interactive music player featuring dynamic audio visualizations, spectrum analyzer, and particle effects.

#music #player #visualizer #animation #interactive

Responsive Design

Yes

Dark Mode Support

Yes

lines

1033

Browser Compatibility

Chrome · Firefox · Safari · Edge

Live Preview

Interact with the component without leaving the page.

500px

Overview

An interactive music player featuring dynamic audio visualizations, spectrum analyzer, and particle effects.

How to use

  1. Copy the HTML markup into your page.
  2. Paste the CSS into your stylesheet and ensure the selectors match your markup.
  3. Paste the JavaScript and load it after the markup.
  4. Adjust spacing, colors, and text to match your design system.

Customization tips

  • Rename class names to avoid collisions with your existing CSS.
  • Replace hard-coded colors with CSS variables for theming.
  • Verify the layout at 320px, 768px, and 1024px widths.
  • Test dark mode with your preferred background and text colors.

HTML

191

lines

CSS

556

lines

JavaScript

286

lines


                <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">Cosmic Journey</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="Shuffle">
          <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="Previous">
          <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="Play/Pause">
          <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="Next">
          <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="Repeat">
          <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="Volume">
            <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="Equalizer">
            <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>Queue</h3>
      <div class="track-queue">
        <div class="queue-item active" data-title="Cosmic Journey" 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">Cosmic Journey</span>
            <span class="queue-artist">Stellar Beats</span>
          </div>
          <span class="queue-duration">5:32</span>
        </div>
        
        <div class="queue-item" data-title="Digital Dreams" 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">Digital Dreams</span>
            <span class="queue-artist">Synth Masters</span>
          </div>
          <span class="queue-duration">4:18</span>
        </div>
        
        <div class="queue-item" data-title="Neon Pulse" 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">Neon Pulse</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>

              
191lines
7211characters
HTMLLanguage

Browser Compatibility

Chrome

>= 60

Firefox

>= 55

Safari

>= 10

Edge

>= 15

Related Code Snippets

Explore template packs

Need larger building blocks? Browse responsive landing pages and component bundles.

Open HTML Template Library ->