2016-04-22 7 views
0

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).

Antwort

0

Ich habe das Audio funktioniert mit dem 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(); 

Allerdings entdeckte ich die "normale" Art, dies zu tun ist, was das schlechte Verhalten verursacht.

//does not work... Phaser uses this internally 
var snd = new Audio(ogg); 
snd.play(); 

Es scheint, muss ich Code schreiben, wird zu testen, ob es Browser oder cordova ist, bzw. ‚Medien‘ oder ‚Audio‘ zu verwenden.

Update: Ich schrieb diesen Code und es macht Dinge unordentlich, aber funktioniert. Heutzutage verwende ich Crosswalk, und WebAudio funktioniert auf allen Geräten. Keine Notwendigkeit für das Media-Plugin und zusätzliche Überprüfung in meinem Code.