HTML - Lettore Audio

Benvenuti, aspiranti sviluppatori web! Oggi ci immergeremo nel mondo emozionante dei lettori audio HTML. Entro la fine di questo tutorial, sarete in grado di creare il vostro propre lettore audio personalizzato e addirittura aggiungere alcuni effetti visivi. Allora mettiamoci i cappelli da programmatori e iniziamo questo viaggio musicale!

HTML - Audio Player

Lettore Audio Locale con Visualizzatore

Le Basi del Lettore Audio HTML

Prima di tuffarci nella creazione di un lettore audio sfizioso, iniziiamo con le basi. HTML5 ha introdotto l'elemento <audio>, che rende facilissimo aggiungere audio alle vostre pagine web. Ecco un esempio semplice:

<audio controls>
<source src="your-audio-file.mp3" type="audio/mpeg">
Il tuo browser non supporta l'elemento audio.
</audio>

In questo codice:

  • L'elemento <audio> crea un lettore audio.
  • L'attributo controls aggiunge i controlli di riproduzione, pausa e volume.
  • L'elemento <source> specifica il file audio da riprodurre.
  • Includiamo un messaggio di fallback per i browser che non supportano l'elemento <audio>.

Creazione di un Lettore Audio Personalizzato

Ora creiamo un lettore audio più personalizzato. Useremo HTML, CSS e JavaScript per costruirlo:

<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lettore Audio Personalizzato</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 = 'Pausa';
} 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>

Dividiamo questo codice:

  1. Creiamo un contenitore <div> per il nostro lettore personalizzato.
  2. Dentro, abbiamo un elemento <audio> (senza controlli), un pulsante play/pause e una barra di ricerca.
  3. Nel JavaScript: -当我们点击按钮时切换播放/暂停。 -当音频播放时更新进度条。 -允许通过点击进度条进行搜索。

Aggiunta di un Visualizzatore

Ora aggiungiamo un semplice visualizzatore per rendere il nostro lettore più coinvolgente. Useremo l'API Web Audio per questo:

<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lettore Audio con Visualizzatore</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');

// Configurazione contesto audio
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
const analyser = audioContext.createAnalyser();
const source = audioContext.createMediaElementSource(audio);
source.connect(analyser);
analyser.connect(audioContext.destination);

// Funzionalità play/pause
playPauseBtn.addEventListener('click', () => {
if (audioContext.state === 'suspended') {
audioContext.resume();
}
if (audio.paused) {
audio.play();
playPauseBtn.textContent = 'Pausa';
} else {
audio.pause();
playPauseBtn.textContent = 'Play';
}
});

// Funzionalità barra di ricerca
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;
});

// Visualizzatore
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 questa versione migliorata:

  1. Aggiungiamo un elemento <canvas> per il nostro visualizzatore.
  2. Configuriamo un contesto audio e un analizzatore utilizzando l'API Web Audio.
  3. La funzione drawVisualizer crea una visualizzazione a barre delle frequenze audio.

Lettore Audio con Playlist

Ora creiamo un lettore che può gestire più tracce:

<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lettore Audio con 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">Precedente</button>
<button id="play-pause-btn">Play</button>
<button id="next-btn">Successivo</button>
<input type="range" id="seek-bar" value="0">
<ul id="playlist">
<li data-src="song1.mp3">Canzone 1</li>
<li data-src="song2.mp3">Canzone 2</li>
<li data-src="song3.mp3">Canzone 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 = 'Pausa';
} 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 questa versione con playlist:

  1. Creiamo una lista di tracce utilizzando un elenco non ordinato.
  2. Aggiungiamo pulsanti per la navigazione tra le tracce.
  3. Il JavaScript gestisce il caricamento delle tracce, la riproduzione/pausa e la navigazione tra le tracce.

Metodi del Lettore Audio

Ecco una tabella dei metodi comuni del lettore audio e delle loro descrizioni:

Metodo Descrizione
play() Avvia la riproduzione dell'audio
pause() Mette in pausa l'audio
load() Ricarica l'elemento audio
currentTime Ottiene o imposta la posizione di riproduzione corrente in secondi
duration Ottiene la durata totale dell'audio in secondi
volume Ottiene o imposta il volume (da 0.0 a 1.0)
muted Ottiene o imposta se l'audio è silenziato
playbackRate Ottiene o imposta la velocità di riproduzione

Eccovi! Ora avete imparato a creare lettori audio HTML di base e avanzati, completi di visualizzatori e playlist. Ricordate, la pratica fa la perfezione, quindi non avete paura di sperimentare e personalizzare questi esempi per adattarli alle vostre esigenze. Buon codice e che le vostre pagine web siano piene di bellissima musica!

Credits: Image by storyset