2009-05-30 90 views
0

我正在實現在用戶拖動UISlider時播放的音效。iPhone上的AVAudioPlayer聲音停止意外循環:如何調試?

previous question中,我使用了AudioServicesPlaySystemSound()但該類型的聲音無法停止。當用戶沒有主動拖動滑塊但尚未釋放滑塊時,我需要停止播放聲音。

現在我正在使用AVAudioPlayer對象創建聲音。我初始化它在我的視圖控制器是這樣的:

@interface AudioLatencyViewController : UIViewController <AVAudioPlayerDelegate> { 
AVAudioPlayer *player1; 
} 

@implementation AudioLatencyViewController 
@property (nonatomic, retain) AVAudioPlayer *player1; 
@synthesize player1; 

-(void)viewDidLoad { 

[super viewDidLoad]; 

// the sound file is 1 second long 
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"tone1" ofType:@"caf"]; 
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath]; 

AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil]; 

[fileURL release]; 
self.player1 = newPlayer;; 
[newPlayer release]; 

[self.player1 prepareToPlay]; 
[self.player1 setDelegate:self]; 
} 

我有兩種方法來控制聲音。每當滑塊移動時,第一個播放聲音。它連接到Interface Interface中的UISlider的Value Changed事件。

-(IBAction)sliderChanged:(id)sender; 
{ 
    // only play if previous sound is done. helps with stuttering 
    if (![self.player1 isPlaying]) { 
     [self.player1 play]; 
    } 
} 

第二種方法在用戶釋放滑塊按鈕時暫停聲音。它連接到UISlider的TouchUp Inside事件。

-(IBAction)haltSound; 
{ 
    [self.player1 stop]; 
} 

這工作時,滑塊鍵移動,然後迅速釋放,但如果你按住按鈕超過兩個或三個秒,聲音重複(好),然後打破了(壞)。從此,聲音不會再播放(超級糟糕)。

我已經嘗試使用聲音設置爲循環:

[self.player1 setNumberOfLoops:30]; 

...但是,導致應用程序凍結(加上鎖定了模擬器)。

我能做些什麼來調試這個問題?

回答

0

當用戶拿着UISlider時,Value Changed會被調用很多次(任何時候用戶只移動一點點)。我會用Touch Down代替。

你可能想還是儘量使用循環這條路......

我喜歡的播放聲音,而用戶雖然移動滑塊的想法。讓我知道它是如何工作的。

[email protected]