我正在尝试使用Web Audio API使声音在我的iPhone游戏上正常工作。问题在于该应用程序完全是客户端。我想将mp3存储在本地文件夹中(并且无需用户输入驱动),因此无法使用XMLHttpRequest读取数据。我一直在考虑使用FileSystem,但Safari不支持它。
还有其他选择吗?
编辑:感谢您的以下答复。不幸的是,音频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无法加载file:///sounds/beep-1.mp3。跨源请求仅支持HTTP。
未捕获的错误:NETWORK_ERR:XMLHttpRequest异常101
我了解读取本地文件带来的安全风险,但是肯定可以在您自己的域内进行吗?
最佳答案
我遇到了同样的问题,并且发现了一个非常简单的解决方案。
audio_file.onchange = function(){
var files = this.files;
var file = URL.createObjectURL(files[0]);
audio_player.src = file;
audio_player.play();
};
<input id="audio_file" type="file" accept="audio/*" />
<audio id="audio_player" />
您可以在这里进行测试:
http://jsfiddle.net/Tv8Cm/