Работа с категориями

Аудио категория сеанса является ключом, идентифицирующим ряд аудио способов поведения для Вашего приложения. Путем установки категории Вы указываете свои аудио намерения к системе — такой как, должно ли Ваше аудио продолжаться, когда зеркально отражается переключатель Ringer / Ringer/Silent. Семь аудио категорий сеанса в iOS, вместе с рядом переопределения и переключателей модификатора, позволяют Вам настроить аудио поведение своего приложения.

Каждая аудио категория сеанса указывает определенный образец «да» и «нет» для каждых из следующих способов поведения, как детализировано в Таблице b-1:

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

Выбор лучшей категории

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

Для выбора лучшей категории рассмотрите:

Следующий список описывает категории и аудио поведение, связанное с ними. AVAudioSessionCategoryAmbient категория позволяет другому аудио продолжать играть; т.е. это - mixable приложение. Остающиеся категории указывают, что Вы хотите, чтобы другое аудио остановилось, когда Ваш сеанс становится активным. Однако можно настроить несмесительное «воспроизведение», и “играют и записывают” категории, чтобы позволить смешиваться, как описано в Подстройке Категории.

Расширение опций Используя категорию мультимаршрута

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

Ваше приложение может отправить различные аудиопотоки в различные выходные маршруты. Например, Ваше приложение могло отправить один аудиопоток в левый наушник, другой аудиопоток к правильному наушнику и третий аудиопоток к маршрутам HDMI. Рисунок 2-1 показывает пример отправки многократных файлов к различным аудио маршрутам.

Рисунок 2-1  , Отправляющий различные файлы в различные аудио маршруты

В зависимости от устройства и любых связанных аксессуаров, следующее является допустимыми выходными комбинациями маршрута:

Категория мультимаршрута поддерживает использование единственного входного порта.

Установка аудио категории сеанса

Для большинства приложений для iOS, устанавливая Вашу аудио категорию сеанса в запуске — и никогда не изменяя его — работает хорошо. Это обеспечивает лучший пользовательский опыт, потому что аудио поведение устройства остается непротиворечивым как Ваше выполнение приложения.

Для установки аудио категории сеанса вызовите setCategory:error: метод как показано в Перечислении 2-1. Для описаний всех категорий обратитесь к Выбору Best Category.

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

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

Используя режимы для специализации категории

В то время как категории устанавливают основные способы поведения для Вашего приложения, режимы используются для специализации аудио категории сеанса. Установите режим для категории для дальнейшего определения аудио способов поведения приложения. Существует семь режимов для выбора из:

Выбор категорий и режимов для AirPlay

Только определенные категории и режимы поддерживают AirPlay. Следующие категории поддерживают обоих зеркальные и незеркальные версии Трансляции:

AVAudioSessionCategoryPlayAndRecord категория только поддерживает зеркально отраженную Трансляцию.

Режимы только поддерживают AirPlay, когда используется в сочетании с категорией игры-и-записи. Следующие режимы поддерживают AirPlay, зеркально отражающий только:

Подстройка категории

Можно подстроить аудио категорию сеанса во множестве путей. В зависимости от категории Вы можете:

Можно переопределить характеристику прерывания AVAudioSessionCategoryPlayback, AVAudioSessionCategoryPlayAndRecord, и AVAudioSessionCategoryMultiRoute категории так, чтобы другому аудио позволили смешаться с Вашим. Для выполнения переопределения применяйтесь AVAudioSessionCategoryOptionMixWithOthers свойство к Вашему аудио сеансу. Когда его аудио сеанс идет активный, при установке приложения, чтобы быть mixable, приложение не прервет аудио из других non-mixable приложений. Кроме того, аудио Вашего приложения не будет прервано non-mixable аудио сеансом другого приложения, например Музыкальное приложение.

Можно программно влиять на маршрут аудиовыхода. При использовании AVAudioSessionCategoryPlayAndRecord категория, аудио обычно переходит к получателю (маленький динамик, Вы придерживаетесь уха когда на телефонном вызове). Можно перенаправить аудио динамику у основания телефона при помощи overrideOutputAudioPort:error: метод.

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

Запись разрешения

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

Вместо того, чтобы ожидать системы для запроса пользователя запись разрешения можно также использовать requestRecordPermission: метод для ручного выяснения у пользователя запись разрешения. Используя requestRecordPermission: метод позволяет Вашему приложению получать разрешение записи от пользователя за один раз, не прерывающего естественный поток приложения. Это предоставляет более гладкий опыт пользователю.