AVAudioRecorder и AVAudioPlayer с iOS 7 не работают должным образом

у меня проблема с фреймворком AVFoundation. Я написал демонстрационное приложение для записи звука, его воспроизведения и подсчета децибелов с iOS 6. Оно работало как со встроенным симулятором iOS xcode 4.6.3, так и с моим iPhone с iOS 6.1.3.

Теперь я обновил xcode до версии 5 и снова протестировал приложение. Со встроенным симулятором работает (как с симуляторами iOS 6.1, так и с iOS 7). Но когда я развертываю приложение на своем iPhone с iOS 7.0, оно больше не работает.

Я использую AVAudioRecorder и AVAudioPlayer.

Я не знаю, в чем может быть проблема. Какие-либо предложения? Спасибо!


person carlodonz    schedule 20.09.2013    source источник
comment
это именно то, что происходит со мной. Все мои приложения, которые раньше работали на iOS 6, просто перестали работать в iOS 7 для AVAudioRecorder и AVAudioPlayer. В моем случае они даже не работают на симуляторе   -  person Sam B    schedule 21.09.2013
comment
Сэм, твое приложение не могло воспроизводить звук? Проверьте мой ответ, чтобы узнать, как я понял, как исправить запись, но мое воспроизведение все еще работало до исправления.   -  person Mr.Hardy    schedule 22.09.2013


Ответы (4)


У меня была та же проблема... Похоже, Apple теперь требует использования AVAudioSession перед использованием AVAudioRecorder. Я не смог найти никакой документации по этому изменению в требовании, однако часть записи моего приложения теперь работает.

Все, что я сделал, это создал audioSession, установил категорию и сделал ее активной. Я сделал это до вызова prepareToRecord и попробовал после вызова prepareToRecord... оба варианта сработали.

Надеюсь, это решит вашу проблему!

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[audioSession setActive:YES error:nil];
person Mr.Hardy    schedule 22.09.2013
comment
Я попробовал это в своем коде, но он все еще не работает. Нужно ли сначала спрашивать разрешения на использование микрофона? Благодарю. - person atbebtg; 26.09.2013
comment
@atbebtg, возможно, вам придется заменить категорию на AVAudioSessionCategoryPlayback. - person Hank; 08.10.2013
comment
Спасибо. Спас мой день. - person san; 10.10.2013
comment
Это помогло мне решить проблему. Большое спасибо. Следует добавить немного соли. Последние два метода имеют возвращаемое значение. Не рекомендуется игнорировать возвращаемое значение. Это неприемлемо даже в примерах фрагментов. - person Valeriy Van; 05.01.2014

Та же проблема.

Я исправил это с помощью AVAudioSession. Кроме того, правильно установите категорию AVAudioSession:

при записи использовать:

[self.audioSession setCategory:AVAudioSessionCategoryRecord error:nil];

при игре используйте:

[self.audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];

Если я не переключаю категорию во время игры, громкость регистрации очень низкая.

Удачи!

person rossodisera    schedule 06.11.2013

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

person Anil Prasad    schedule 01.05.2014

Возможно, у вас нет доступа к микрофону. Используйте этот код:

if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {
    [audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
        if (granted) {
            // Microphone enabled code
        }
        else {
            // Microphone disabled code
        }
    }];
}
person Alexander    schedule 16.01.2014