2013-11-26 11 views
5

私は少し、この奇妙な発生によって困惑で再生された後に効果を取る:AVAudioPlayer数は一度だけ

私は一度タップのいずれかのオーディオプレーヤーのためのループを設定し、またはそれをリセットUIButtonを、持っています0(ループなし)。ここでは方法がある -

-(void)changeLoopValueForPlay:(int)tag toValue:(bool)value{ 
    AVAudioPlayer *av = [self.playerArray objectAtIndex:tag]; 
    if(value){ 
     [av setNumberOfLoops:100]; 
     [av prepareToPlay]; 
    } 
    else{ 
     [av setNumberOfLoops:0]; 
    } 
} 

プレイヤーがループ値がすぐに有効になりません。つまり、オーディオ1時間を通じて果たしているが、「numberOfLoops」の後に現在、いくつかの理由で、ループのみ有効になりますプレイする前にその値をチェックすると、プレイヤーの値は実際には100に設定されます。私はこれは、プレイヤーの初期化や読み込みと関係があると仮定しているが、私はそれらの2つの演劇の間にそれを再初期化しない(1つはループなしで、もう1つは)。なぜこれが起こっているのか?他のコードを見たい場合は私に教えてください。

答えて

1

これで問題は解決しましたが、これが直接的な解決策ではなく回避策であるかのように感じられます。私がやったのは、numberOfLoopsの値を設定して新しいAVAudioPlayerを作成して、既存のプレーヤーの値を変更するのではなく、そのプレーヤーを既存のプレーヤーに置き換えただけです。

0

私はnumberOfLoopsを完全に放棄し、代わりに自分のロジックを実行することで問題を回避します。

まず、AVAudioPlayerのデリゲート設定:

self.audioPlayer.delegate = self; 

次に、デリゲートの-audioPlayerDidFinishPlaying:successfully:を実装:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)flag 
{ 
    if(flag && <#(bool)i_want_to_repeat_playing#>) 
    { 
     [self.audioPlayer play]; 
    } 
} 

だけカウンターが持っているかどうかを確認、例えば、ご希望のロジックで<#(bool)i_want_to_repeat_playing#>を置き換えます一定の閾値に達した。