Определение аудио сеанса

Аудио сеанс является посредником между Вашим приложением и iOS для конфигурирования аудио поведения. На запуск Ваше приложение автоматически получает одноэлементный сеанс аудио. Вы конфигурируете его для выражения аудио намерений приложения. Например:

Аудио конфигурация сеанса влияет на все аудио действие, в то время как Ваше приложение работает, за исключением пользовательского интерфейса, звуковые эффекты проиграли System Sounds Services API. Можно запросить аудио сеанс для обнаружения характеристик оборудования устройства приложение идет, такие как количество каналов и частота дискретизации. Эти характеристики могут варьироваться устройством и могут измениться согласно пользовательским действиям в то время как Ваше выполнение приложения.

Можно явно активировать и деактивировать аудио сеанс. Для звука приложения для игры, или для записи для работы аудио сеанс должен быть активным. Система может также деактивировать Ваш аудио сеанс — который это делает, например, когда телефонный вызов поступает или звуки аварийного сигнала. Такую деактивацию вызывают прерыванием. Аудио сеанс APIs обеспечивает способы ответить на и восстановиться с прерываний.

Аудио поведение значения по умолчанию сеанса

Аудио сеанс идет с некоторым поведением по умолчанию. В частности:

Все вышеупомянутое поведение предоставлено аудио категорией сеанса по умолчанию, AVAudioSessionCategorySoloAmbient. Работа с Категориями предоставляет информацию о том, как включить категорию в Ваше приложение.

Когда Вы начинаете играть или записывать аудио, Ваш аудио сеанс начинается автоматически; однако, доверие активации по умолчанию является опасным состоянием для Вашего приложения. Например, если iPhone звонит, и пользователь игнорирует вызов — отъезд Вашего выполнения приложения — Ваше аудио больше может не играть, в зависимости от которой технологии воспроизведения Вы используете. Следующий раздел описывает некоторые стратегии контакта с такими проблемами, и Ответ на Прерывания входит в глубину по теме.

Можно использовать в своих интересах поведение по умолчанию, поскольку Вы реализовываете свое приложение во время разработки. Однако единственные времена, можно безопасно проигнорировать аудио сеанс для поставляющего приложения, являются ими:

Во всех других случаях не поставляйте свое приложение с аудио сеансом по умолчанию.

Почему аудио сеанс по умолчанию обычно не то, что Вы хотите

Если Вы не инициализируете, конфигурируете, и явно используете свой аудио сеанс, Ваше приложение не может реагировать на прерывания или аудио аппаратные изменения маршрута. Кроме того, Ваше приложение не имеет никакого контроля над решениями OS о микшировании звука между приложениями.

Вот некоторые сценарии, демонстрирующие аудио поведение значения по умолчанию сеанса и как можно изменить его:

Как системные решения, конкурирующие аудио требования

Поскольку Ваше приложение для iOS запускается, встроенные приложения (сообщения, Музыка, Safari, телефон) могут работать в фоновом режиме. Каждый из них может произвести аудио: текстовое сообщение поступает, подкаст, который Вы запустили 10 минут назад, продолжает играть и т.д.

При размышлении об устройстве на iOS как об аэропорте, с приложениями, представленными как едущие на такси плоскости, система служит своего рода контрольно-диспетчерским пунктом. Ваше приложение может выполнить аудио запросы и утвердить его желаемый приоритет, но окончательное решение по тому, что происходит “на гудронированном шоссе”, прибывает из системы. Вы связываетесь с «контрольно-диспетчерским пунктом» с помощью аудио сеанса. В то время как Музыкальное приложение уже играет, рисунок 1-1 иллюстрирует типичный сценарий — Ваше приложение, желающее использовать аудио. В этом сценарии Ваше приложение прерывает Музыкальное приложение.

Рисунок 1-1  система управляет конкурирующими аудио требованиями
A comic-book representation of the sequence of events surrounding the activation of an audio session.

