Внедрявам звуков ефект, който се възпроизвежда, докато потребител плъзга UISlider.
В предишен въпрос използвах AudioServicesPlaySystemSound()но този тип звук не може да бъде спрян. Имам нужда звукът да спира, когато потребителят не плъзга активно плъзгача, но не го е пуснал.
Сега създавам звук с помощта на обект AVAudioPlayer. Инициализирам го в моя View Controller така:
@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];
}
Имам два метода за контрол на звука. Първият възпроизвежда звук при всяко движение на плъзгача. Той е свързан със събитието Value Changed на UISlider в Interface Builder.
-(IBAction)sliderChanged:(id)sender;
{
// only play if previous sound is done. helps with stuttering
if (![self.player1 isPlaying]) {
[self.player1 play];
}
}
Вторият метод спира звука, когато потребителят пусне плъзгача. Свързано е със събитието Touch Up Inside на UISlider.
-(IBAction)haltSound;
{
[self.player1 stop];
}
Това работи, когато бутонът на плъзгача се премести и след това се освободи бързо, но ако задържите бутона за повече от две или три секунди, звукът се повтаря (добре), след което прекъсва (лошо). От този момент нататък звукът няма да се възпроизвежда отново (супер лошо).
Опитах се да настроя звука да се повтаря с помощта на:
[self.player1 setNumberOfLoops:30];
... но това води до замразяване на приложението (плюс заключване на симулатора).
Какво мога да направя, за да отстраня този проблем?