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];

вместо этого исправляет вещи. Очень странно, что это не проблема в симуляторе, но вызывает проблемы с оборудованием.

Другие вопросы по тегам