На шаге 1 числа, Вашей активации запросов приложения его аудио сеанса. Вы выполнили бы такой запрос, например, на запуске приложения, или возможно в ответ на пользователя, касающегося кнопки воспроизведения в приложении аудиозаписи и воспроизведения. На шаге 2 система рассматривает запрос активации. В частности это рассматривает категорию, которую Вы присвоили своему аудио сеансу. На рисунке 1-1 приложение SpeakHere использует категорию, требующую, чтобы другое аудио было заставлено замолчать.

На шагах 3 и 4 система деактивировала аудио сеанс приложения Музыки, останавливая его воспроизведение аудио. Наконец, на шаге 5, система активирует аудио сеанс приложения SpeakHere, и воспроизведение может начаться.

Система имеет окончательное решение активировать или деактивировать любое аудио настоящее сеанса на устройстве. Система соблюдает неприкосновенное правило, которое “всегда выигрывает телефон”. Никакое приложение, независимо от того как сильно это требует приоритет, не может превзойти телефон. Когда вызов поступает, пользователь уведомляется, и Ваше приложение прервано — независимо от того, какая операция передачи Вы переносите происходящий и независимо от того какую категорию Вы установили.

Слияние AVCaptureSession

Основа AV получает APIs (AVCaptureDevice, AVCaptureSession) позвольте Вам получить синхронизируемое аудио и видео от камеры и входов микрофона. С iOS 7, AVCaptureDevice объект, представляющий вход микрофона, может совместно использовать Ваше приложение AVAudioSession. По умолчанию, AVCaptureSession сконфигурирует Ваш AVAudioSession оптимально для записи, когда Ваш AVCaptureSession использует микрофон. Установите automaticallyConfiguresApplicationAudioSession свойство к НЕ для переопределения поведения по умолчанию и AVCaptureDevice будет использовать Ваш ток AVAudioSession настройки, не изменяя их. Посмотрите Ссылку класса AVCaptureSession и главу Получения Носителей для получения дополнительной информации.

Инициализация аудио сеанса

Система обеспечивает аудио объект сеанса на запуск Вашего приложения. Однако необходимо инициализировать сеанс для обработки прерываний.

Платформа Основы AV для управления прерываниями использует в своих интересах неявную инициализацию, происходящую, когда Вы получаете ссылку на AVAudioSession объект, как показано здесь:

// implicitly initializes your audio session
AVAudioSession *session = [AVAudioSession sharedInstance];

session переменная теперь представляет инициализированный аудио сеанс и может сразу использоваться. Apple рекомендует неявную инициализацию при обработке прерываний звука с AVAudioSession уведомления прерывания класса, или с протоколами делегата AVAudioPlayer и AVAudioRecorder классы.

Добавление регулятора громкости и управления маршрутами

Используйте MPVolumeView класс для представления объема и направляющий управление для приложения. Представление объема обеспечивает ползунок для управления объемом из приложения и кнопки для выбора выходного маршрута аудио. Apple рекомендует использовать MPVolumeView средство выбора маршрута AVAudioSessionPortOverride при маршрутизации аудио встроенному динамику. Посмотрите Ссылку класса MPVolumeView.

Ответ на события дистанционного управления

События дистанционного управления позволяют пользователям управлять мультимедиа приложения. Если Ваше приложение играет звуковое содержимое или видеоконтент, Вы могли бы хотеть, чтобы он реагировал на события дистанционного управления, происходящие или из управления передачей или из внешних аксессуаров. iOS преобразовывает команды в UIEvent объекты и поставляют события приложению. Приложение отправляет их первому респонденту и, если первый респондент не обрабатывает их, они перемещаются цепочка респондента.

Ваше приложение должно быть “Теперь Игрой” приложения и в настоящее время игры аудио, прежде чем это сможет реагировать на события. Посмотрите События Дистанционного управления и Ссылку класса MPNowPlayingInfoCenter.

