Meteor DOMException:无法解码音频数据

时间:2017-01-24 12:32:32

标签: javascript cordova audio meteor

编辑:我刚刚创建了一个新的Meteor项目并且它有效:D哇。但它仍然无法在我的核心项目上运行。看起来像我有不同的设置。

在我的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旁边安装任何软件包,但是卸载它也没有帮助。

2 个答案:

答案 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