我一直在开发一个在线应用程序,它允许用户点击并操作 mp3 文件,我正在尝试将本地文件从我的计算机加载到 wavesurfer 对象中,但我在 chrome 中不断收到此错误:



我尝试将 HTML 和 mp3 文件放在多台计算机上的多个不同文件夹中,但似乎没有任何效果。这是我的代码:

<body>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.2.3/wavesurfer.min.js"></script>
    <div id="waveform"></div>

    <script>
        var wavesurfer = WaveSurfer.create({
            container: '#waveform',
            waveColor: 'darkorange',
            progressColor: 'blue',
            height: 64,
            backend: 'MediaElement'
        });


        //setRequestHeader('Origin', document.domain);
        //wavesurfer.load("http://ia902606.us.archive.org/35/items/shortpoetry_047_librivox/song_cjrg_teasdale_64kb.mp3");
        var song = "clippedJaco.mp3";
        wavesurfer.load(song);
        wavesurfer.on('ready', function () {wavesurfer.play();});
    </script>
</body>

添加“MediaElement”后端时,会加载 mp3,但不会生成波形。非常感谢任何帮助,谢谢!

最佳答案

据我了解,这是因为出于安全原因,浏览器会限制从脚本内发起的跨域 HTTP 请求。这意味着使用 XMLHttpRequest 和 Fetch API 的 Web 应用程序只能从加载应用程序的同一来源请求 HTTP 资源,除非来自其他来源的响应包含正确的 CORS header 。

资料来源:Cross-Origin Resource Sharing (CORS)

解决此问题的一种方法是在本地主机中托管您的 Web 应用程序。您可以使用 this 开始。然后在 index.html 文件中调用 wavesurfer.js 并创建一个容器来显示波形。



<!doctype html>
<!-- You can use this link as well to call wavesurfer.js. This is what's given on their updated documentation-->
<!-- <script src="https://unpkg.com/wavesurfer.js"></script> -->

<head>
  <title>Test Website</title>
</head>

<body>
  <!-- Adding wavesurfer.js script -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.2.3/wavesurfer.min.js"></script>

  <h1>Wavesurfer Test</h1>

  <!-- !-- Create a container where the waveform is to appear-->
  <div id="waveform"></div>

  <script src="script/main.js" defer="defer"></script>
  <script src="script/test.js"></script>
</body>

</html>


然后添加一个脚本来处理 wavesurfer 实例。就我而言,它是 test.js


//Creating  a wavesurfer instance, passing the container selector along with some options like progress color and wave color
var wavesurfer = WaveSurfer.create({
  container: '#waveform',
  waveColor: 'violet',
  progressColor: 'purple'
});

//Loading the audio file you want to play
wavesurfer.load('audio/LOVE_s.mp3');

// You can also load wav files if you want
//wavesurfer.load('audio/songaudio.wav');

//This is the event you play the wavesurver instance i.e when wavesurfer ready event
wavesurfer.on('ready', function() {
  wavesurfer.play();
});


这样我在将本地音频文件加载到 wavesurfer 时没有任何问题。
希望这可以帮助。

关于javascript - wavesurfer.js 不会加载本地文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42677632/

10-13 07:46
查看更多