AVAudioPlayer play возвращает false на оборудовании
Я пытаюсь написать очень простой код для воспроизведения аудиофайла. Код отлично работает на симуляторе iPad2. Однако на моем устройстве iPad2 [audooPlayer play] возвращает false, и звук не слышен.
Я пробовал оба файла.caf и.wav. Я перезагрузил свой iPad2 и убедился, что выключен звук. Любые советы по отладке приветствуются.
Образец кода:
- (void)playAudio {
NSString *file = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"wav"];
url = [NSURL fileURLWithPath:file];
NSError *error = nil;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
if (error != nil) {
NSLog(@"Error creating audio player: %@", [error localizedDescription]);
return;
}
[audioPlayer setDelegate:self];
if (![audioPlayer prepareToPlay]) {
NSLog(@"Error preparing audio");
return;
}
// Everything works fine up to this point
if (![audioPlayer play]) {
// I hit this on hardware. Works perfect on the simulator.
NSLog(@"Error playing audio");
return;
}
1 ответ
После слишком большой отладки я наконец нашел виновника. Я следовал руководству по адресу http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/MultimediaPG/UsingAudio/UsingAudio.html#//apple_ref/doc/uid/TP40009767-CH2 и ранее в мое приложение перед воспроизведением звука, я записываю звук. На основании этого руководства я звонил
[[AVAudioSession sharedInstance] setActive: NO error: nil];
когда закончите запись. Это, очевидно, вызывает AVAudioPlayer для сбоя воспроизведения звука. Изменение вызова на
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
вместо этого исправляет вещи. Очень странно, что это не проблема в симуляторе, но вызывает проблемы с оборудованием.