오디오 속성

오디오 플레이어는 오디오 시스템이 지정된 소스에 관한 라우팅, 볼륨, 포커스 결정을 처리하는 방식을 정의하는 속성을 지원합니다. 애플리케이션은 스트리밍 서비스로 재생되는 음악이나 새 이메일 알림과 같은 오디오 재생에 속성을 부여한 다음, 프레임워크에 오디오 소스 속성을 전달할 수 있습니다. 이 프레임워크에서는 오디오 시스템이 이 속성을 사용하여 믹싱 결정을 내리고 애플리케이션에 시스템 상태에 관해 알려 줍니다.

Android 4.4 이전에는 프레임워크가 오디오 스트림 유형만 사용하여 믹싱 결정을 내렸습니다. 하지만 스트림 유형을 토대로 이러한 결정을 내리는 것은 여러 애플리케이션과 기기에서 품질 출력을 생성하는 데 너무 제한적입니다. 예를 들어 휴대기기에서 일부 애플리케이션(예: Google 지도)은 STREAM_MUSIC 스트림 유형을 토대로 운전 경로를 재생했습니다. 하지만 투영 모드(예: Android Auto)를 사용하는 휴대기기에서 애플리케이션은 운전 경로를 다른 미디어 스트림과 혼합할 수 없습니다.

Audio Attribute API를 사용하면 애플리케이션은 오디오 시스템에 용도(소스 재생 이유), 콘텐츠 유형(재생될 소스), 플래그(소스 재생 방식), 컨텍스트(Android 9에서 새로 도입됨) 등 특정 오디오 소스에 관한 세부정보를 제공합니다. 구문:

AudioAttributes {
    mUsage
    mContentType
    mSource
    mFlags
    mTags / mFormattedTags / mBundle    (key value pairs)
}
  • 용도: 소스가 재생되는 이유와 라우팅, 포커스, 볼륨 결정을 제어하는 이유를 지정합니다.
  • 콘텐츠 유형: 재생될 소스를 지정합니다(음악, 영화, 음성, 음향 효과, 알 수 없음).
  • 컨텍스트: 오디오 HAL에 추상화된 용도 값입니다.
  • 플래그: 소스 재생 방식을 지정합니다. 소리 재생 강제(일부 국가에서는 카메라 셔터음이 필수임) 및 하드웨어 오디오/동영상 동기화에 관한 지원이 포함됩니다.

동적 처리의 경우 애플리케이션은 영화, 음악, 음성 콘텐츠를 구분해야 하며, 음량 및 피크 샘플 값과 같은 데이터 자체에 관한 정보가 중요할 수도 있습니다.

속성 사용

용도는 스트림이 사용되는 컨텍스트를 지정하여 소리가 재생되는 이유와 소리가 사용되는 대상에 관한 정보를 제공합니다. 용도 정보는 스트림 유형보다 더 많은 내용을 설명하며, 플랫폼 또는 라우팅 정책은 이를 통해 볼륨 또는 라우팅 결정을 세분화할 수 있습니다.

인스턴스에 다음 용도 값 중 하나를 제공합니다.

  • USAGE_UNKNOWN
  • USAGE_MEDIA
  • USAGE_VOICE_COMMUNICATION
  • USAGE_VOICE_COMMUNICATION_SIGNALLING
  • USAGE_ALARM
  • USAGE_NOTIFICATION
  • USAGE_NOTIFICATION_TELEPHONY_RINGTONE
  • USAGE_NOTIFICATION_COMMUNICATION_REQUEST
  • USAGE_NOTIFICATION_COMMUNICATION_INSTANT
  • USAGE_NOTIFICATION_COMMUNICATION_DELAYED
  • USAGE_NOTIFICATION_EVENT
  • USAGE_ASSISTANCE_ACCESSIBILITY
  • USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
  • USAGE_ASSISTANCE_SONIFICATION
  • USAGE_GAME
  • USAGE_VIRTUAL_SOURCE
  • USAGE_ASSISTANT

오디오 속성 용도 값은 함께 사용할 수 없습니다. 예시는 USAGE_MEDIAUSAGE_ALARM 정의를 참조하고 예외는 AudioAttributes.Builder 정의를 참조하세요.

콘텐츠 유형

콘텐츠 유형은 소리가 무엇인지 정의하고 영화, 음성, 신호음/벨소리와 같은 콘텐츠의 일반적인 카테고리를 나타냅니다. 오디오 프레임워크는 콘텐츠 유형 정보를 사용하여 오디오 후처리 블록을 선택적으로 구성합니다. 콘텐츠 유형 제공은 선택사항이지만, 영화 스트리밍 서비스에 CONTENT_TYPE_MOVIE를 사용하고, 음악 재생 애플리케이션에 CONTENT_TYPE_MUSIC을 사용하는 것과 같이 콘텐츠 유형을 알 수 있는 경우에는 이를 명시해야 합니다.

인스턴스에 다음 콘텐츠 유형 값 중 하나를 제공합니다.

  • CONTENT_TYPE_UNKNOWN(기본)
  • CONTENT_TYPE_MOVIE
  • CONTENT_TYPE_MUSIC
  • CONTENT_TYPE_SONIFICATION
  • CONTENT_TYPE_SPEECH

오디오 속성 콘텐츠 유형 값은 함께 사용할 수 없습니다. 콘텐츠 유형에 관한 자세한 내용은 Audio Attribute API를 참조하세요.

컨텍스트

