Воспроизведение AVAudioPlayer после задержки

Я пытаюсь воспроизвести два аудиофайла (щелчок и clack) назад на все чаще. Он работает по желанию в течение первой секунды, а затем звуки начинают воспроизводиться одновременно. Любая идея, что я делаю неправильно здесь?

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
добавлено отредактировано
Просмотры: 1
de

3 ответы

Сначала определите экземпляр BOOL в файле .h:

 BOOL play;

Теперь добавьте этот timer , где нужно воспроизводить звук в задержке .

 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
добавлено
Brilliant. Спасибо.
добавлено автор colindunn, источник

Первый таймер сна и NSTimer будут задерживаться на такое же количество времени, 1 секунду, поэтому вызов

[avClack play];

в первом экземпляре runClickClackTimer одновременно с

[avClick play];

во втором экземпляре runClickClackTimer.

Я бы установил два отдельных NSTimers, которые вызывают две отдельные функции, возможно, runClickTimer и runClackTimer.

0
добавлено
Сначала я попытался установить два таймера для разных периодов, а затем приблизил их к одному. Или, возможно, положить короткий сон перед настройкой двух таймеров. Мне придется поиграть с ним. В качестве дополнительной заметки вы можете установить таймер на «Повторы: YES», и вам не нужно продолжать запуск таймера.
добавлено автор David Brunow, источник
Хороший момент - я забыл об этом.
добавлено автор David Brunow, источник
Спасибо, я попробую. Каким будет лучший способ пошатнуть два метода?
добавлено автор colindunn, источник
Я сделал это намеренно. Таймер работает с большей скоростью, поэтому необходим сброс.
добавлено автор colindunn, источник
Мне нужна задержка, чтобы быть динамичной, поскольку она настраивается в соответствии с переменной clickClackDelay. Не уверен, справится ли сон.
добавлено автор colindunn, источник

Первый таймер сна и NSTimer будут задерживаться на такое же количество времени, 1 секунду, поэтому вызов

[avClack play];

в первом экземпляре runClickClackTimer одновременно с

[avClick play];

во втором экземпляре runClickClackTimer.

Я бы установил два отдельных NSTimers, которые вызывают две отдельные функции, возможно, runClickTimer и runClackTimer.

0
добавлено
Сначала я попытался установить два таймера для разных периодов, а затем приблизил их к одному. Или, возможно, положить короткий сон перед настройкой двух таймеров. Мне придется поиграть с ним. В качестве дополнительной заметки вы можете установить таймер на «Повторы: YES», и вам не нужно продолжать запуск таймера.
добавлено автор David Brunow, источник
Хороший момент - я забыл об этом.
добавлено автор David Brunow, источник
Спасибо, я попробую. Каким будет лучший способ пошатнуть два метода?
добавлено автор colindunn, источник
Я сделал это намеренно. Таймер работает с большей скоростью, поэтому необходим сброс.
добавлено автор colindunn, источник
Мне нужна задержка, чтобы быть динамичной, поскольку она настраивается в соответствии с переменной clickClackDelay. Не уверен, справится ли сон.
добавлено автор colindunn, источник