Profesionální internetový závislák • Herní nadšenec • Technologický tvůrce
Profesionální internetový závislák • Herní nadšenec • Technologický tvůrce

Vytvořte si audiovizualizér pomocí základního HTML, CSS a JavaScriptu

Jak krok za krokem vytvořit horizontální vizualizér zvuku od nuly pomocí základního HTML, CSS a JavaScriptu!
Tuto stránku pro vaše pohodlí přeložili z angličtiny moji vysoce motivovaní stážisté v oblasti umělé inteligence. Stále se učí, takže se mohlo stát, že se vyskytnou nějaké chyby. Nejpřesnější informace naleznete v anglické verzi.
Domov Blog Vytvořte si audiovizualizér pomocí základního HTML, CSS a JavaScriptu

Vezměte prosím na vědomí, že tento blogový příspěvek byl publikován v říjnu 2020, takže v závislosti na době, kdy jej čtete, mohou být některé části zastaralé. Bohužel nemohu tyto příspěvky vždy udržovat plně aktuální, aby informace zůstaly přesné.

Toto je podrobný návod, jak vytvořit horizontální vizualizér zvuku od nuly pomocí základního HTML, CSS a JavaScriptu.

Podívejte se na video

Prosím, podívejte se na video, kde to vysvětlím podrobněji.

Úplný zdrojový kód

Níže je uveden kompletní zdrojový kód pro horizontální vizualizér zvuku.

<!-- License MIT, Author Special Agent Squeaky (specialagentsqueaky.com) --> <!doctype html> <html lang="en"> <head> <title>My Eq</title> <style> body { overflow: hidden; } .background { position: absolute; top: -50px; right: -50px; bottom: -50px; left: -50px; background-image: url("background.jpg"); background-position: center center; background-size: cover; filter: blur(15px); } .track-title { position: absolute; top: 200px; right: 0; left: 0; color: white; font-family: Calibri; font-size: 100px; text-align: center; } .visualizer-container { position: absolute; bottom: 450px; right: 0; left: 0; text-align: center; } .visualizer-container__bar { display: inline-block; background: white; margin: 0 2px; width: 25px; } </style> </head> <body> <audio src="track.mp3" controls></audio> <div class="background"></div> <div class="track-title">Awesome song</div> <div class="visualizer-container"></div> <script> (function () { // The number of bars that should be displayed const NBR_OF_BARS = 50; // Get the audio element tag const audio = document.querySelector("audio"); // Create an audio context const ctx = new AudioContext(); // Create an audio source const audioSource = ctx.createMediaElementSource(audio); // Create an audio analyzer const analayzer = ctx.createAnalyser(); // Connect the source, to the analyzer, and then back the the context's destination audioSource.connect(analayzer); audioSource.connect(ctx.destination); // Print the analyze frequencies const frequencyData = new Uint8Array(analayzer.frequencyBinCount); analayzer.getByteFrequencyData(frequencyData); console.log("frequencyData", frequencyData); // Get the visualizer container const visualizerContainer = document.querySelector(".visualizer-container"); // Create a set of pre-defined bars for( let i = 0; i < NBR_OF_BARS; i++ ) { const bar = document.createElement("DIV"); bar.setAttribute("id", "bar" + i); bar.setAttribute("class", "visualizer-container__bar"); visualizerContainer.appendChild(bar); } // This function has the task to adjust the bar heights according to the frequency data function renderFrame() { // Update our frequency data array with the latest frequency data analayzer.getByteFrequencyData(frequencyData); for( let i = 0; i < NBR_OF_BARS; i++ ) { // Since the frequency data array is 1024 in length, we don't want to fetch // the first NBR_OF_BARS of values, but try and grab frequencies over the whole spectrum const index = (i + 10) * 2; // fd is a frequency value between 0 and 255 const fd = frequencyData[index]; // Fetch the bar DIV element const bar = document.querySelector("#bar" + i); if( !bar ) { continue; } // If fd is undefined, default to 0, then make sure fd is at least 4 // This will make make a quiet frequency at least 4px high for visual effects const barHeight = Math.max(4, fd || 0); bar.style.height = barHeight + "px"; } // At the next animation frame, call ourselves window.requestAnimationFrame(renderFrame); } renderFrame(); audio.volume = 0.10; audio.play(); })(); </script> </body> </html>

Napsáno uživatelem Special Agent Squeaky. Poprvé publikováno 20. 10. 2020. Naposledy aktualizováno 20. 10. 2020.

📺 Podívejte se na nejnovější video od Squeakyho!

Jak přidat jednoduché titulky v reálném čase k vašemu živému vysílání