irec mediaapi - CGastrell/phonegap GitHub Wiki
La mayor variante en mediaApi
(comparada con la que hicimos para los ejercicios) es la inicializacion y carga. La inicializacion es, al igual que en recordApi
, mas simple ya que la inicializacion de la interfaz la haremos desde otro lugar. La otra diferencia es en el metodo load
, que esta vez recibira un indice de la lista de entrevistas que se encuentra en entrevistas.lista
var mediaApi = {
playTime: 0,
initialize: function() {
//inicializacion de estado de reproduccion
mediaApi.isPlaying = false;
//initialize with load
// mediaApi.load('/android_asset/www/intro.mp3');
},
pausa: function() {
if(!mediaApi.isPlaying) {
return;
}
clearInterval(mediaApi.interval);
mediaApi.interval = null;
mediaApi.isPlaying = false;
mediaApi.audio.pause();
},
play: function() {
if(mediaApi.isPlaying || !mediaApi.audio) {
return;
}
mediaApi.interval = setInterval(function(){
mediaApi.audio.getCurrentPosition(function(t){
mediaApi.playTime = t;
mediaApi.currentTime.text( clockFormat(t) );
});
},500);
mediaApi.isPlaying = true;
mediaApi.audio.play();
},
createTagButton: function(ref) {
var button = $('<button />')
.addClass("ui-btn ui-btn-inline ui-mini")
.text('+')
.click(function(e){
var d = new Date(mediaApi.entrevista.start);
d.setSeconds(d.getSeconds() + mediaApi.playTime);
mediaApi.entrevista.tags.push({ref: ref, time: d});
});
return button;
},
onSuccess: function(){
if(mediaApi.interval) {
clearInterval(mediaApi.interval);
mediaApi.currentTime.text("00:00");
mediaApi.interval = null;
mediaApi.isPlaying = false;
}
console.log('media stop/played/rec success');
},
load: function(entrevistaId) {
if(mediaApi.isPlaying) {
mediaApi.pausa();
}
if(mediaApi.audio) {
mediaApi.audio.release();
}
mediaApi.entrevista = entrevistas.lista[entrevistaId];
mediaApi.audio = new Media(mediaApi.entrevista.audioPath, mediaApi.onSuccess, mediaApi.onError, mediaApi.onStatus);
//fake play
mediaApi.audio.play();
console.log('audio file loaded');
},
onStatus: function(status) {
switch(status) {
case Media.MEDIA_NONE: console.log('Status change: idle');
break;
case Media.MEDIA_STARTING:
console.log('Status change: starting');
break;
case Media.MEDIA_RUNNING:
console.log('Status change: running');
if(!mediaApi.audio.initialized) {
mediaApi.audio.getCurrentPosition(function(){
console.log(mediaApi.audio._duration);
mediaApi.totalTime.text( clockFormat(mediaApi.audio._duration) );
mediaApi.audio.stop();
mediaApi.audio.initialized = true;
});
}
break;
case Media.MEDIA_PAUSED: console.log('Status change: paused');
break;
case Media.MEDIA_STOPPED: console.log('Status change: stopped');
break;
default: console.log('unknown status');
}
},
onError: function(err) {
console.log('Error');
console.log(err);
}
}
Antes de seguir podriamos ir probando que no tengamos errores. Podemos probar en browser para ver que la navegacion siga funcionando y luego en el dispositivo.
A continuacion veremos como inicializar las paginas a traves de 2 eventos: pagecreate
y pageshow
.