遅延後にAVAudioPlayerを再生する

私は、2つのオーディオファイル(クリックとクラック)を連続して頻繁に再生しようとしています。最初の2秒間は必要に応じて動作し、その後同時にサウンドが再生されます。私がここで間違って何をしているのか?

static float clickClackDelay = 1.0;

- (void)runClickClackTimer {

    clickURL = [[NSBundle mainBundle] URLForResource:@"click" withExtension:@"wav"];
    clackURL = [[NSBundle mainBundle] URLForResource:@"clack" withExtension:@"wav"];
    avClick = [[AVAudioPlayer alloc] initWithContentsOfURL:clickURL error:nil];
    avClack = [[AVAudioPlayer alloc] initWithContentsOfURL:clackURL error:nil];

    clickClack = [NSTimer scheduledTimerWithTimeInterval:clickClackDelay
                                             target:self
                                           selector:@selector(runClickClackTimer)
                                           userInfo:nil
                                            repeats:NO];

    [avClick play];
    sleep(clickClackDelay);
    [avClack play];
    sleep(clickClackDelay);

    NSLog(@"Play sound every %.2f", clickClackDelay);

    clickClackDelay -= 0.01;
}
0
nl ru de

3 答え

まず、.hファイルに BOOL インスタンスを定義します。

 BOOL play;

次に、この timer を追加して、 delay in sound を再生する場所を追加します。

 NSTimer *clickClack = [NSTimer scheduledTimerWithTimeInterval:clickClackDelay
                                              target:self
                                            selector:@selector(runClickClackTimer)
                                            userInfo:nil
                                             repeats:YES];

clickClackDelayに従って遅延を再生するメソッドは次のとおりです。

-(void)runClickClackTimer
{
  if(play)
  {
    play = FALSE;
    [avClick play];
  }
  else
  {
    play = TRUE;
    [avClack play];
  }
}
1
追加された
ブリリアント。本当にありがとう。
追加された 著者 colindunn,

最初のスリープタイマーとNSTimerは、同じ時間(1秒)の間、両方の遅延を行います。したがって、

[avClack play];

runClickClackTimerの最初のインスタンスと同時に

[avClick play];

runClickClackTimerの2番目のインスタンスで

私は2つの別々の関数、おそらくrunClickTimerとrunClackTimerを呼び出す2つの別々のNSTimerを設定します。

0
追加された
私はまず、2つのタイマーを別々の時間に設定してから、同じタイマーに近づけようとします。あるいは、2人のタイマーの設定の前に短い睡眠をとっているかもしれません。私はそれと遊ぶ必要があります。副報として、タイマーを繰り返し:YESに設定すると、タイマーの開始を続ける必要はありません。
追加された 著者 David Brunow,
良い点 - 私はそれを忘れていました。
追加された 著者 David Brunow,
ありがとう、私はそれを試みます。 2つの方法をずらす最良の方法は何でしょうか?
追加された 著者 colindunn,
私はそれを意図的にやった。タイマーは高速で動作しているので、リセットが必要です。
追加された 著者 colindunn,
変数clickClackDelayに応じて調整するという点で、遅延を動的にする必要があります。睡眠がそれを達成するかどうかは分かりません。
追加された 著者 colindunn,

最初のスリープタイマーとNSTimerは、同じ時間(1秒)の間、両方の遅延を行います。したがって、

[avClack play];

runClickClackTimerの最初のインスタンスと同時に

[avClick play];

runClickClackTimerの2番目のインスタンスで

私は2つの別々の関数、おそらくrunClickTimerとrunClackTimerを呼び出す2つの別々のNSTimerを設定します。

0
追加された
私はまず、2つのタイマーを別々の時間に設定してから、同じタイマーに近づけようとします。あるいは、2人のタイマーの設定の前に短い睡眠をとっているかもしれません。私はそれと遊ぶ必要があります。副報として、タイマーを繰り返し:YESに設定すると、タイマーの開始を続ける必要はありません。
追加された 著者 David Brunow,
良い点 - 私はそれを忘れていました。
追加された 著者 David Brunow,
ありがとう、私はそれを試みます。 2つの方法をずらす最良の方法は何でしょうか?
追加された 著者 colindunn,
私はそれを意図的にやった。タイマーは高速で動作しているので、リセットが必要です。
追加された 著者 colindunn,
変数clickClackDelayに応じて調整するという点で、遅延を動的にする必要があります。睡眠がそれを達成するかどうかは分かりません。
追加された 著者 colindunn,