2012-11-13 55 views
8

我正在用PhoneGap構建一個音頻媒體記錄器/播放器。這一切都很好,但我打了一個我似乎無法熨燙的皺紋。PhoneGap無法getDuration()脫離媒體API,但其他方法工作

my_media.play();確實在我的Eclipse或XCode控制檯中播放媒體無w/o錯誤,這就是爲什麼顯示-1的警報令人費解。我期望my_media.getDuration();可以返回我正在嘗試播放的文件的持續時間。

我的try/catch塊沒有拋出錯誤,我對此很困惑。 Here's the PhoneGap documentation on Media.getDuration()

function playAudio() { 

    $('#btnStopRecording').removeClass('ui-disabled'); 
    $('#btnPlayMessage, #btnStartStopRecording, #btnDeleteMessage, #btnAcceptUpload').addClass('ui-disabled'); 

    my_media = new Media(fullRecordPath, 

     // success callback 
     function() { 
      $('#btnPlayMessage, #btnStartStopRecording, #btnDeleteMessage, #btnAcceptUpload').removeClass('ui-disabled'); 
      $('#btnStopRecording').addClass('ui-disabled'); 
     }, 

     // error callback 
     function (err) { 
      console.log("attempting to play fullRecordPath = "+fullRecordPath); 
      console.log("playAudio():Audio Error: " + err.code); 
     } 
    ); 

    var thisDuration; 

    try{ 
     thisDuration = my_media.getDuration(); 
    } catch (err) { 
     console.log("attempting to get duration error code "+err.code); 
     console.log("attempting to get duration error message "+err.message); 
    } 

    alert("we're about play a file of this duration "+thisDuration); 

    my_media.play(); 

    // stop playback when the stop button is tapped 
    $('#btnStopRecording').off('tap').on('tap',function() 
    { 
     my_media.stop(); 
     $('#btnPlayMessage, #btnStartStopRecording, #btnDeleteMessage, #btnAcceptUpload').removeClass('ui-disabled'); 
     $('#btnStopRecording').addClass('ui-disabled'); 
    }); 

    // if the user leaves the page, stop playback 
    $('#pageRecordMessage').live('pagehide', function() 
    { 
     my_media.stop(); 
     $('#btnPlayMessage, #btnStartStopRecording, #btnDeleteMessage, #btnAcceptUpload').removeClass('ui-disabled'); 
     $('#btnStopRecording').addClass('ui-disabled'); 
    }); 
} 

回答

2

當您調用my_media.getDuration()時,尚未加載相關介質的元數據。在您的問題中引用的文檔中,示例代碼將getDuration調用放入一個時間間隔中:

var timerDur = setInterval(function() { 
    counter = counter + 100; 
    if (counter > 2000) { 
     clearInterval(timerDur); 
    } 
    var dur = my_media.getDuration(); 
    if (dur > 0) { 
     clearInterval(timerDur); 
     document.getElementById('audio_duration').innerHTML = (dur) + " sec"; 
    } 
}, 100); 

我會推薦做類似的事情。

+1

我有它像你進入setInterval但仍然無法正常工作。它始終返回-1。可能是什麼原因?因爲它執行得很好。文件類型可能是問題?我正在使用mp3 –

1

此解決方案適用於我。基本上,玩並立即停止。似乎沒有任何時間,似乎是一個體面的解決方法。

media.play(); 
media.stop(); 
var length = media.getDuration(); 
0

這個問題太舊了。但它仍然相關,因爲許多人可能面臨同樣的問題。 每當沒有任何工作,我只做一件事,升級或降級版本。在這種情況下,我通過安裝以下版本解決了我的問題。

cordova plugin add [email protected] 
0

我也遇到了類似的問題在cordova for iOS。我成功地能夠錄製,播放和停止音頻,但無法獲取音頻文件的當前位置和總持續時間。所以我在完成錄製音頻之後,即在my_media.stopRecord()之後添加了my_media.release(),並且它像魅力一樣工作。之前我得到-1getDuration()0getCurrentPosition()

希望它可以幫助別人。

相關問題