Android 10은 예를 들어 사용자가 접근성 서비스에서 제공하는 음성 명령으로 VoIP 통화 또는 동영상 녹화를 제어하려는 경우와 같이 둘 이상의 활성 오디오 캡처를 동시에 처리해야 하는 사용자 환경을 개선합니다.
오디오 프레임워크는 특정 권한이 있는 앱만 일반 앱과 동시에 캡처하는 것을 허용하는 정책을 구현합니다.
동시 정책은 애플리케이션이 캡처를 시작하지 못하도록 하는 것이 아니라 캡처된 오디오를 음소거함으로써 구현됩니다. 이를 통해 프레임워크는 다른 앱이 캡처를 완료한 후 마이크에 대한 전체 액세스 권한을 복구할 수 있는 경우에 앱이 캡처를 시작하지 못하도록 하지 않고도 활성 캡처 사용 사례의 수와 유형 변경을 동적으로 처리할 수 있습니다.
오디오 HAL 및 오디오 하위 시스템에 미치는 영향은 한 스트림만 활성 클라이언트에 음소거되지 않은 오디오를 제공하는 경우에도 여러 활성 입력 스트림을 동시에 지원해야 한다는 것입니다.
CDD 요구사항
동시 캡처 지원에 관한 요구사항은 CDD를 참고하세요.
오디오 HAL에서 상황 캡처
동시 캡처 시나리오는 활성 입력 스트림 수, 선택한 입력 장치 또는 전처리 구성에 따라 상황이 다를 수 있습니다.
동시 캡처는 다음 사이에서 발생할 수 있습니다.
- 애플리케이션 프로세서(AP)의 여러 입력 스트림
- 입력 스트림 및 음성 통화
- 저전력 핫워드 감지 기능을 구현하는 입력 스트림 및 오디오 DSP
AP 입력 스트림의 동시 활동
오디오 정책 구성 파일(audio_policy_configuration.xml
)은 오디오 프레임워크에서 동시에 열리고 활성화될 수 있는 입력 스트림 수를 결정하는 데 사용됩니다.
오디오 HAL은 최소한 열린 활성 구성 파일에 나열된 각 입력 프로필의 인스턴스를 하나 이상(sink
역할의 mixPort
) 지원해야 합니다.
기기 선택
여러 활성 클라이언트가 동일한 HAL 입력 스트림에 연결되면 프레임워크는 사용 사례 우선순위에 따라 이 입력 스트림에 적합한 기기를 선택합니다.
여러 입력 스트림이 활성화된 경우 스트림마다 다른 기기를 선택할 수 있습니다.
기술이 호환되는 경우 오디오 HAL 및 하위 시스템에서 여러 스트림이 블루투스 헤드셋 및 내장 마이크와 같은 여러 기기에서 캡처하도록 허용하는 것이 좋습니다.
비호환성이 있는 경우(예: 두 기기가 동일한 디지털 오디오 인터페이스 또는 백엔드를 공유하는 경우) 오디오 HAL은 기기 선택을 제어할 스트림을 선택해야 합니다.
이 경우에는 다음과 같습니다.
- 동일한 시나리오가 반복될 때 결과 상태는 일관적이어야 하며 동일한 기기 선택 옵션을 제공해야 합니다.
- 동시 실행 상태가 종료되면 나머지 활동 스트림은 이 스트림에서 처음 요청한 기기로 라우팅되어야 합니다.
우선순위 순서가 활성 사용 사례 사이에 있는 오디오 HAL에서 정의되는 경우 frameworks/av/services/audiopolicy/common/include/policy.h
의 source_priority()
에서 확인할 수 있는 순서와 동일한 순서를 따릅니다.
전처리 선택
오디오 프레임워크는 addEffect()
또는 removeEffect()
HAL 메서드를 사용하여 입력 스트림에 관한 전처리를 요청할 수 있습니다.
지정된 입력 스트림에 관한 전처리의 경우 오디오 프레임워크는 입력 스트림에서 가장 우선순위가 높은 활성 사용 사례에 해당하는 구성만 사용 설정합니다. 하지만 사용 사례 활성화 및 비활성화 중에 중복이 발생할 수 있으며, 이 경우 동시에 2개의 활성 프로세스(예: 에코 제거기 인스턴스 2개)가 동일한 입력 스트림에서 실행될 수 있습니다. 이 경우 HAL 구현은 수락할 요청을 선택하며, 프로세스가 비활성화될 때 활성 요청을 추적하고 올바른 상태를 복원합니다.
여러 캡처 스트림이 동시에 활성화되면 다른 스트림에서 다른 전처리 요청이 실행될 수도 있습니다.
HAL 및 오디오 하위 시스템 구현은 동일한 입력 장치를 공유하더라도 여러 스트림에 다른 전처리를 적용할 수 있어야 합니다. 즉, 기본 캡처 소스에서 스트림을 역다중화한 후에 전처리를 적용해야 합니다.
지정된 오디오 하위 시스템에서 기술적인 이유로 이와 같이 처리할 수 없는 경우에는 오디오 HAL이 기기 선택에 나열된 것과 유사한 우선순위 규칙을 적용해야 합니다.
음성 통화 및 AP 캡처 동시 실행
AP 캡처는 음성 통화가 진행되는 동안 이루어질 수 있습니다. 이는 Android 10에 새로 도입된 기능이 아니며 동시 캡처 기능과도 직접적인 관련은 없지만, 이 시나리오의 가이드라인은 알아두면 유용합니다.
통화 중에는 두 가지의 AP 캡처 유형이 필요합니다.
통화 RX 및 TX 캡처
통화 RX 및 TX 캡처는 AudioSource.VOICE_UPLINK
또는 AudioSource.VOICE_DOWNLINK
의 오디오 소스나 AudioDevice.IN_TELEPHONY_RX
기기를 사용하여 트리거됩니다.
오디오 HAL은 AudioDevice.IN_TELEPHONY_RX
기기에서 사용할 수 있는 경로를 사용하여 입력 프로필(sink
역할의 mixPort
)에 노출해야 합니다.
통화가 연결되면(AudioMode.IN_CALL
오디오 모드) AudioDevice.IN_TELEPHONY_RX
기기에서 하나 이상의 활성 캡처 스트림을 가질 수 있어야 합니다.
통화가 활성화되면 입력 장치에서 캡처
통화가 활성화되면(AudioMode.IN_CALL
오디오 모드) AP 입력 스트림의 동시 활동 섹션에 명시된 대로 AP에서 입력 스트림을 열고 활성화할 수 있어야 합니다.
그러나 AP 입력 스트림의 요청과 충돌하는 경우 기기 선택 및 전처리의 우선순위는 항상 음성 통화를 통해 이루어져야 합니다.
DSP 및 AP에서 동시 캡처
오디오 하위 시스템에 저전력 오디오 컨텍스트 또는 핫워드 감지 기능을 지원하는 DSP가 포함되는 경우 구현 시 AP 및 오디오 DSP에서 동시 캡처를 지원해야 합니다.
여기에는 초기 감지 단계에서의 DSP를 통한 캡처와 DSP를 통해 감지 기능이 트리거된 이후 AudioSource.HOTWORD
를 사용하는 AP를 통한 캡처가 모두 포함됩니다.
구현 설명어(ISoundTriggerHw.Properties.concurrentCapture = true
)를 통해 사운드 트리거 HAL이 보고한 동시 캡처 플래그에서 이를 반영해야 합니다.
또한 오디오 HAL은 AudioInputFlag.HW_HOTWORD
플래그에서 식별된 핫워드 캡처에 관한 프로필을 노출하고 입력해야 합니다. 구현 시 사운드 트리거 HAL에서 동시에 로드할 수 있는 사운드 모델의 수와 적어도 동일한 숫자의 스트림을 이 프로필에서 열고 활성화하도록 지원해야 합니다.
다른 입력 프로필이 활성 상태인 동안에도 이 입력 프로필에서 캡처할 수 있어야 합니다.
어시스턴트 구현에 미치는 영향
데이터 사용 및 사용자 알림에 관한 요구사항
동시 마이크 사용이 악용될 경우 비공개 사용자 데이터가 유출될 수 있으므로 어시스턴트 역할을 포함하도록 요청하는 권한이 있는 미리 로드된 앱에 다음 조건 및 보장을 요구해야 합니다.
- 사용자가 어시스턴트와 상호작용하지 않는 한 마이크를 통해 수집된 데이터는 기기를 벗어나면 안 됩니다. 예를 들면 핫워드가 트리거된 후입니다.
- 동시에 듣는 애플리케이션은 핫워드가 감지된 후 사용자에게 시각적 신호를 제공해야 합니다. 이를 통해 사용자는 향후에 말하는 내용이 어시스턴트 등의 다른 앱으로 전달된다는 사실을 파악할 수 있습니다.
- 사용자는 마이크 또는 어시스턴트 트리거를 사용 중지할 수 있어야 합니다.
- 오디오 녹음이 저장되면 사용자는 언제든지 녹음된 내용에 액세스하여 내용을 검토하고 삭제할 수 있어야 합니다.
Android 10의 기능 개선
어시스턴트가 서로를 차단하지 않음
Android 9 이하에서는 기기에 상시 사용 설정되어 있는 어시스턴트가 둘인 경우 둘 중 하나만 핫워드 듣기가 가능했습니다. 따라서 두 어시스턴트 간에 전환이 필요했습니다. Android 10에서는 기본 어시스턴트가 다른 어시스턴트와 동시에 들을 수 있으므로, 두 어시스턴트를 모두 사용하는 사용자에게 훨씬 더 원활한 경험을 제공합니다.
마이크를 켜진 상태로 두는 앱
Shazam 또는 Waze와 같은 앱에서 마이크를 켜진 상태로 두는 경우에도 기본 어시스턴트가 핫워드를 들을 수 있습니다.
기본이 아닌 어시스턴트 앱의 경우 Android 10에서의 동작에 관한 변경사항은 없습니다.
샘플 오디오 HAL 구현
이 문서의 가이드라인을 준수하는 오디오 HAL 구현 예는 AOSP에서 확인할 수 있습니다.