HTML - Audio-Player

Willkommen, ambitionierte Web-Entwickler! Heute tauchen wir in die aufregende Welt der HTML-Audio-Player ein. Bis zum Ende dieses Tutorials wirst du in der Lage sein, deinen eigenen benutzerdefinierten Audio-Player zu erstellen und sogar einige coole visuelle Effekte hinzuzufügen. Also, lassen wir unsere Code-Hüte aufsetzen und diese musikalische Reise beginnen!

HTML - Audio Player

HTML-Lokaler Audio-Player mit Visualizer

Grundlagen des HTML-Audios

Bevor wir einen schicken Audio-Player erstellen, beginnen wir mit den Grundlagen. HTML5 führte das <audio>-Element ein, das es super einfach macht, Audio in deine Webseiten einzufügen. Hier ist ein einfaches Beispiel:

<audio controls>
<source src="your-audio-file.mp3" type="audio/mpeg">
Dein Browser unterstützt das Audio-Element nicht.
</audio>

In diesem Code:

  • Das <audio>-Tag erstellt einen Audio-Player.
  • Das controls-Attribut fügt Play-, Pausen- und Lautstärkeregler hinzu.
  • Das <source>-Tag gibt die abzuspielende Audiodatei an.
  • Wir inkludieren eine Ausweichnachricht für Browser, die das <audio>-Element nicht unterstützen.

Erstellen eines benutzerdefinierten Audio-Players

Nun erstellen wir einen mehr individualisierten Audio-Player. Wir verwenden HTML, CSS und JavaScript, um diesen zu bauen:

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Benutzerdefinierter Audio-Player</title>
<style>
#custom-player {
width: 300px;
padding: 20px;
background-color: #f0f0f0;
border-radius: 10px;
}
#play-pause-btn {
width: 100px;
height: 30px;
}
#seek-bar {
width: 100%;
margin-top: 10px;
}
</style>
</head>
<body>
<div id="custom-player">
<audio id="audio-element" src="your-audio-file.mp3"></audio>
<button id="play-pause-btn">Play</button>
<input type="range" id="seek-bar" value="0">
</div>

<script>
const audio = document.getElementById('audio-element');
const playPauseBtn = document.getElementById('play-pause-btn');
const seekBar = document.getElementById('seek-bar');

playPauseBtn.addEventListener('click', () => {
if (audio.paused) {
audio.play();
playPauseBtn.textContent = 'Pause';
} else {
audio.pause();
playPauseBtn.textContent = 'Play';
}
});

audio.addEventListener('timeupdate', () => {
const progress = (audio.currentTime / audio.duration) * 100;
seekBar.value = progress;
});

seekBar.addEventListener('input', () => {
const time = (seekBar.value / 100) * audio.duration;
audio.currentTime = time;
});
</script>
</body>
</html>

Lassen wir das auseinander fallen:

  1. Wir erstellen einen Container <div> für unseren benutzerdefinierten Player.
  2. Innen haben wir ein <audio>-Element (ohne Steuerungen), einen Play/Pause-Button und einen Suchbalken.
  3. Im JavaScript:
  • Wir wechseln zwischen Play/Pause, wenn der Button geklickt wird.
  • Wir aktualisieren den Suchbalken, während das Audio abgespielt wird.
  • Wir erlauben das Suchen, indem wir auf den Suchbalken klicken.

Hinzufügen eines Visualizers

Nun fügen wir einen einfachen Visualizer hinzu, um unseren Player ansprechender zu gestalten. Wir verwenden die Web Audio API dafür:

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Audio-Player mit Visualizer</title>
<style>
#custom-player {
width: 300px;
padding: 20px;
background-color: #f0f0f0;
border-radius: 10px;
}
#play-pause-btn {
width: 100px;
height: 30px;
}
#seek-bar {
width: 100%;
margin-top: 10px;
}
#visualizer {
width: 300px;
height: 150px;
background-color: #000;
margin-top: 10px;
}
</style>
</head>
<body>
<div id="custom-player">
<audio id="audio-element" src="your-audio-file.mp3"></audio>
<button id="play-pause-btn">Play</button>
<input type="range" id="seek-bar" value="0">
<canvas id="visualizer"></canvas>
</div>

<script>
const audio = document.getElementById('audio-element');
const playPauseBtn = document.getElementById('play-pause-btn');
const seekBar = document.getElementById('seek-bar');
const canvas = document.getElementById('visualizer');
const ctx = canvas.getContext('2d');

// Audio-Context einrichten
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
const analyser = audioContext.createAnalyser();
const source = audioContext.createMediaElementSource(audio);
source.connect(analyser);
analyser.connect(audioContext.destination);

// Play/Pause-Funktionalität
playPauseBtn.addEventListener('click', () => {
if (audioContext.state === 'suspended') {
audioContext.resume();
}
if (audio.paused) {
audio.play();
playPauseBtn.textContent = 'Pause';
} else {
audio.pause();
playPauseBtn.textContent = 'Play';
}
});

// Suchbalken-Funktionalität
audio.addEventListener('timeupdate', () => {
const progress = (audio.currentTime / audio.duration) * 100;
seekBar.value = progress;
});

seekBar.addEventListener('input', () => {
const time = (seekBar.value / 100) * audio.duration;
audio.currentTime = time;
});

