2013-10-31 12 views
5
döndürür

Ses dosyalarının süresini almaya çalışıyorum. Ben neden kullandıklarını, yani ben setInterval getDuration kullanmak zorunlu oldu bazı forumlarda gördümMedia.getduration, -1

$.fntReproducir=function(){ 
    //obtenemos una instancia del elemento que contiene la info. de cancion a reproducir 
    var $objContenedorCancion=$('#olCanciones').children().eq(iCancionActual); 
    //obtenemos la ruta del archivo que se va a reproducir y se lo asignamos 
    //al source del audio player de HTML5 
    objReproductor = new Media($objContenedorCancion.attr('rel'), stopAudio, null); 
    //var timerDur = setInterval(GetCurrPosition, 1000); 
    //desmarcamos cualquier cancion en la lista (si es que estuviese marcada alguna) 
    $('#olCanciones li').removeClass('clsSeleccionado'); 
    //marcamos en la lista la cancion que vamos a reproducir 
    $objContenedorCancion.addClass('clsSeleccionado'); 
    meState = myMediaState.play 

    //reproducir la cancion con el metodo play 
    objReproductor.play(); 
    //PlayMusic(objReproductor); 


    $('#lblDuracion').find('span').text('enters'); 
// Play audio 
    if (objReproductor) { 
     //objReproductor.play(); 
     //document.getElementById('PlayStatusID').innerHTML = "<p></p>Status: playing..."; 
     $('#lblDuracion').find('span').text('enters2'); 
     //setButtonState(myMediaState.playback); 
     // Update media position every second 
     clearProgressTimmer(); 
     $('#lblDuracion').find('span').text('enters4'); 
     progressTimmer = setInterval(function() { 
      // get my_audio position 
      $('#lblDuracion').find('span').text('enters5'); 
      objReproductor.getCurrentPosition(
      // success callback 
      function (position) { 
       //document.getElementById('lblCancion').innerHTML = "<p></p>Status: enters "; 
       $('#lblDuracion').find('span').text('enters8'); 
       if (position >= 0){ 
        $('#lblDuracion').find('span').text('enters6'); 
        $('#lblEstado').find('span').text(position); 
       }else { 
        $('#lblEstado').find('span').text('0 sec'); 
       } 

      }, 
      // error callback 
      function (e) { 
       $('#lblEstado').find('span').text('0 sec' + e); 
      }); 

      $('#lblDuracion').find('span').text(objReproductor.getDuration()); 
      //$('#lblEstado').find('span').text(count); 
     }, 1000); 
    } 

    $('#btnPausar').val('Play'); 
    $('#btnPausar').find('img').attr('src','img/pause.png'); 
    //$('#lblDuracion').find('span').text(objReproductor.getDuration()); 
    //ocultamos suavemente los datos de la cancion anterior 
    $('#divInfoCancion').find('label').stop(true.true).animate({ 
     opacity: 0 
    },function(){ 
     //obtenemos una instancia del elemento que contiene los datos de la cancion 
     var $objContenedorCancion=$('#olCanciones').children().eq(iCancionActual);   
     //actualizamos la informacion de la cancion que se esta reproduciendo 
     //duracion total 

     //nombre de la cancion 
     //$('#lblCancion').find('span').text($objContenedorCancion.find('strong').text()); 
     $('#lblCancion').text($objContenedorCancion.find('.li_song').text()); 
     //artista 
     //$('#lblArtista').find('span').text($objContenedorCancion.find('em').text()); 
     $('#lblArtista').text($objContenedorCancion.find('.li_artist').text()); 
     //tiempo transcurrido 
     //$('#lblEstado').find('span').text('00:00'); 
     //imagen 
     $('#current_img').attr('src',$objContenedorCancion.find('img').attr('src')); 
     //mostramos suavemente la info. de la nueva cancion 
     $(this).stop(true,true).animate({ 
      opacity: 1 
     }); 
    }); 

ama bana herhangi bir sonuç vermediğini: Bunun için ben aşağıdaki kodu kullanıyorum. Dosya iyi yüklenmiştir çünkü bunu duyabiliyorum ve "süre = -1" metninin gösterilmesi nedeniyle GetCurrentPosition'a girdiği için -1 değeri veriyor. Doğru süre değerini elde etmek için nasıl yapabilirim?

DÜZENLEME

Ben daha fazla kod koymak ve ayrıca getCurrentPosition cadı çalışmıyor ekleyin. Ben farklı $ ('# lblDuracion') koydum bulmak ('span') metin ('giriş'); 'lblDuracion' içinde görünen değerin ne olduğunu görmek için farklı sayılarla ve 'enters5' olur ama aynı zamanda $ ('# lblEstado') satırından da geçer. find ('span') text (objReproductor.getDuration()); -1 döndürür.

cevap

0

dosya sistemi kesinlikle söylese bile:/android_assets

fonksiyon bekliyor/android_asset - ya da dönecektir -1 bulunamadı "dosya" bir belgesiz olarak.

.getDuration() yönteminin çağrılması, zaman dilimli bir döngü gerektirir - aksi takdirde -1 de döner.

playFile: function() { 

    var audiofile = new Media(
     'file:///android_asset/www/audio/Rumble_Pack_-_Mad_Robots.wav', 
     function(i){} 
    ); 

    var counter = 0; 
    var timerDur = setInterval(function() { 
     counter = counter + 100; 
     if(counter > 2000) {clearInterval(timerDur);} 
     var duration = audiofile.getDuration(); 
     if(duration > 0) { 
      clearInterval(timerDur); 
      console.debug(duration + ' seconds'); 
     } 
    }, 100); 

    audiofile.play(); 
} 
+0

Teşekkür ekleyin. Media() yapıcısı için phoneGap'teki belgeleri kontrol ettim. Orada görünen örneği takip etmeye çalıştım ama benim için çalışmadı. -1 değerinin, sürenin bilinmediği, ancak sürenin neden bilinmediği anlamına geldiğini biliyorum. Düzeltme süresi ile normal bir mp3 dosyası kullanıyorum çünkü bu alması bir hata olması gerekir. –

+0

OnError dezavantajı tetiklenmediğinde kesinlikle bir "hata" değil - tahmin sadece yerel dosyalarla çalışır - yolun yolu biraz garip./android_assets/... en iyi pratice, onError geriçağırımına çok işlevli bir çengeldir ve konsola çıkışını günlüğe kaydeder (ama sanırım bu bile tetiklenmeyecektir). Bu C değil ve dönüş değeri -1 bir hata olarak belgelenir. –

+0

/android_assets/... yolunu kullanıyorum ve şarkı yeni medya (...) iyi çalışıyor diye çalıyor. Ama getDuration() yönteminin neden her zaman -1 değerini döndürdüğünü bilmiyorum. –

0

cordova eklentisi kaldır cordova-eklentisi medya

ve sonra

cordova eklenti cevap için [email protected]