gpt4 book ai didi

android - MediaPlayer:在使用Phaser 2.4.6的Cordova 6.1.1中出现错误(1,-2147483648)

转载 作者:行者123 更新时间:2023-12-03 01:54:24 24 4
gpt4 key购买 nike

我正在尝试在使用Cordova 6.1.1和Phaser.io 2.4.6构建的Android游戏中播放音频文件。媒体无法在低于API 21左右的Android版本上播放,并显示错误消息

04-21 21:48:57.546 9659-9671/com.jtronlabs.birdu E/MediaPlayer: error (1, -2147483648)
04-21 21:48:57.546 9659-9672/com.jtronlabs.birdu E/MediaPlayer: Error (1,-2147483648)

我已经阅读了一些答案,但没有任何帮助。我使用Phaser的Loader类加载音频:
this.load.audio('background-music', this.arrayOfCompatibleMusicFileNames('the_plucked_bird') ); 

...
//Phaser has support to load in multiple types of audio formats if the first supplied in the array is not compatible with the browser.
arrayOfCompatibleMusicFileNames: function(key){
//old versions of android don't play music, they require an absolute pathname (instead of relative). This is a generic solution
//https://stackoverflow.com/questions/4438822/playing-local-sound-in-phonegap?lq=1
var path = window.location.pathname;
path = path.substr( 0, path.lastIndexOf("/")+1 ); //need to remove 'index.html' from the end of pathname
var aud = path+'assets/audio/';

//aud = '/android_res/raw/'
var wav = aud + 'wav/';
var ogg = aud + 'ogg/';
var mp3 = aud + 'mp3/';

console.log(mp3+key+".mp3");

return [mp3+key+".mp3",ogg+key+".ogg",wav+key+".wav"];
},

在浏览器和新版本的Android上均可使用。在较旧的版本上,我尝试添加多个 formatsabsolute path,将 permissions外部写入$ PROJECT_ROOT / platforms / android / AndroidManifest.xml并将文件从/ www移动到 $PROJECT_ROOT/platforms/android/res/raw

一无所有。关于可能出什么问题的任何想法?

编辑:当音频文件在'res'文件夹中时,我这样引用它们:
arrayOfCompatibleMusicFileNames: function(key){
return ['/android_res/raw/'+key+".ogg"];
}

它适用于API 21,但不适用于19或更低版本(就像第一个函数一样)。

最佳答案

我已经使用cordova-plugin-media使音频工作了。

var path = window.location.pathname;
path = path.substr( 0, path.lastIndexOf("/")+1 ); //need to remove 'index.html' from the end of pathname
var aud = path+'assets/audio/';

var ogg = aud + 'ogg/' + key + ".ogg";

//works!
var snd = new Media(ogg);
snd.play();

但是,我发现执行此操作的“正常”方法是导致不良行为的原因。
//does not work... Phaser uses this internally
var snd = new Audio(ogg);
snd.play();

看来我将不得不编写代码来测试它是浏览器还是Cordova,并分别使用“媒体”或“音频”。

更新:我编写了该代码,它使事情变得混乱,但是可以工作。如今,我使用 Crosswalk,并且WebAudio可在所有设备上使用。无需媒体插件和我的代码中的额外大小写检查。

关于android - MediaPlayer:在使用Phaser 2.4.6的Cordova 6.1.1中出现错误(1,-2147483648),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36783554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com