Esistono molte librerie gratuite per il tuo scopo, ti mando le prime due che ho trovato.
Audiomotion-analyzer e Wavesurfer.

codice:
<!DOCTYPE html>
<html lang="it-IT">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        canvas {
            width: 300px;
            height: 65px;
        }

        .audioblock {
            width: 300px;
        }

        #waveform {
            width: 300px;
        }
    </style>
</head>

<body>

    <div class="audioblock">
        <div id="container"></div>
        <audio src="Alpha.mp3" id="audio" controls crossorigin></audio>
    </div>

    <div id="waveform"></div>
    <button id="playpause">Play / Pause</button>

    <script src="https://unpkg.com/wavesurfer.js/dist/wavesurfer.js"></script>
  
  <script type="module">
        // load module from Skypack CDN
        import AudioMotionAnalyzer from 'https://cdn.skypack.dev/audiomotion-analyzer?min'

        window.addEventListener('DOMContentLoaded', () => {
            // audio source
            const audioEl = document.getElementById('audio')

            // instantiate analyzer
            const audioMotion = new AudioMotionAnalyzer(
                document.getElementById('container'),
                {
                    source: audioEl,
                    height: window.innerHeight - 50,
                    mode: 5,
                    gradient: 'prism', //classic / prism / rainbow
                    lineWidth: 2,
                    fillAlpha: .5,
                    barSpace: .5,
                    showLeds: false
                }
            )

            // Init wavesurfer
            let wavesurfer = WaveSurfer.create({
                container: '#waveform',
                waveColor: '#A8DBA8',
                progressColor: '#3B8686',
                backend: 'MediaElement',
                barWidth: 2,
                barHeight: 1, // the height of the wave
                barGap: null
            });
            // error console
            wavesurfer.on('error', function (e) {
                console.warn(e);
            });
            // Load audio from URL
            wavesurfer.load('./Abba.mp3');
            // event button
            document.getElementById('playpause')
                .addEventListener('click', () => {
                    wavesurfer.playPause();
                })
        })

    </script>

</body>

</html>