我正在使用PhoneGap构建音频媒体记录器/播放器。一切都运转良好,但我皱了皱纹,似乎无法熨烫。
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');
    });
}

最佳答案

当您调用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);

我建议做类似的事情。

关于javascript - PhoneGap无法从Media API中获取duDuration(),但其他方法也可以使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13367593/

10-12 06:26