Технические вопросы и ответы QA1882

AVAudioSession - Объясненный AVAudioSessionSilenceSecondaryAudioHintNotification

Q: Можете Вы объяснять цель уведомления AVAudioSessionSilenceSecondaryAudioHintNotification.

A: iOS 8 представил новое вызванное свойство secondaryAudioShouldBeSilencedHint и новое уведомление AVAudioSessionSilenceSecondaryAudioHintNotification которые предназначаются, чтобы использоваться вместе для замены использования isOtherAudioPlaying при управлении Вторичным воспроизведением аудио для большинства приложений.

/* Will be true when another application with a non-mixable audio session is playing audio. Applications may use
this property as a hint to silence audio that is secondary to the functionality of the application. For example, a game app
using AVAudioSessionCategoryAmbient may use this property to decide to mute its soundtrack while leaving its sound effects unmuted.
Note: This property is closely related to AVAudioSessionSilenceSecondaryAudioHintNotification.
*/
@property(readonly) BOOL secondaryAudioShouldBeSilencedHint  NS_AVAILABLE_IOS(8_0);
/* Registered listeners that are currently in the foreground and have active audio sessions will be notified
 when primary audio from other applications starts and stops. Check the notification's userInfo dictionary
 for the notification type -- either begin or end.
 Foreground applications may use this notification as a hint to enable or disable audio that is secondary
 to the functionality of the application. For more information, see the related property secondaryAudioShouldBeSilencedHint.
*/
AVF_EXPORT NSString *const AVAudioSessionSilenceSecondaryAudioHintNotification NS_AVAILABLE_IOS(8_0);

Основное аудио по сравнению со вторичным аудио

Основное аудио - Аудио, абсолютно требующееся приложением. Это аудио должно всегда играть независимо от любого другого аудио, играемого другими приложениями, работающими на системе.

Вторичное аудио - Аудио, которое может улучшить приложение, но не абсолютно требуется. Когда другие приложения уже играют аудио в системе, это аудио может быть выключено.

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

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

При помощи secondaryAudioShouldBeSilencedHint свойство и AVAudioSessionSilenceSecondaryAudioHintNotification уведомление, игра может решить, когда отключить звук или не отключить звук ее вторичной звуковой дорожки.

Добровольное прерывание

Можно думать AVAudioSessionSilenceSecondaryAudioHintNotification как добровольное прерывание. iOS сообщает Вашему приложению, что другое приложение играет аудио, таким образом, позволяющее Вашему приложению решать, когда отключить звук или не отключить звук некоторых или всего его аудио в ответ на другое приложение, играя аудио. Это уведомление обеспечивает a AVAudioSessionSilenceSecondaryAudioHintType ключ словаря, содержащий значение, указывающее тип уведомления. Вызывают начать событие AVAudioSessionSilenceSecondaryAudioHintTypeBegin или событие конца вызывают AVAudioSessionSilenceSecondaryAudioHintTypeEnd.

/* keys for AVAudioSessionSilenceSecondaryAudioHintNotification */
/* value is an NSNumber representing an AVAudioSessionSilenceSecondaryAudioHintType */
AVF_EXPORT NSString *const AVAudioSessionSilenceSecondaryAudioHintTypeKey NS_AVAILABLE_IOS(8_0);
 
/* Used in AVAudioSessionSilenceSecondaryAudioHintNotification to indicate whether optional secondary audio muting should begin or end */
typedef NS_ENUM(NSUInteger, AVAudioSessionSilenceSecondaryAudioHintType)
{
    AVAudioSessionSilenceSecondaryAudioHintTypeBegin = 1,  /* the system is indicating that another application's primary audio has started */
    AVAudioSessionSilenceSecondaryAudioHintTypeEnd = 0,    /* the system is indicating that another application's primary audio has stopped */
} NS_AVAILABLE_IOS(8_0);

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

Ссылка

Новые функции и возможности в Core Audio WWDC 2014

См. AVAudioSession.h, который является частью AVFoundation для полных подробных данных.



История версии документа


ДатаПримечания
08.01.2015

Передовая статья

03.12.2014

Новый документ, обсуждающий новое уведомление AVAudioSessionSilenceSecondaryAudioHintNotification и secondaryAudioShouldBeSilencedHint свойство AVAudioSession.