Звуки случайным образом прерываются при начале игры - PullRequest
1 голос
/ 13 января 2010

Я вызываю playSoundFromBundle из приведенного ниже кода для воспроизведения звуков (aif-файлов). У меня есть звук, который делает один щелчок, а затем затухающий звук. Оба звука находятся в одном файле. Иногда я получаю два клика и затем исчезаю. Смысл, щелкни, щелкни ... исчезнуть. Один клик не то, что должно играть. Я предполагаю, что звук начинается (звук щелчка), прерывается и затем перезапускается (полный звук ... щелчок / затухание) из-за другой обработки, которая может продолжаться. Кажется случайным, когда это произойдет. Я поставил звук на собственную нить, чтобы избежать двойного щелчка. Что еще я могу сделать, чтобы звук воспроизводился правильно?

- (void) playSoundFromBundleThreaded:(NSArray*)arr{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *fileName = (NSString*)[arr objectAtIndex:0];
NSString *fileExt = (NSString*)[arr objectAtIndex:1];
NSError *err;
AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource: fileName ofType: fileExt inDirectory:@"/"]] error: &err];
self.audioPlayer = newPlayer;
self.audioPlayer.numberOfLoops = 0;
self.audioPlayer.volume = .5;

if (self.audioPlayer == nil)
{
    NSLog(@"Problem initializing Sound - %@", [err description]);
}
else
{
    [self.audioPlayer play];
}
[newPlayer release];
[pool release];
}

- (void) playSoundFromBundle:(NSString*)fileName fileExtension:(NSString*)fileExt{
NSArray *arr = [NSArray arrayWithObjects:fileName, fileExt, nil];
[NSThread detachNewThreadSelector: @selector(playSoundFromBundleThreaded:) toTarget:self withObject:arr];
}

1 Ответ

1 голос
/ 14 января 2010

Не знаю, сработает ли это, но посмотрите материал Audio Session. Он предназначен для управления такими вещами, как то, будет ли воспроизведение других звуков (например, музыкальным проигрывателем) прерывать звук из вашего приложения.

...