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