PhoneGap: esecuzione di file sonori multipiattaforma
Lavorando con PhoneGap mi sono imbattuto in un problema singolare: cercando di avviare l’esecuzione di un file .Mp3 locale utilizzando le API del framework, lo stesso codice funzionava correttamente su iOS ma non veniva eseguito su Android .
Il sorgente era una cosa del genere:
[sourcecode lang=”java”]
var audiosource = “/file.mp3”;
mp3file = new Media(audiosource,
function() {
alert(“playAudio():Audio Success”);
},
function(err) {
alert(err);
});
mp3file.play({numberOfLoops:1});
[/sourcecode]
Il problema sembra risiedere nel differente modo di interpretare i path sulle due piattaforme: iOS considera come root del progetto la cartella /assets/www/ , mentre con Android parte dalla root del progetto, rimappando la cartella /assets// in /android_assets// .
La soluzione è quindi quella di realizzare una semplice funzione che permetterà di trasportare il codice tra le due piattaforme senza modifiche:
[sourcecode lang=”java”]
function playAudio(filename) {
var audiosource = filename;
if (device.platform == "Android") {
audiosource="/android_asset/www/" + filename;
}
mp3file = new Media(audiosource,
function() {
//alert("playAudio():Audio Success");
},
function(err) {
alert(err);
}
);
mp3file.play({numberOfLoops:1});
}
[/sourcecode]
Semplicemente verifica la piattaforma sulla quale sta girando l’app e ‘rimappa’ i path di conseguenza.
L’utilizzo è semplicissimo: una volta copiato il file audio nella cartella /assets/www/ , lo si manda in play con:
[sourcecode lang=”java”]
playAudio("NOMEFILE.mp3");
[/sourcecode]