// Visualizer
function drawVisualizer() {
requestAnimationFrame(drawVisualizer);

const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);
analyser.getByteFrequencyData(dataArray);

ctx.fillStyle = 'rgb(0, 0, 0)';
ctx.fillRect(0, 0, canvas.width, canvas.height);

const barWidth = (canvas.width / bufferLength) * 2.5;
let x = 0;

for (let i = 0; i < bufferLength; i++) {
const barHeight = dataArray[i] / 2;

ctx.fillStyle = `rgb(${barHeight + 100}, 50, 50)`;
ctx.fillRect(x, canvas.height - barHeight, barWidth, barHeight);

x += barWidth + 1;
}
}

drawVisualizer();
</script>
</body>
</html>

In dieser erweiterten Version:

  1. Wir fügen ein <canvas>-Element für unseren Visualizer hinzu.
  2. Wir richten einen Audio-Context und einen Analyzer mit der Web Audio API ein.
  3. Die drawVisualizer-Funktion erstellt eine Balkendiagramm-Visualisierung der Audiofrequenzen.

Lokaler Audio-Player mit Playlist

Nun erstellen wir einen Player, der mehrere Titel verwalten kann:

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Audio-Player mit Playlist</title>
<style>
#playlist-player {
width: 300px;
padding: 20px;
background-color: #f0f0f0;
border-radius: 10px;
}
#play-pause-btn, #prev-btn, #next-btn {
width: 80px;
height: 30px;
margin: 5px;
}
#seek-bar {
width: 100%;
margin-top: 10px;
}
#playlist {
list-style-type: none;
padding: 0;
}
#playlist li {
cursor: pointer;
padding: 5px;
}
#playlist li:hover {
background-color: #ddd;
}
</style>
</head>
<body>
<div id="playlist-player">
<audio id="audio-element"></audio>
<button id="prev-btn">Vorheriges</button>
<button id="play-pause-btn">Play</button>
<button id="next-btn">Nächstes</button>
<input type="range" id="seek-bar" value="0">
<ul id="playlist">
<li data-src="song1.mp3">Titel 1</li>
<li data-src="song2.mp3">Titel 2</li>
<li data-src="song3.mp3">Titel 3</li>
</ul>
</div>

<script>
const audio = document.getElementById('audio-element');
const playPauseBtn = document.getElementById('play-pause-btn');
const prevBtn = document.getElementById('prev-btn');
const nextBtn = document.getElementById('next-btn');
const seekBar = document.getElementById('seek-bar');
const playlist = document.getElementById('playlist');
let currentTrack = 0;

function loadTrack(index) {
const tracks = playlist.getElementsByTagName('li');
if (index >= 0 && index < tracks.length) {
currentTrack = index;
audio.src = tracks[currentTrack].getAttribute('data-src');
audio.load();
playPauseBtn.textContent = 'Play';
}
}

function playPause() {
if (audio.paused) {
audio.play();
playPauseBtn.textContent = 'Pause';
} else {
audio.pause();
playPauseBtn.textContent = 'Play';
}
}

playPauseBtn.addEventListener('click', playPause);

prevBtn.addEventListener('click', () => {
loadTrack(currentTrack - 1);
});

nextBtn.addEventListener('click', () => {
loadTrack(currentTrack + 1);
});

audio.addEventListener('timeupdate', () => {
const progress = (audio.currentTime / audio.duration) * 100;
seekBar.value = progress;
});

seekBar.addEventListener('input', () => {
const time = (seekBar.value / 100) * audio.duration;
audio.currentTime = time;
});

playlist.addEventListener('click', (e) => {
if (e.target.tagName === 'LI') {
const tracks = playlist.getElementsByTagName('li');
loadTrack([...tracks].indexOf(e.target));
playPause();
}
});

loadTrack(0);
</script>
</body>
</html>

In dieser Playlist-Version:

  1. Wir erstellen eine Liste von Titeln mit einer ungeordneten Liste.
  2. Wir fügen Vorheriges und Nächstes-Buttons für die Navigation hinzu.
  3. Das JavaScript verwaltet das Laden von Titeln, das Abspielen/Pausieren und das Wechseln zwischen Titeln.

Audio-Player-Methoden

Hier ist eine Tabelle der gängigen Audio-Player-Methoden und ihrer Beschreibungen:

Methode Beschreibung
play() Startet das Abspielen des Audios
pause() Pausiert das Audio
load() Lädt das Audio-Element neu
currentTime Holt oder setzt die aktuelle Wiedergabeposition in Sekunden
duration Holt die Gesamtlaufzeit des Audios in Sekunden
volume Holt oder setzt die Lautstärke (0.0 bis 1.0)
muted Holt oder setzt, ob das Audio stummgeschaltet ist
playbackRate Holt oder setzt die Wiedergabegeschwindigkeit

Und das war's! Du hast nun gelernt, wie man grundlegende und erweiterte HTML-Audio-Player erstellt, complete mit Visualisern und Playlists. Denke daran, dass Übung den Meister macht, also fürchte dich nicht, diese Beispiele zu experimentieren und anzupassen, um deinen Bedürfnissen zu entsprechen. Frohes Coden und möge deine Webseiten mit schöner Musik gefüllt sein!

Credits: Image by storyset