Android의 각 소리는 해당하는 애플리케이션과 소리를 생성하는 이유에 의해 식별되며, Android 기기는 이 정보를 사용하여 소리를 제공하는 방식을 결정합니다. Android 8.x 이하에서 애플리케이션은 기존 스트림 유형(예: AudioSystem.STREAM_MUSIC) 또는 AudioAttributes을 사용하여 소리 생성 이유를 보고할 수 있습니다. Android 9에서 AudioAttributes.usage 값은 HAL 수준에서 컨텍스트로 추상화됩니다.

HAL 오디오 컨텍스트 AudioAttributes 용도
MUSIC MEDIA
VOICE_COMMAND USAGE_ASSISTANT
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
CALL VOICE_COMMUNICATION
RINGTONE NOTIFICATION_RINGTONE
NOTIFICATION NOTIFICATION
ALARM ALARM
SYSTEM_SOUND ASSISTANCE_SONIFICATION
UNKNOWN UNKNOWN

인스턴스에 다음 CONTEXT_NUMBER 값 중 하나를 제공할 수 있습니다.

  • MUSIC_CONTEXT // 음악 재생
  • NAVIGATION_CONTEXT // 내비게이션 길 찾기
  • VOICE_COMMAND_CONTEXT // 음성 명령 세션
  • CALL_RING_CONTEXT // 음성 통화 벨 울림
  • CALL_CONTEXT // 음성 통화
  • ALARM_CONTEXT // Android 알람 소리
  • NOTIFICATION_CONTEXT // 알림
  • SYSTEM_SOUND_CONTEXT // 사용자 상호작용 소리(버튼 클릭 등)

플래그

플래그는 오디오 프레임워크가 오디오 재생에 효과를 적용하는 방식을 지정합니다. 인스턴스에 다음 플래그 중 하나 이상을 제공합니다.

  • FLAG_AUDIBILITY_ENFORCED. 소리를 낼 수 있도록 시스템에 요구합니다. 카메라 셔터음을 강제로 울리는 등 기존 STREAM_SYSTEM_ENFORCED의 요구사항을 해결하는 데 사용합니다.
  • HW_AV_SYNC. 하드웨어 A/V 동기화를 지원하는 출력 스트림을 선택하도록 시스템에 요청합니다.

오디오 속성 플래그는 비배타적이므로 조합할 수 있습니다. 이러한 플래그에 관한 자세한 내용은 Audio Attribute API를 참조하세요.

예시

이 예시에서 AudioAttributes.Builder는 새 AudioTrack 인스턴스에서 사용할 AudioAttributes를 정의합니다.

AudioTrack myTrack = new AudioTrack(
  new AudioAttributes.Builder()
 .setUsage(AudioAttributes.USAGE_MEDIA)
    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
    .build(),
  myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession);

호환성

애플리케이션 개발자는 Android 5.0 이상용 애플리케이션을 만들거나 업데이트할 때 오디오 속성을 사용해야 합니다. 그러나 애플리케이션은 속성을 사용할 필요가 없고 기존 스트림 유형만 처리하거나 속성을 인식하지 못한 상태를 유지할 수 있습니다(예: 재생 중인 콘텐츠에 관해 모르는 일반 미디어 플레이어).

이러한 경우 프레임워크는 기존 오디오 스트림 유형을 오디오 속성으로 자동 변환하여 이전 기기 및 Android 릴리스와의 하위 호환성을 유지합니다. 하지만 프레임워크는 기기, 제조업체 또는 Android 릴리스에 이 매핑을 강제하거나 보장하지 않습니다.

호환성 매핑:

Android 5.0 이상 Android 4.4 이전
CONTENT_TYPE_SPEECH
USAGE_VOICE_COMMUNICATION
STREAM_VOICE_CALL
CONTENT_TYPE_SONIFICATION
USAGE_ASSISTANCE_SONIFICATION
STREAM_SYSTEM
CONTENT_TYPE_SONIFICATION
USAGE_NOTIFICATION_RINGTONE
STREAM_RING
CONTENT_TYPE_MUSIC
USAGE_UNKNOWN
USAGE_MEDIA
USAGE_GAME
USAGE_ASSISTANCE_ACCESSIBILITY
USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
STREAM_MUSIC
CONTENT_TYPE_SONIFICATION
USAGE_ALARM
STREAM_ALARM
CONTENT_TYPE_SONIFICATION
USAGE_NOTIFICATION
USAGE_NOTIFICATION_COMMUNICATION_REQUEST
USAGE_NOTIFICATION_COMMUNICATION_INSTANT
USAGE_NOTIFICATION_COMMUNICATION_DELAYED
USAGE_NOTIFICATION_EVENT
STREAM_NOTIFICATION
CONTENT_TYPE_SPEECH (@hide) STREAM_BLUETOOTH_SCO
FLAG_AUDIBILITY_ENFORCED (@hide) STREAM_SYSTEM_ENFORCED
CONTENT_TYPE_SONIFICATION
USAGE_VOICE_COMMUNICATION_SIGNALLING
(@hide) STREAM_DTMF

지원 중단된 스트림 유형

Android 9에서 다음 자동차용 스트림 유형은 지원 중단됩니다.

  • STREAM_DEFAULT
  • STREAM_VOICE_CALL
  • STREAM_SYSTEM
  • STREAM_RING
  • STREAM_MUSIC
  • STREAM_ALARM
  • STREAM_NOTIFICATION
  • STREAM_BLUETOOTH_SCO
  • STREAM_SYSTEM_ENFORCED
  • STREAM_DTMF
  • STREAM_TTS
  • STREAM_ACCESSIBILITY

자세한 내용은 자동차 오디오를 참조하세요.