2012-11-13 1 views
8

PhoneGapでオーディオメディアレコーダー/プレーヤーを構築しています。それはすべて美しく働いていますが、私は鉄に見えないようなしわを打ちました。PhoneGapはMedia APIからgetDuration()を呼び出せませんが、他のメソッドは動作します

my_media.play();実際には、私のEclipseまたはXCodeコンソールでメディアのw/oエラーが再生されるため、-1が表示されているアラートが困惑しています。 my_media.getDuration();は、再生しようとしているファイルの再生時間を返すと思います。

私のtry/catchブロックはエラーを投げているわけではありません。私はこの1つに非常に困惑しています。 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

iOSのコードバにも同様の問題がありました。オーディオを録音、再生、停止することはできましたが、オーディオファイルの現在の位置と合計時間を取得することはできませんでした。だからmy_media.stopRecord()の後にオーディオを録音し終わった直後にmy_media.release()を追加したところ、魅力的だった。以前私はのために-1を得て、getCurrentPosition()のために0を得ていました。

誰かを助けることを願っています。

関連する問題