2012-12-28 207 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