2012-12-28 171 views
0

我试图以增加的频率背靠背播放两个音频文件(点击和克隆)。它按照第一秒的要求工作,然后声音开始同时播放。任何想法我在这里做错了吗?延迟播放AVAudioPlayer

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; 
} 

回答

1

在.h文件中定义首先例如BOOL

BOOL play; 

现在,在添加本timer哪里需要play sound in delay

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]; 
    } 
} 
+0

辉煌。非常感谢。 – colindunn

0

第一睡眠定时器和的NSTimer都将延迟对于相同量的时间,1秒,因此主叫

[avClack play]; 

在runClickClackTimer的第一个实例在同一时间作为

[avClick play]; 

在runClickClackTimer的第二个实例中。

我会设置两个独立的NSTimers,它们调用两个单独的函数,也许runClickTimer和runClackTimer。

+0

谢谢,我会尽力的。错开两种方法的最好方法是什么? – colindunn

+0

我首先尝试设置不同时期的两个计时器,然后使它们更接近相同。或者也许在两个定时器的设置之前进行短暂的睡眠。我必须玩它。作为一个方面说明,您可以将计时器设置为重复:YES,然后您不需要继续启动计时器。 –

+0

我故意这样做了。定时器以增加的速度运行,因此重置是必要的。 – colindunn