Я играю музыку, которая запускается в фоновом режиме - но она останавливается через секунду, почему? - PullRequest
0 голосов
/ 04 января 2012

Я играю звук, который срабатывает в фоновом режиме, но он звучит менее секунды.Я пробовал файлы WAV и M4A.но я схожу с ума, находя ответ на проблему.его даже не закончил один цикл .. вы знаете, почему это произошло?Может кто-нибудь, пожалуйста, помогите мне?

это код игры:

NSString *audioFilePath = [[NSBundle mainBundle] pathForResource:[userProp valueForKey:@"romba"] ofType:@"m4a"];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:audioFilePath] error:NULL]; 
audioPlayer.delegate=self;
audioPlayer.numberOfLoops = -1;
[audioPlayer play];   

Я пытался вызвать функции делегата, чтобы проверить проблему, но ничегомоя консоль

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
    NSLog(@"finish playing");
}

-(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error{
    NSLog(@"stops - decoder error");
    NSLog(@"error: %@",[error description]);
}
-(void)audioPlayerEndInterruption:(AVAudioPlayer *)player{
    NSLog(@"stops - decoder error");
} 

так я добавляю AVAudoioPlayer -

-(void)syncAlarmProperties{
    NSUserDefaults *userProp = [NSUserDefaults standardUserDefaults];

    NSString *audioFilePath = [[NSBundle mainBundle] pathForResource:[userProp valueForKey:@"alertProp"] ofType:@"wav"];
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:audioFilePath] error:NULL]; 

    audioPlayer.delegate=self;
    audioPlayer.numberOfLoops=-1;

} 

это функция воспроизведения:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
{
[audioPlayer play];
}

1 Ответ

0 голосов
/ 04 января 2012

Если вы используете автоматический подсчет ссылок, то audioPlayer, вероятно, отправляется сообщение -release сразу после сообщения -play.

Решение в этом случае состоит в добавлении вашего экземпляраAVAudioPlayer как @property в вашем классе, чтобы игрок не вышел из-под вас.

...