Активация и деактивация аудио сеанса

Система активирует Ваш аудио сеанс на запуске приложения. Несмотря на это, Apple рекомендует явно активировать сеанс — обычно как часть приложения viewDidLoad метод и набор предпочли аппаратные значения до активации Вашего аудио сеанса. Посмотрите Установку Предпочтительные Аппаратные Значения для примера кода. Это дает Вам возможность протестировать, успешно выполнилась ли активация. Однако, если Ваше приложение имеет игру/паузу элемент UI, запишите свой код так, чтобы пользователь нажал игру, прежде чем будет активирован сеанс. Аналогично, при изменении активного/неактивного состояния аудио сеанса, проверьте, чтобы гарантировать, что вызов успешен. Запишите свой код для корректной обработки отказа системы активировать сеанс.

Система деактивировала Ваш аудио сеанс для вызова по сигналу тревоги Часов или Календаря или входящего телефонного вызова. Когда пользователь отклоняет предупреждение или принимает решение проигнорировать телефонный вызов, система позволяет Вашему сеансу становиться активным снова. Повторно активировать ли сеанс в конце прерывания, зависит от типа приложения, как описано в Аудио Инструкциях Типом приложения.

Перечисление 1-1 показывает, как активировать Ваш аудио сеанс.

Перечисление 1-1  , Активирующееся аудио сеанс с помощью платформы Основы AV

NSError *activationError = nil;
BOOL success = [[AVAudioSession sharedInstance] setActive: YES error: &activationError];
if (!success) { /* handle the error in activationError */ }

Деактивировать Ваш аудио сеанс, передачу NO к setActive параметр.

В конкретном случае игры или записи аудио с AVAudioPlayer или AVAudioRecorder объект, система заботится об аудио оживлении сеанса на конец прерывания. Тем не менее, Apple рекомендует, чтобы Вы зарегистрировались для уведомлений и явно повторно активировали свой аудио сеанс. Таким образом можно гарантировать, что оживление успешно выполнилось, и можно обновить состояние и пользовательский интерфейс приложения. Для больше на этом, посмотрите рисунок 3-1.

Большинство приложений никогда не должно деактивировать свой аудио сеанс явно. Важные исключения включают VoIP (Передача речи по протоколу IP) приложения, приложения навигации «поворот за поворотом», и, в некоторых случаях, записывая приложения.

Проверка, играет ли другое аудио во время запуска приложения

Когда пользователь запускает Ваше приложение, звук может уже играть на устройстве. Например, Музыкальное приложение может играть музыку, или Safari может быть потоковым аудио, когда запускается Ваше приложение. Если Ваше приложение является игрой, эта ситуация является особенно выступом. Много игр имеют музыкальную звуковую дорожку, а также звуковые эффекты. В этом случае Звук в Инструкциях по Интерфейсу пользователя iOS советует Вам предполагать, что пользователи ожидают, что другое аудио будет продолжаться, поскольку они играют в Вашу игру, все еще играя звуковые эффекты игры.

Проверьте otherAudioPlaying свойство, чтобы определить, играет ли аудио уже при запуске приложения. Если другое аудио играет, когда Ваше приложение запускается, отключите звук звуковой дорожки своей игры и присвойтесь AVAudioSessionCategorySoloAmbient категория. Посмотрите Работу с Категориями для получения дополнительной информации о категориях.

Работа с аудио межприложения

В его наиболее канонической форме аудио межприложения позволяет одно приложение, названное приложением узла, для отправки его аудиовыхода в другое приложение, названное приложением узла. Однако для приложения узла также возможно отправить, его вывод к приложению узла, чтобы иметь приложение узла обрабатывают аудио и передают результат обратно приложению узла. Приложение узла должно иметь активный аудио сеанс; однако, для приложения узла только нужен активный аудио сеанс, если оно получает ввод от приложения узла или системы. Используйте следующие инструкции при установке аудио межприложения: