Работа с категориями
Аудио категория сеанса является ключом, идентифицирующим ряд аудио способов поведения для Вашего приложения. Путем установки категории Вы указываете свои аудио намерения к системе — такой как, должно ли Ваше аудио продолжаться, когда зеркально отражается переключатель Ringer / Ringer/Silent. Семь аудио категорий сеанса в iOS, вместе с рядом переопределения и переключателей модификатора, позволяют Вам настроить аудио поведение своего приложения.
Каждая аудио категория сеанса указывает определенный образец «да» и «нет» для каждых из следующих способов поведения, как детализировано в Таблице b-1:
Прерывания non-mixable аудио приложений: Когда Ваше приложение активирует свой аудио сеанс, если да, non-mixable приложения будет прерван.
Заставленный замолчать переключателем Silent: Когда пользователь перемещает переключатель Silent в тихий, если да, Ваше аудио заставлено замолчать. (На iPhone этот переключатель вызывают переключателем Ring/Silent.)
Аудиовход поддержек: Если да, аудиовход приложения (запись), позволяется.
Аудиовыход поддержек: Если да, аудиовыход приложения (воспроизведение), позволяется.
Большинство приложений только должно установить категорию один раз в запуске. Однако можно изменять категорию так часто, как Вы должны и можете сделать так, активен ли Ваш сеанс или неактивен. Если Ваш сеанс неактивен, запрос категории отправлен при активации сеанса. Если Ваш сеанс уже активен, запрос категории сразу отправлен.
Выбор лучшей категории
Точные способы поведения, связанные с каждой категорией, не являются объектом управления Вашего приложения, а скорее установлены операционной системой. Apple может совершенствовать поведение категории в будущих версиях iOS. Ваша лучшая стратегия состоит в том, чтобы выбрать категорию, наиболее точно описывающую Ваши намерения для аудио поведения, которое Вы хотите. Приложение, Аудио Категории Сеанса и Режимы, суммирует подробные данные поведения для каждой категории.
Для выбора лучшей категории рассмотрите:
Вы хотите играть аудио, записать аудио, сделать обоих, или просто выполнить оффлайновую обработку аудиоданных?
Аудио то, что Вы играете важный или периферийный для использования Вашего приложения? Если важный, лучшая категория является той, поддерживающей продолжительное воспроизведение, когда переключатель Ring/Silent установлен в тихий. Если периферийное устройство, выберите категорию, идущую тихая с набором переключателя Ring/Silent к тихому.
Когда пользователь запускает Ваше приложение, является другое аудио (такое как Музыкальное приложение) игрой? Проверка во время запуска позволяет Вам перейти. Например, игровое приложение могло выбрать конфигурацию категории, позволяющую музыке продолжаться, если это уже играет, или выберите различную конфигурацию категории для поддержки встроенной звуковой дорожки приложения иначе.
Следующий список описывает категории и аудио поведение, связанное с ними. AVAudioSessionCategoryAmbient
категория позволяет другому аудио продолжать играть; т.е. это - mixable приложение. Остающиеся категории указывают, что Вы хотите, чтобы другое аудио остановилось, когда Ваш сеанс становится активным. Однако можно настроить несмесительное «воспроизведение», и “играют и записывают” категории, чтобы позволить смешиваться, как описано в Подстройке Категории.
AVAudioSessionCategoryAmbient
— Воспроизведение только. Звуки игр, добавляющие полировку или интересующие, но не важны для использования приложения. Когда экран блокирует, Используя эту категорию, Ваше аудио заставлено замолчать переключателем Ring/Silent и.AVAudioSessionCategorySoloAmbient
— Воспроизведение (По умолчанию) только. Заставляет аудио замолчать, когда пользователь переключает переключатель Ring/Silent на «тихую» позицию и когда экран блокирует. Эта категория отличается отAVAudioSessionCategoryAmbient
категория только, в которой это прерывает другое аудио.AVAudioSessionCategoryPlayback
— Воспроизведение только. Аудио игр даже с заблокированным экраном и с набором переключателя Ring/Silent к тихому. Используйте эту категорию для приложения, воспроизведение аудио которого имеет основное значение.AVAudioSessionCategoryRecord
— Запись только. ИспользоватьAVAudioSessionCategoryPlayAndRecord
если Ваше приложение также играет аудио.AVAudioSessionCategoryPlayAndRecord
— Воспроизведение и запись. Ввод и вывод не должен происходить одновременно, но может в случае необходимости. Используйте для аудио приложений чата.AVAudioSessionCategoryAudioProcessing
— Оффлайновая обработка аудиоданных только. Выполняет оффлайновую обработку аудиоданных и никакую игру или запись.AVAudioSessionCategoryMultiRoute
— Воспроизведение и запись. Позвольте одновременный ввод и вывод для различных аудиопотоков, например, USB и вывода наушника. Приложение DJ получило бы преимущества от использования категории мультимаршрута. В то время как другая дорожка играет, DJ часто должен слушать одну дорожку музыки. В то время как текущий трек играется для танцоров, Используя категорию мультимаршрута, приложение DJ может играть будущие треки через наушники.
Расширение опций Используя категорию мультимаршрута
Категория мультимаршрута работает немного по-другому, чем другие категории. Все категории следуют “в последний раз в победах” правило, где последнее устройство включило маршрут ввода или вывода, доминирующее устройство. Однако категория мультимаршрута позволяет приложению использовать все связанные выходные порты вместо только последнего - в порту. Например, если Вы слушаете аудио через маршрут вывода HDMI и включаете ряд наушников, аудио проигрывает наушники. Ваше приложение может продолжать играть аудио через маршрут вывода HDMI, также играя аудио через наушники.
Ваше приложение может отправить различные аудиопотоки в различные выходные маршруты. Например, Ваше приложение могло отправить один аудиопоток в левый наушник, другой аудиопоток к правильному наушнику и третий аудиопоток к маршрутам HDMI. Рисунок 2-1 показывает пример отправки многократных файлов к различным аудио маршрутам.
В зависимости от устройства и любых связанных аксессуаров, следующее является допустимыми выходными комбинациями маршрута:
USB и наушники
HDMI и наушники
LineOut и наушники
Категория мультимаршрута поддерживает использование единственного входного порта.
Установка аудио категории сеанса
Для большинства приложений для 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 */ } |
Используя режимы для специализации категории
В то время как категории устанавливают основные способы поведения для Вашего приложения, режимы используются для специализации аудио категории сеанса. Установите режим для категории для дальнейшего определения аудио способов поведения приложения. Существует семь режимов для выбора из:
AVAudioSessionModeDefault
— Режим по умолчанию, работающий со всеми категориями и конфигурирующий устройство для общего использования.AVAudioSessionModeVoiceChat
— Для Речи по IP (VoIP) приложения. Этот режим может использоваться только сAVAudioSessionCategoryPlayAndRecord
категория. Сигналы оптимизированы для речи посредством предоставленной систему обработки сигналов и наборов режимаAVAudioSessionCategoryOptionAllowBluetooth
.Набор допустимых аудио маршрутов оптимизирован для опыта голосового чата. Когда встроенные микрофоны используются, система автоматически выбирает лучшую комбинацию встроенных микрофонов для голосового чата.
AVAudioSessionModeVideoChat
— Для приложений видео-чата, таких как FaceTime. Режим видео-чата может только использоваться сAVAudioSessionCategoryPlayAndRecord
категория. Сигналы оптимизированы для речи посредством предоставленной систему обработки сигналов и наборовAVAudioSessionCategoryOptionAllowBluetooth
иAVAudioSessionCategoryOptionDefaultToSpeaker
.Набор допустимых аудио маршрутов оптимизирован для опыта видео-чата. Когда встроенные микрофоны используются, система автоматически выбирает лучшую комбинацию встроенных микрофонов для видео-чата.
AVAudioSessionModeGameChat
— Для игровых приложений. Этот режим установлен автоматически приложениями то использование aGKVoiceChat
возразите иAVAudioSessionCategoryPlayAndRecord
категория. Игровой режим чата использует те же параметры маршрутизации в качестве режима видео-чата.AVAudioSessionModeVideoRecording
— Для приложений, использующих камеру для получения видео. Режим видеозаписи может использоваться только сAVAudioSessionCategoryPlayAndRecord
иAVAudioSessionCategoryRecord
категории. Сигналы изменяются предоставленной систему обработкой сигналов.Используйте
AVCaptureSession
API в сочетании с режимом видеозаписи для большего управления маршрутов ввода и вывода. Например, установкаautomaticallyConfiguresApplicationAudioSession
свойство автоматически выбирает лучший входной маршрут в зависимости от устройства и используемой камеры.AVAudioSessionModeMeasurement
— Для приложений, которые должны минимизировать сумму предоставленной систему обработки сигналов к входным и выходным сигналам. Этот режим может только использоваться со следующими категориями: запись, игра-и-запись и воспроизведение. Входные сигналы направляются через основной микрофон для устройства.AVAudioSessionModeMoviePlayback
— Для приложений, проигрывающих фильмы. Этот режим может использоваться только сAVAudioSessionCategoryPlayback
категория.
Выбор категорий и режимов для AirPlay
Только определенные категории и режимы поддерживают AirPlay. Следующие категории поддерживают обоих зеркальные и незеркальные версии Трансляции:
AVAudioSessionCategorySoloAmbient
AVAudioSessionCategoryAmbient
AVAudioSessionCategoryPlayback
AVAudioSessionCategoryPlayAndRecord
категория только поддерживает зеркально отраженную Трансляцию.
Режимы только поддерживают AirPlay, когда используется в сочетании с категорией игры-и-записи. Следующие режимы поддерживают AirPlay, зеркально отражающий только:
AVAudioSessionModeDefault
AVAudioSessionModeVideoChat
AVAudioSessionModeGameChat
Подстройка категории
Можно подстроить аудио категорию сеанса во множестве путей. В зависимости от категории Вы можете:
Позвольте другому аудио (такой как из Музыкального приложения) смешиваться с Вашим, когда категория обычно запретит его
Измените маршрут аудиовыхода с получателя на динамик, если никакой другой маршрут не доступен
Укажите, что другое аудио должно сократить в объеме («утка»), когда Ваш аудио сеанс активен
Можно переопределить характеристику прерывания AVAudioSessionCategoryPlayback
, AVAudioSessionCategoryPlayAndRecord
, и AVAudioSessionCategoryMultiRoute
категории так, чтобы другому аудио позволили смешаться с Вашим. Для выполнения переопределения применяйтесь AVAudioSessionCategoryOptionMixWithOthers
свойство к Вашему аудио сеансу. Когда его аудио сеанс идет активный, при установке приложения, чтобы быть mixable, приложение не прервет аудио из других non-mixable приложений. Кроме того, аудио Вашего приложения не будет прервано non-mixable аудио сеансом другого приложения, например Музыкальное приложение.
Можно программно влиять на маршрут аудиовыхода. При использовании AVAudioSessionCategoryPlayAndRecord
категория, аудио обычно переходит к получателю (маленький динамик, Вы придерживаетесь уха когда на телефонном вызове). Можно перенаправить аудио динамику у основания телефона при помощи overrideOutputAudioPort:error:
метод.
Наконец, когда аудио играет, можно улучшить категорию для автоматического понижения объема другого аудио. Это могло использоваться, например, в приложении осуществления. Скажите, что пользователь тренируется Музыкальному приложению, когда Ваше приложение хочет наложить словесное сообщение — например, “Вы располагали в ряд в течение 10 минут”. Чтобы гарантировать, что сообщение из Вашего приложения понятно, применяйтесь AVAudioSessionCategoryOptionDuckOthers
свойство к Вашему аудио сеансу. Когда ныряние имеет место, все другое аудио на устройстве — кроме телефонного аудио — понижается в объеме. Приложения, использующие ныряние, должны управлять состоянием активации своего сеанса. Активируйте аудио сеанс до игры аудио и деактивируйте сеанс после игры аудио.
Запись разрешения
Запускаясь в iOS 7, Ваше приложение должно спросить и получить разрешение от пользователя, прежде чем можно будет записать аудио. Если пользователь не дает Ваше разрешение приложения записать аудио, то только тишина зарегистрирована. Система автоматически предлагает пользователю разрешение при использовании категории, поддерживающей запись, и приложение пытается использовать входной маршрут.
Вместо того, чтобы ожидать системы для запроса пользователя запись разрешения можно также использовать requestRecordPermission:
метод для ручного выяснения у пользователя запись разрешения. Используя requestRecordPermission:
метод позволяет Вашему приложению получать разрешение записи от пользователя за один раз, не прерывающего естественный поток приложения. Это предоставляет более гладкий опыт пользователю.