尝试在 Phaser 中加载 .mp3 文件时出现异常

Exception when trying to load .mp3 file in Phaser

我正在尝试在我的 preload() 函数中加载 very short .mp3 file,如下所示:

game.load.audio('sword', '$assetPath/swordraw.mp3', true);

一旦执行此代码,它就会崩溃并出现错误

Breaking on exception: Invalid arguments(s)

指向 Phaser LoaderfileError 函数中的 console.warn,如下所示:

fileError(int index) {

  this._fileList[index]['loaded'] = true;
  this._fileList[index]['error'] = true;

  this.onFileError.dispatch([this._fileList[index]['key'], this._fileList[index]]);

  window.console.warn("Phaser.Loader error loading file: " 
  + this._fileList[index]['key'] + ' from URL ' + this._fileList[index]['url']);

    this.nextFile(index, false);

}

通过 DartEditor 的调试器,我看到由于某种原因 _fileList[10]['url'](音频文件的 URL)在这里被拾取为 null,这就是异常的原因(可以't concat. null 到一个字符串)但是为什么 url 为空?

我已经检查了明显的:文件名是正确的,并且 assetPath 肯定是正确初始化的,因为在此加载之前所有其他文件(图像)都正常。所以这似乎是某种音频文件问题,但我看不出问题所在。

哦,看来我找到罪魁祸首了……https://github.com/playif/play_phaser/blob/ae6a08e5a6eb159149fac01e5831fd8572223a44/lib/loader/loader.dart#L1447

Loader 正在设置有关新添加文件的内容时,如果该文件是音频文件,它会调用此 getAudioUrl...

getAudioURL(urls) {

//String extension;

if (urls is String) {
  urls = [urls];
}

for (var i = 0; i < urls.length; i++) {
  var url = urls[i];
  //extension = urls[i].toLowerCase();
  //extension = extension.substr((Math.max(0, extension.lastIndexOf(".")) || Infinity) + 1);

  if (this.game.device.canPlayAudio(url.split('.').last)) {
    //return urls[i];
    return url;
  }

}

return null;

}

...您可能从上面了解到,如果设备无法播放提供的文件类型,该方法似乎 return null。那么,Dartium 不能播放 .mp3 吗?