我正在研究这款可视化工具http://trif.it,它在Chrome稳定版(41.x)上运行良好但由于Chrome浏览器的更改方式,因此停止在Chrome Dev,Beta和Canary(42.x以上版本)中工作和之前的Firefox)处理要分析的音频源。
这是有问题的代码。它应该可以正常工作,直到您删除处理音频路由的最后一部分的注释。
var audioElement = new Audio();
var clientId = "xxxxx";
var oReq = new XMLHttpRequest();
//oReq.onload = reqListener;
oReq.open("get", "http://api.soundcloud.com/tracks/194245583.json?client_id=" + clientId, true);
oReq.send();
oReq.onreadystatechange = function() {
if (oReq.readyState != 4) { return; }
var serverResponse = JSON.parse(oReq.responseText);
console.log(serverResponse);
audioElement.src = serverResponse.stream_url + "?client_id=" + clientId;
audioElement.autoplay = true;
audioElement.preload = true;
};
/*var audioContext = new AudioContext();
var audioSource = audioContext.createMediaElementSource(audioElement);
var audioAnalyser = audioContext.createAnalyser();
var audioGain = audioContext.createGain();
audioGain.gain.value = 1.0;
audioSource.connect(audioAnalyser);
audioAnalyser.connect(audioGain);
audioGain.connect(audioContext.destination);*/
我最初在Chromium bug跟踪器(https://code.google.com/p/chromium/issues/detail?id=462998)上发布了一个错误/请求,但得到了一个答案,从现在开始需要在标题中包含CORS,以便分析任何媒体资源(或通过{ {1}})和Soundcloud以及我现在在网站上使用的shoutcast流并没有提供。我总是可以使用CORS代理,但也许您知道一种解决方法或者今年某些时候计划使用CORS标头,因为许多网站很快就会遇到与我相同的问题?
感谢。
答案 0 :(得分:4)
添加:
audioElement.crossOrigin = "anonymous";
在那里的某个地方,在设置源之前,应该可以正常工作。
答案 1 :(得分:1)
这是出于跨域安全的原因,不太可能改变。不确定SoundCloud等是否正在计划CORS访问。