我正在實現在用戶拖動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];
...但是,導致應用程序凍結(加上鎖定了模擬器)。
我能做些什麼來調試這個問題?