个性化阅读
专注于IT技术分析

如何使用Wavesurfer.js从JavaScript中的音频文件生成音频波(音频频谱)

本文概述

“声波是由通过空气等介质传播的能量运动引起的干扰形式”。只是开个玩笑, 我们不是那么技术!如果你正在某个需要向用户播放某些音频的平台上工作, 例如出售一些音频文件, 那么展示其波形非常棒, 这样用户将对音频的结构和平台印象深刻可以做。愿意在浏览器中制作它吗?那么Wavesurfer.js是适合你的工具。

使用wavesurfer.js, 你可以创建任何东西, 从HTML5音频播放器到复杂的DJ应用程序, 但是在这种情况下, 我们仅向你展示如何创建基本的波形查看器和具有3个单个按钮的简单音频播放器, 即播放, 暂停停下来

1.下载并包含Wavesurfer.js

Wavesurfer.js是可自定义的音频波形可视化, 建立在Web Audio API和HTML5 Canvas之上。根据你的工作方式, 你可以通过两种方式加载该库。第一个方法是简单地从CDN或本地副本中将脚本包括在文档中:

<!-- Load using a free CDN -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.3.7/wavesurfer.min.js"></script>

<!-- Or load it from a local copy -->
<script src="./path-to/wavesurfer.min.js"></script>

如果要使用模块捆绑程序, 例如browserify, webpack等, 则需要使用支持此方法的版本。你将需要使用以下命令在你的项目中安装模块:

npm install wavesurfer.js@2.0.0-beta01

然后, 你将可以使用require(” wavesurfer.js”);要求该模块。有关该库的更多信息, 请访问官方网站或Github上的官方存储库。

2.使用库

Waversurfer真的很容易使用。随着2.0版的介绍, 现在你可以将其与捆绑器一起使用, 而不仅是直接在窗口中使用:

在浏览器中使用VanillaJS

你感兴趣的方法是create方法。唯一需要的参数是container。它可以是唯一的CSS3选择器, 也可以是DOM元素。但是, 你也可以传递任意数量的选项。创建实例后, 你可以使用load方法加载音频文件以创建其波形。音频URL应该来自你自己的域, 或者来自另一个域中支持CORS标头的歌曲的URL:

<!-- a div where the div will be placed -->
<div id="audio-spectrum"></div>

<script>
    // Create an instance of wave surfer with its configuration
    var Spectrum = WaveSurfer.create({
        container: '#audio-spectrum', // Add some color to the audio spectrum
        progressColor: "#03a9f4"
    });
    
    Spectrum.on("ready", function(){
        // Do something when the file has been loaded
        
        // Do whatever you need to do with the player
        Spectrum.play();
        Spectrum.pause();
        Spectrum.stop();
    });

    // Load the audio file from your own domain !
    Spectrum.load('audio-file.mp3');
</script>

该插件在浏览器中显示全局变量WaveSurfer, 因此一旦脚本加载即可使用。

使用模块捆绑器

Wavesurfer也很容易与webpack, browserify等一起使用。只需要模块而不是使用全局变量即可:

<!-- a div where the div will be placed -->
<div id="audio-spectrum"></div>

<script>
    // Require the wavesurfer module
    var WaveSurfer = require("wavesurfer.js");

    // Create an instance of wave surfer with its configuration
    var Spectrum = WaveSurfer.create({
        container: '#audio-spectrum', // Add some color to the audio spectrum
        progressColor: "#03a9f4"
    });
    
    Spectrum.on("ready", function(){
        // Do something when the file has been loaded

        // Do whatever you need to do with the player
        Spectrum.play();
        Spectrum.pause();
        Spectrum.stop();
    });

    // Load the audio file from your own domain !
    Spectrum.load('audio-file.mp3');
</script>

最后的例子

以下文档已准备好进行测试, 你只需要提供有效的音频文件即可。在这种情况下, 我们将在浏览器中呈现一个简单的响应音频频谱, 并提供3个控件(即播放, 暂停和停止)。通过CDN包含Wavesurfer的核心文件:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>AudioSpectrum in JavaScript</title>
    </head>
    <body>
        <!-- Create a div where the audio waves will be shown --> 
        <div id="audio-spectrum"></div>

        <!-- Create action buttons -->
        <input type="button" id="btn-play" value="Play" disabled="disabled"/>
        <input type="button" id="btn-pause" value="Pause" disabled="disabled"/>
        <input type="button" id="btn-stop" value="Stop" disabled="disabled" />

        <!-- Load the wavesurferscript , in this case from a CDN -->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.3.7/wavesurfer.min.js"></script>

        <script>
            // Store the 3 buttons in some object
            var buttons = {
                play: document.getElementById("btn-play"), pause: document.getElementById("btn-pause"), stop: document.getElementById("btn-stop")
            };

            // Create an instance of wave surfer with its configuration
            var Spectrum = WaveSurfer.create({
                container: '#audio-spectrum', progressColor: "#03a9f4"
            });

            // Handle Play button
            buttons.play.addEventListener("click", function(){
                Spectrum.play();

                // Enable/Disable respectively buttons
                buttons.stop.disabled = false;
                buttons.pause.disabled = false;
                buttons.play.disabled = true;
            }, false);

            // Handle Pause button
            buttons.pause.addEventListener("click", function(){
                Spectrum.pause();

                // Enable/Disable respectively buttons
                buttons.pause.disabled = true;
                buttons.play.disabled = false;
            }, false);


            // Handle Stop button
            buttons.stop.addEventListener("click", function(){
                Spectrum.stop();

                // Enable/Disable respectively buttons
                buttons.pause.disabled = true;
                buttons.play.disabled = false;
                buttons.stop.disabled = true;
            }, false);


            // Add a listener to enable the play button once it's ready
            Spectrum.on('ready', function () {
                buttons.play.disabled = false;
            });
            
            // If you want a responsive mode (so when the user resizes the window)
            // the spectrum will be still playable
            window.addEventListener("resize", function(){
                // Get the current progress according to the cursor position
                var currentProgress = Spectrum.getCurrentTime() / Spectrum.getDuration();

                // Reset graph
                Spectrum.empty();
                Spectrum.drawBuffer();
                // Set original position
                Spectrum.seekTo(currentProgress);

                // Enable/Disable respectively buttons
                buttons.pause.disabled = true;
                buttons.play.disabled = false;
                buttons.stop.disabled = false;
            }, false);

            // Load the audio file from your domain !
            Spectrum.load('audio-file.mp3');
        </script>
    </body>
</html>                                                                                                                                                                                                                                                                                                        

编码愉快!

赞(1)
未经允许不得转载:srcmini » 如何使用Wavesurfer.js从JavaScript中的音频文件生成音频波(音频频谱)

评论 抢沙发

评论前必须登录!