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
1055
Browser Compatibility
Chrome · Firefox · Safari · Edge
Live Preview
Interact with the component without leaving the page.
HTML
191
lines
CSS
565
lines
JavaScript
299
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>
Browser Compatibility
Chrome
≥ 60
Firefox
≥ 55
Safari
≥ 10
Edge
≥ 15