2

AVAudioplayer を使用してオーディオ ファイルを再生しています。早送りや巻き戻しなどのコントロールがあります。

巻き戻しは正常に機能していますが、早送りは機能していません。

- (void)rewind
{
    AVAudioPlayer *player = _rewTimer.userInfo;
    player.currentTime-= SKIP_TIME;
    [_rewTimer invalidate];
    _rewTimer=nil;
    [self updateCurrentTime];
}

- (void)ffwd
{
    AVAudioPlayer *player = _ffwTimer.userInfo;
    player.currentTime-= SKIP_TIME;
    [player setCurrentTime:cTime];
    [_ffwTimer invalidate];
    _ffwTimer=nil;

    [self updateCurrentTime];
}

進むボタンをクリックするとすぐに、オーディオ ファイルが最初から再生されます。

Apple のサンプル アプリ avTouch に従いました。

4

2 に答える 2

2

AVAudioPlayer *player; のプロパティ宣言を行っている可能性があります。h ファイルに追加し、合成も行いました。では、次のことを行ってください。

- (void)ffwd
{
    NSTimeInterval *time = [player currentTime];
    time+=SKIP_TIME;
    [player setCurrentTime:time];    

}

rewind+ についても同様に行います

また

 - (void)ffwd{
    NSTimeInterval time = avPlayer.currentTime;
 time+=SKIP_TIME;
    if (time > avPLayer.duration)
    {
       //nothing to do

    }
    else
        [player setCurrentTime:time];
    }

これはより良い方法のようです。巻き戻しの場合も、期間の代わりに 0 と比較します

于 2010-01-06T03:46:08.177 に答える
0

最も簡単な説明はcTime、オーディオ ファイルの合計時間よりも長くなるか、何らかの形でマイナスになるということです。どちらも、プレーヤー インスタンスのcurrentTimeプロパティを 0 に設定します。

余談ですが、タイマーの userInfo ディクショナリにプレーヤーを含めるのは脆弱だと思います。絶対にタイマーに埋め込む必要がない限り、すべてのメソッドが簡単にアクセスできるように、クラスのプロパティに移動します。タイマーは引き続きメソッドを呼び出すことができますが、タイマーからタイマーへのスワップ中にプレーヤーが失われるリスクはありません。

于 2010-01-05T15:30:30.050 に答える