오디오

사운드가 app 경험의 주요 요소이든 단지 꾸밈음이든 간에, 사용자가 동작을 위해 사운드를 어떻게 기대하고 있는지, 그리고 그 기대를 어떻게 충족시켜야 할지 알 필요가 있습니다.

사용자는 볼륨 버튼, 무음 스위치, 헤드폰 조작, 그리고 화면에서의 볼륨 조절을 통해 사운드를 조작합니다. 많은 서드파티 악세서리들 또한 사운드 조작 기능을 포함하고 있습니다. 오디오는 내부나 외부 스피커, 헤드폰, 그리고 AirPlay나 블루투스를 이용한 무선기기를 통해 출력이 될 수 있습니다.

  • 무음. 사람들은 메시지가 도착했을 때의 알림소리, 전화 벨소리와 같은 예상치 못한 사운드에 방해받는 상황을 피하기 위해 기기의 무음 스위치를 켭니다. 또한, 키보드 소리, 효과음, 게임 배경음악, 피드백 사운드와 같이 불필요한 소리를 끄고싶어 하기도 합니다. 기기가 무음으로 설정되어 있을 때에는 미디어 재생, 알람, 음성/영상 통화와 같은 동작을 할때와 같이 명시적으로 소리가 나와야 하는 상황에서만 소리가 나야 합니다.

  • 볼륨. 물리 버튼이나 화면의 슬라이더로 볼륨 조절을 할때, 사용자는 음악과 in-app 사운드 효과를 포함한 시스템 전반의 모든 사운드 조절을 기대합니다. 유일한 예외사항은 전화 벨소리입니다. 전화 벨소리의 볼륨은 오디오가 재생되지 않을 때에는 항상 구분되어 조절하게 됩니다.

  • 헤드폰. 헤드폰을 이용하면 소리를 혼자서 듣을 수 있고 손이 자유로워집니다. 사용자는 헤드폰을 연결하면 방해 없이 사운드 경로가 자동으로 바뀌는 것을 기대하고, 헤드폰 연결을 해제하면 재생하던 오디오가 즉각적으로 멈추기를 기대합니다.

필요하다면 볼륨을 자동으로 조절해주세요, 단 전체 볼륨을 조절하지는 마세요. 당신의 app은 훌륭한 오디오 균형을 위해 상대적이고 독립적인 볼륨을 조절할 수 있습니다. 하지만 최종 출력은 항상 시스템 볼륨에 의해 조절되어야 합니다.

오디오를 다른 경로로 보내는 것(rerouting)을 적절한 상황에서 허용해주세요. 사용자는 종종 다른 오디오 출력 기기를 선택하고 싶어합니다. 예를 들어 음악을 들을 때, 거실의 스테레오 스피커, 차 오디오, 혹은 Apple TV에서 듣고 싶을 수 있습니다. 굳이 안 될 이유가 없다면 이러한 rerouting 기능을 지원해주세요.

오디오 조절을 허용할 때는 시스템에서 제공하는 볼륨 뷰(volume view)를 사용하세요. 오디오를 조절할 때 가장 좋은 인터페이스를 제공하는 방법은 볼륨 뷰를 사용하는 것입니다. 볼륨 뷰는 커스터마이즈가 가능합니다. 볼륨 슬라이더를 변경할 수 있고, 오디오 출력 경로를 설정하는 것도 할 수 있습니다. 자세한 내용을 보시려면, MPVolumeView를 보세요.

짧은 사운드나 진동은 시스템 사운드 서비스(System Sound Services)를 사용하세요. 자세한 내용은 System Sound Services를 참조하세요.

app에서 사운드가 중요하다면, 오디오를 분류하세요. 오디오 카테고리를 설정하면, 무음 스위치로 무음을 설정하거나, 다른 오디오와 믹스하거나, 백그라운드에서 재생할 수 있습니다. 사운드의 의도와 기기의 오디오 상태를 기반으로 카테고리를 선택하고 오디오 세션에 할당하세요. 예를 들어, 필요한 경우가 아니라면 다른 app에서 지금 내가 듣고 있던 음악을 멈출 수 없게 해야 합니다. 일반적으로는 app에서 오디오 녹음과 재생을 하는 경우를 제외하면, app이 구동중일때 오디오 카테고리는 바꾸지 않는 것이 좋습니다. 자세한 내용은 오디오 세션 프로그래밍 가이드를 보세요.

