버전
menu_open
대상 플랫폼:
Wwise SDK 2023.1.3
Android의 레이턴시 제어하기

Android 오디오 레이턴시는 모든 애플리케이션에 항상 까다로운 문제입니다. 일반적인 레이턴시는 100 ms 이하이지만, 어떤 장치는 150 ms 까지 레이턴시를 내기도 합니다.

최근 OS 버전에서 구글은 '빠른 오디오 경로'를 제공하고 있습니다. 일정 조건이 맞을 경우, 이를 이용해 내부 프로세스 과정을 건너뛰어 OS와 하드웨어 프로세스의 레이턴시를 현저히 줄입니다. 전반적인 레이턴시는 몇 십 밀리세컨드로 줄어들 수 있습니다. 하드웨어 제조업체가 빠른 오디오 경로를 구현하는 것이 의무는 아니기 때문에 많은 경우 적용돼있지 않습니다. 뿐만 아니라 일부 기기는 실제 구현이 안되어 있어도 빠른 경로를 사용합니다. 따라서 게임을 사용자의 기기에 빠른 오디오 경로가 있는지 여부에만 의존해 개발할 수는 없습니다. 보다 넓은 시장을 목표로 하는 게임이라면, 이 기능을 배제하고 게임 오디오를 설계해야 합니다.

일반적으로 낮은 레이턴시는 높은 CPU 비용을 필요로 합니다. RTPC 업데이트의 프로세스와 게임 오브젝트 위치 지정, 기타 게임 입력은 프레임 단위로 처리됩니다. 즉, 작은 프레임일수록 자주 처리됩니다. 레이턴시와 CPU 사용간 적절한 균형은 직접 실험을 해봐야만 정확히 알 수 있습니다. 일정하게 정해진 규칙이 없는 셈입니다.

Wwise 초기화 설정으로 레이턴시 제어하기

다음과 같은 몇 개의 설정으로 Wwise SDK에서 오디오 레이턴시를 제어할 수 있습니다.

기본 설정, 일괄 적용 가능한 레이턴시

AK::SoundEngine::GetDefaultSettings()AK::SoundEngine::GetDefaultPlatformInitSettings() 로부터 반환되는 기본 설정은 일반적인 환경에서 대부분의 기기에 대해 비교적 안전한 설정이라고 할 수 있습니다. 이를 이용하면,

  • uSampleRate 를 하드웨어 선호 레이트로 설정합니다. 주로 48 kHz나 44.1 kHz로 설정됩니다.
  • uNumSamplesPerFrame 을 하드웨어 선호 레이트로 설정합니다. 주로 128, 192 또는 240 샘플 순이지만 장치에 따라 더 높을 수도 있습니다.
  • uNumRefillsInVoice4로 설정합니다.

장점: 이 설정은 장치가 지원하는 빠른 경로를 선택합니다. 또한, 오디오 디자인의 CPU 사용 제한을 크게 줄입니다.
단점: CPU 변동에 따른 일부 공간을 허용하도록 네 개의 오디오 프레임이 사전 처리되어, 여유 공간이 필요 없는 장치에서 높은 레이턴시를 발생시킬 수 있습니다.

최저 레이턴시 설정

최저 레이턴시로 Wwise를 초기화하려면, AK::SoundEngine::GetDefaultSettings()AK::SoundEngine::GetDefaultPlatformSettings() 를 호출한 후 직접 uNumRefillsInVoice 를 2로 바꿔줍니다.

장점: 최저 레이턴시 사용 가능.
단점: 가용 CPU가 제한됩니다. 오디오 렌더링에 할당된 시간이 매우 짧으며 시스템의 다른 이벤트에 의해 쉽게 방해받을 수 있습니다. 오디오 디자인의 CPU 오버헤드(RTPC, Switch, 위치 지정, 컨테이너)를 중점적으로 예의주시해야 합니다.

uNumRefillsInVoice가 너무 낮게 설정됐을 경우 발생하는 현상.

오디오 프레임을 처리하는 데 필요한 시간이 CPU가 처리할 수 있는 것보다 적을 경우, 오디오 고갈이 발생합니다. 이 때, 게임이 무음을 출력하고 있지 않으면 틱틱거리거나 끊기는 소리가 들릴 수 있습니다.

Android에서 이러한 현상이 발생할 경우, Wwise는 자동으로 내부 버퍼 크기를 약간 늘려 나중에 발생할 수 있는 고갈을 방지합니다. Wwise에서는 고갈이 발생하지 않을 만큼 버퍼 공간이 충분해질 때까지 오디오 고갈이 발생하는 모든 프레임마다 이러한 처리를 합니다. 이 때, Wwise는 레이턴시와 CPU 사용 간 최적의 균형을 찾아냅니다.

이 처리 과정은 비교적 빠른 편이어서, 오디오가 끊기는 소리는 게임이 처음 시작된 후, 또는 앱이 백그라운드 상태에서 재개된 후 단 몇 밀리세컨드 동안만 들리게 됩니다.

만약 이러한 작은 끊김도 허용해서는 안 될 경우, uNumRefillsInVoice 에서 고갈이 절대 발생하지 않도록 초기값을 충분히 큰 값으로 설정해놓으면 이러한 동작이 발생하지 않게 할 수 있습니다. uNumRefillsInVoice 는 최소 3으로 설정해야 하며, 대부분의 게임에서는 CPU 사용 변동에 대비해 여분을 더해 4로 돼있습니다.

블루투스 예외

Android 프로그래머 정보에서 언급했듯이, 블루투스 기기는 낮은 레이턴시가 되거나 빠른 경로를 사용할 수 없습니다. 사실 블루투스 기기에서 아무런 오류를 내지 않는 오디오를 만들기 위해선 버퍼링이 훨씬 높아야 하고 프레임도 커야 합니다. Wwise는 블루투스 헤드셋의 사용을 감지해 자동으로 오디오 하드웨어가 8,192 샘플 레이턴시(약 180 ms)를 갖도록 재설정합니다.


이 페이지가 도움이 되었나요?

지원이 필요하신가요?

질문이 있으신가요? 문제를 겪고 계신가요? 더 많은 정보가 필요하신가요? 저희에게 문의해주시면 도와드리겠습니다!

지원 페이지를 방문해 주세요

작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.

프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.

Wwise를 시작해 보세요