Я разрабатываю интерактивное приложение типа storybook для iPhone, и недавно я столкнулся с разочаровывающей ошибкой в отношении микширования звука на устройстве.
Во-первых, я настраиваю сеанс аудио. Я установил категорию в AVAudioSessionCategoryAmbient, а затем запустил и воспроизвел экземпляр AVAudioPlayer. Теперь, когда фоновый звук воспроизводится, я предварительно загружаю видео для воспроизведения с помощью MPMoviePlayerController, за которым следует вызов prepareToPlay. Причина, по которой я предварительно загружаю видео, так это потому, что мне нужно, чтобы он мгновенно воспроизводился с репликой с довольно строгим сроком.
В этой конфигурации звук/фильм отлично работает, и они смешиваются, а не прерывают друг друга. Однако эта конкретная категория аудиосеансов не позволяет звуку продолжать воспроизведение, пока устройство заблокировано, что мне действительно нужно. В результате я вынужден рассмотреть другую категорию: AVAudioSessionCategoryPlayback.
По умолчанию эта категория не позволяет смешивать с другим аудио, в соответствии с документами Apple. Чтобы включить смешивание с другим звуком, я переопределяю соответствующую категорию:
OSStatus propertySetError = 0;
UInt32 setProperty = 1;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(setProperty), &setProperty);
assert(propertySetError == 0);
К сожалению, это решает мою игру в то время как проблема блокировки, но вводит еще одну проблему: звук AVAudioPlayer прерывается ненадолго, поскольку видео загружается с незначительным заиканием. Заикание мало, возможно, менее секунды, но этого достаточно, чтобы нарушить работу пользователя. Я прочитал этот связанный пост, который позволил мне предварительно загрузить видео с помощью AVAudioSessionCategoryAmbient, но, к сожалению, такой же подход не работает с новой категорией.
Категория аудиосеанса применяется успешно, в соответствии с кодом возврата. Кто-нибудь знает, почему включение аудио микширования с этой категорией не совпадает с микшированием, обеспечиваемым окружающей средой?