How can I load only waveform and wait to user click 'play' to download the audio on Wavesurfer-js?

前端 未结 1 2021
情深已故
情深已故 2021-02-14 10:22

On my server I use Audiowaveform to generate JSON data from my audio files.

On frontend I use Wavesurfer-JS to draw the waveform based on previous JSON data.

The

1条回答
  •  无人共我
    2021-02-14 10:44

    Took me a while to hack around the wavesurfer js code to find out how I can make it draw without loading the song already :P

    Setting the peaks in the backend variable and calling drawBuffer did the trick, combining that with some play button logic and we get the following code:

    //Create new wavesurfer
    wavesurfer = WaveSurfer.create({
        container: '#waveform',
        backend: 'MediaElement',
        mediaType:'audio',
        normalize: true,
        barWidth: 3
    });
    
    //Set song
    wavesurfer.song = "http://www.stephaniequinn.com/Music/Allegro%20from%20Duet%20in%20C%20Major.mp3"
    
    //Set peaks
    wavesurfer.backend.peaks = [0.0218, 0.0183, 0.0165, 0.0198, 0.2137, 0.2888, 0.2313, 0.15, 0.2542, 0.2538, 0.2358, 0.1195, 0.1591, 0.2599, 0.2742, 0.1447, 0.2328, 0.1878, 0.1988, 0.1645, 0.1218, 0.2005, 0.2828, 0.2051, 0.1664, 0.1181, 0.1621, 0.2966, 0.189, 0.246, 0.2445, 0.1621, 0.1618, 0.189, 0.2354, 0.1561, 0.1638, 0.2799, 0.0923, 0.1659, 0.1675, 0.1268, 0.0984, 0.0997, 0.1248, 0.1495, 0.1431, 0.1236, 0.1755, 0.1183, 0.1349, 0.1018, 0.1109, 0.1833, 0.1813, 0.1422, 0.0961, 0.1191, 0.0791, 0.0631, 0.0315, 0.0157, 0.0166, 0.0108];
    
    //Draw peaks
    wavesurfer.drawBuffer();
    
    //Variable to check if song is loaded
    wavesurfer.loaded = false;
    
    //Load song when play is pressed
    wavesurfer.on("play", function () {
        if(!wavesurfer.loaded) {
            wavesurfer.load(wavesurfer.song, wavesurfer.backend.peaks);
        }
    });
    
    //Start playing after song is loaded
    wavesurfer.on("ready", function () {
        if(!wavesurfer.loaded) {
            wavesurfer.loaded = true;
            wavesurfer.play();
        }
    });
    

    Make sure to remove the unnecessary tag from the html, browsers seem to download all audio files in those tags on load and attributes like preload=false seem to be ignored...

    0 讨论(0)
提交回复
热议问题