我正在使用Web Audio API在iPhone游戏上获得声音。问题是这个程序完全是客户端。我想将我的mp3存储在本地文件夹中(而不是用户输入驱动),所以我不能使用XMLHttpRequest来读取数据。我正在研究使用FileSystem,但Safari不支持它。
有什么办法吗?
编辑:感谢以下回复。不幸的是,Audio API对于游戏来说是非常慢的。我有这个工作,延迟只会使用户体验不可接受。为了澄清,我需要的是如此 –
var request = new XMLHttpRequest(); request.open('GET','file:///./../sounds/beep-1.mp3',true); request.responseType = 'arraybuffer'; request.onload = function() { context.decodeAudioData(request.response,function(buffer) { dogBarkingBuffer = buffer; },onError); } request.send();
但这给我的错误 –
XMLHttpRequest无法加载文件:///sounds/beep-1.mp3。只有HTTP支持交叉原始请求。
未捕获错误:NETWORK_ERR:XMLHttpRequest异常101
通过阅读本地文件了解安全风险,但是在您自己的域内肯定可以吗?
解决方法
我有同样的问题。我发现这个非常简单的解决方案。
JS:
audio_file.onchange = function(){ var files = this.files; var file = URL.createObjectURL(files[0]); audio_player.src = file; audio_player.play(); };
HTML:
<input id="audio_file" type="file" accept="audio/*" /> <audio id="audio_player" />
你可以在这里测试:
http://jsfiddle.net/Tv8Cm/