저사양 모바일 기기의 사운드 지연과 네이티브 오디오 에셋 비교
저사양 모바일 기기, 특히 Android에서 특정 효과음이 입력보다 늦게 나는 현상이 있었다. Unity의 사운드 처리 경로를 거치는 데 걸리는 시간이 원인이라고 보고, 네이티브 오디오로 바로 재생하는 에셋을 비교했다.
Unity의 사운드 처리 경로
섹션 제목: “Unity의 사운드 처리 경로”Unity에서 효과음은 다음 경로를 거쳐 출력된다.
AudioClip → AudioSource → AudioMixerGroup → 이펙트 처리 → FMOD 믹서 → 단일 오디오 스트림 → Unity가 할당한 네이티브 출력 → 출력비교한 네이티브 오디오 에셋은 클립을 네이티브 쪽에 직접 만들고, 저지연 네이티브 출력으로 바로 보낸다.
AudioClip → 네이티브 쪽에 직접 생성 → 저지연 네이티브 출력(Android는 OpenSL ES) → 출력에셋 설명에 따르면 Android에서는 C/NDK 수준에서 OpenSL ES로 출력을 할당한다.
에셋 비교
섹션 제목: “에셋 비교”Android Native Audio
섹션 제목: “Android Native Audio”Android Native Audio는 무료 에셋이다. 다음 이유로 쓰지 않았다.
- 마지막 릴리스가 2016년 12월 2일이다.
- Android에서만 동작한다.
- 사운드 파일을
StreamingAssets에 넣어야 해서 빌드 용량이 늘어난다. - 빌드해서 테스트했을 때 지연이 줄었다고 느낄 만큼의 차이가 없었다.
유료 네이티브 오디오 에셋
섹션 제목: “유료 네이티브 오디오 에셋”두 번째로 비교한 유료 에셋($29)은 Android와 iOS 기기에서만 동작하고, Unity 2019.4.34 이상을 요구한다. 테스트에서 지연 시간이 줄어든 것을 체감했다.
한계는 다음과 같다.
- 오디오를 믹싱하지 않아서 새로 재생하면 이전 재생이 끊긴다.
- 압축된 오디오를 쓸 수 없다.
- Unity 쪽 음소거 설정과 따로 동작한다.
- Unity 메인 스레드와 별개 스레드에서 동작하고, 동시 호출에 안전하지 않다.
- 처음 재생 전에 워밍업이 필요할 수 있다.
유료 에셋은 버튼음처럼 짧게 한 번 나는 효과음에만 쓴다.