카테고리 의미 동작
Solo ambient 사운드가 필수적이지는 않지만, 다른 오디오를 무음으로 만듭니다. 게임의 사운드트랙을 예시로 들 수 있습니다. 무음 스위치에 반응합니다.
다른 사운드와 믹스되지 않습니다.
백그라운드에서 재생되지 않습니다.
Ambient 사운드가 필수적이지는 않고, 다른 오디오를 무음으로 만들지 않습니다. 예를 들면, 사용자가 게임 플레이를 하면서 게임의 사운드트랙 대신 다른 app에서 재생되는 음악을 들을 수도 있습니다. 무음 스위치에 반응합니다.
다른 사운드와 믹스됩니다.
백그라운드에서 재생되지 않습니다.
Playback 사운드가 필수적이고 다른 오디오와 믹스될 수 있습니다. 예를 들어, 오디오북이나 교육용 app에서 외국어를 가르치는 오디오를 들을 때 사용자는 app 밖에서도 들을 수 있기를 원할 것입니다. 무음 스위치에 반응하지 않습니다.
다른 사운드와 믹스 될 수도, 안 될 수도 있습니다.
백그라운드에서 재생할 수 있습니다.
Record 소리가 녹음됩니다. 녹음 기능이 있는 노트 app을 예로 들 수 있습니다. 노트 app의 특성상 녹음된 파일을 재생할 때에는 카테고리가 Playback으로 변경될 것입니다. 무음 스위치에 반응하지 않습니다.
다른 사운드와 믹스되지 않습니다.
백그라운드에서 녹음할 수 있습니다.
Play and record 사운드가 동시에 녹음되고 재생될 수 있는 가능성이 있습니다. 오디오 메시지 app이나 영상통화 app을 예로 들 수 있습니다. 무음 스위치에 반응하지 않습니다.
다른 사운드와 믹스 될 수도, 안 될 수도 있습니다.
백그라운드에서 녹음하고 재생할 수 있습니다.

오디오가 차단되면 적절한 때에 다시 오디오를 재생하세요. 때때로 재생중인 오디오가 다른 app의 오디오에 의해 차단되는 경우가 있습니다. 전화가 걸려오는 것과 같은 '일시적 차단'이 일어나면 이후에 다시 오디오를 재생해도 됩니다. 하지만 Siri가 음악을 재생하는 것과 같은 '영구적 차단'이 있으면 그렇지 못하겠죠. 현재 오디오가 재생되는 와중에 앞서 말한 '일시적 차단'이 발생하면, 당신의 app은 그 차단상황이 끝나는대로 그 오디오를 다시 재생해야 합니다. 예를 들어, 사운드트랙을 재생하던 게임과 오디오 재생하던 미디어 app은 일시적 차단이 끝나면 둘 다 다시 재생될 것입니다. 물론 애초에 차단이 발생할 때 오디오를 재생하지 않던 app은 차단이 끝나도 다시 재생할 필요가 없죠.

당신의 app이 일시적인 오디오 재생을 끝마치면 다른 app에서도 알 수 있도록 해주세요. 만약 당신의 app이 다른 app의 오디오를 일시적으로 차단할 수 있다면, 당신의 app은 오디오 세션을 적절하게 표기해서 다른 app이 다시 오디오를 재생해도 안전한 때를 알림받을 수 있게 해야 합니다. 관련 사항은 AVFoundation 안의 AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation 상수(constant)를 보세요.

이해할 수 있는 상황에서만 오디오 컨트롤에 반응하세요. 사용자는 당신의 app이 화면에 있든 백그라운드에 있든 상관없이 Control Center나 연결된 헤드폰의 버튼으로 app 인터페이스 바깥에서도 오디오 재생을 조작할 수 있습니다. 당신의 app이 오디오가 분명히 관련된 맥락에서, 혹은 AirPlay로 기기와 연결되어 오디오를 재생하고 있다면, 오디오 컨트롤에 반응해야 좋습니다. 하지만 오디오 컨트롤이 활성화 되더라도 다른 app이 재생중이던 오디오를 중지해서는 안됩니다.

오디오 컨트롤을 다른 용도로 사용하지 마세요. 사용자는 오디오 컨트롤이 모든 app에서 지속적으로 작동할 것이라고 기대합니다. 절대로 오디오 컨트롤이 가진 의미를 변형하지 마세요. 만약 당신의 app이 특정 컨트롤 기능을 지원하지 않는다면, 말 그대로 그 컨트롤에 반응할 수 없게 됩니다.