8

オーディオ ファイルを動的に作成し、その場でソースを変更しています。ただし、src を変更して currentTime を変更しようとすると、常に無効な状態エラーが発生します。それをどのようにテストしますか?または、準備ができたらイベントを発生させてから、 currentTime を呼び出してオーディオ位置を変更することをお勧めします。

this.doneLoading = function(aTime){

    try{
        this.mAudioPlayer.currentTime = aTime / 1000.0;
    }catch(err){
        console.log( err );
    }
    this.mAudioPlayer.play();   
}

this.playAtTime = function(aTime) {
    Debug("play at time audio: " + aTime);
    Debug("this.mAudioPlayer.currentTime: " + this.mAudioPlayer.currentTime);

     this.startTime = aTime;

    if (this.mAudioPlayer.src != this.mAudioSrc) {
        this.mAudioPlayer = new Audio();
        this.mAudioPlayer.src = this.mAudioSrc;
        this.mAudioPlayer.load();
        this.mAudioPlayer.play();
        this.mAudioPlayer.addEventListener('canplaythrough', this.doneLoading(aTime), false );
    }
    else if ((isChrome() || isMobileSafari()) && aTime == 0) {
        this.mAudioPlayer.load();
        this.mAudioPlayer.currentTime = aTime / 1000.0;
        this.mAudioPlayer.play();
        Debug("Reloading audio");
    }else{

        this.mAudioPlayer.currentTime = aTime / 1000.0;
        this.mAudioPlayer.play();
    }       



};
4

2 に答える 2

10

addEventListener に関数参照を渡していません。関数をインラインで呼び出しています。doneLoading ()関数はすぐに (ファイルが読み込まれる前に) 実行され、ブラウザーは正しく INVALID_STATE_ERR をスローします。

this.mAudioPlayer.addEventListener('canplaythrough', this.doneLoading(aTime), false );

代わりに関数参照を渡してみてください。このような:

this.mAudioPlayer.addEventListener('loadedmetadata',function(){
    this.currentTime = aTime / 1000.0;
}, false );
于 2012-10-11T13:25:11.843 に答える