Javascript 将外部音频文件提取到web音频API缓冲区-cors错误?

Javascript 将外部音频文件提取到web音频API缓冲区-cors错误?,javascript,fetch,web-audio-api,Javascript,Fetch,Web Audio Api,我正在做一个项目,我希望能从xeno canto档案中随机选择,创建一个“虚拟黎明合唱团” 我用javascript和WebAudioAPI来实现这一点。我有一个样本及其URL的列表,例如 xeno canto.org/sounds/upload/YQNGFTBRRT/XC144576-ABTO_BWRNWR_2013年4月15日_Harter.mp3' 我要把它加载到音频缓冲区。这是我在javascript中的“loadAudio”函数。我已经成功地在其他项目中使用它来获取我的音频-尽管这是来

我正在做一个项目,我希望能从xeno canto档案中随机选择,创建一个“虚拟黎明合唱团”

我用javascript和WebAudioAPI来实现这一点。我有一个样本及其URL的列表,例如

xeno canto.org/sounds/upload/YQNGFTBRRT/XC144576-ABTO_BWRNWR_2013年4月15日_Harter.mp3'

我要把它加载到音频缓冲区。这是我在javascript中的“loadAudio”函数。我已经成功地在其他项目中使用它来获取我的音频-尽管这是来自我自己托管的文件

function loadAudio(url, loop, done) {
    fetch(url, {'mode': 'no-cors'})
      .then(response => response.arrayBuffer())
      .then(arrayBuffer => context.decodeAudioData(arrayBuffer))
      .then(audioBuffer => {
        console.log('audio ' + url + ' loaded')
        var sourceNode = context.createBufferSource()
        sourceNode.buffer = audioBuffer
        done(null, sourceNode)
        sourceNode.start()
        sourceNode.loop = loop
      })
  }  
但是在调用这个函数时,我得到了一个错误

获取API无法加载 xeno-canto.org/sounds/upload/YQNGFTBRRT/XC144576-ABTO_BWRNWR_2013年4月15日_Harter.mp3。 请求的服务器上不存在“Access Control Allow Origin”标头 资源。因此,不允许访问“源本地主机:3000”。如果 如果不透明的响应满足您的需要,请将请求的模式设置为 “无cors”以获取禁用cors的资源

我尝试在函数中包含
fetch(url,**{'mode':'no cors'}**)
,但后来我得到了错误

(索引):1未捕获(承诺中)类型错误:无法获取

我猜也是同样的错误,只是“不透明”的反应

谁能给我指出正确的方向吗?或者根本不可能加载我自己服务器上没有的音频?我看到一个项目从SoundCloud中抓取了随机音频,没有任何问题(很抱歉,不能作为新手发布链接,这是sebpiq的示例(在github上)),但我承认我无法编写代码

请注意上面我不得不从链接的开头删除http元素,因为我还不允许发布链接


谢谢

难道不能加载我自己的服务器上没有的音频吗?-是的,这就是问题所在。如果服务器未配置为允许访问,则别无选择。您可以在自己的服务器上创建一个代理,而不是实际托管内容,因为这些访问规则在浏览器中,不适用于服务器端代码。啊,谢谢!通过谷歌搜索,我可以在任何地方找到cors,这让我可以代理解决这个问题。