在我的Meteor.js项目中,我有4个.mp3
- 位于public/sounds/xyz.mp3
的文件。
我将这些.mp3
加载到:
let soundRequest = new XMLHttpRequest();
soundRequest.open('GET', this._soundPath, true);
soundRequest.responseType = 'arraybuffer';
let $this = this;
soundRequest.onload = function () {
Core.getAudioContext().decodeAudioData(soundRequest.response, function (buffer) {
$this.source.buffer = buffer;
$this.source.loop = true;
$this.source.connect($this.panner);
});
};
soundRequest.send();
此工作位于google Chrome
,但是当我通过meteor run android-device
构建应用时,收到以下错误消息:DOMException: Unable to decode audio data
我想知道这是不是一个错误,因为加载.png
或.jpg
在移动版本中工作得很好。我没有在meteor add crosswalk
旁边安装任何软件包,但是卸载它也没有帮助。
答案 0 :(得分:5)
您不需要执行http请求即可获取本地资源。您可以参考本地网址。在Android设备上,路径是不同的。看到这段代码:
function getSound(file) {
var sound = "/sounds/"+file;
if (Meteor.isCordova) {
var s;
if (device.platform.toLowerCase() === "android") {
sfile = cordova.file.applicationDirectory.replace('file://', '') + 'www/application/app' + sound;
}
else {
sfile = cordova.file.applicationDirectory.replace('file://', '') + sound;
}
var s = new Media(
sfile,
function (success) {
console.log("Got sound "+file+" ok ("+sfile+")");
s.play();
},
function (err) {
console.log("Get sound "+file+" ("+sfile+") failed: "+err);
}
);
} else {
var a = new Audio(sound);
a.play();
}
}
在设备上,它会异步加载声音文件,然后播放它。在浏览器中,它只是加载并同步播放。
答案 1 :(得分:3)
Android设备不支持此Web API,但适用于Android的Chrome浏览器
检查此链接中的浏览器规范 https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/decodeAudioData