Ich versuche, Audio-Dateien auf einem Android-Spiel mit Cordova 6.1.1 und Phaser.io 2.4.6 zu spielen. Die Medien spielen nicht auf Android-Versionen kleiner als API 21 oder so, und gibt den FehlerMediaPlayer: Fehler (1, -2147483648) in Cordova 6.1.1 mit Phaser 2.4.6
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)
ich einige SO Antworten gelesen haben, und nichts geholfen hat. Ich lade in Ton mit Phaser der Loader-Klasse:
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"];
},
Dieser im Browser arbeitet, und auf neuere Versionen von Android. Bei älteren Versionen habe ich versucht, mehrere formats, die absolute path, externe schreiben permissions zu $ PROJECT_ROOT/platforms/android/AndroidManifest.xml, und Verschieben der Dateien von/www zu $PROJECT_ROOT/platforms/android/res/raw.
Alles für nichts. Irgendwelche Ideen, was könnte schief gehen?
Edit: Wenn die Audio-Dateien in der 'res' Ordner sind, ich auf sie verweisen als solche:
arrayOfCompatibleMusicFileNames: function(key){
return ['/android_res/raw/'+key+".ogg"];
}
die auf API arbeitet 21 aber nicht 19 oder unter (genau wie die erste Funktion).