8

PhoneGap を使用してオーディオ メディア レコーダー/プレーヤーを構築しています。それはすべて美しく機能していますが、アイロンをかけることができないように見えるしわにぶつかりました.

my_media.play();実際、Eclipse または XCode コンソールでエラーなしでメディアを再生します。これが、-1 を表示しているアラートが不可解である理由です。my_media.getDuration();再生しようとしているファイルの長さを返すことを期待しています。

私のtry/catchブロックはエラーをスローしていません。これにはかなり戸惑っています。 Media.getDuration() に関する PhoneGap のドキュメントは次のとおりです。

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');
    });
}
4

4 に答える 4

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);

似たようなことをすることをお勧めします。

于 2012-11-13T19:54:13.990 に答える
0

この質問は古すぎます。しかし、多くの人が同じ問題に直面している可能性があるため、これは依然として重要です。何も機能しないときは、バージョンをアップグレードまたはダウングレードするという 1 つのことだけを行います。この場合、次のバージョンをインストールすることで問題を解決しました。

cordova plugin add cordova-plugin-media@1.0.1
于 2016-02-06T00:23:31.203 に答える