Agora 더블 버퍼링 기반 음성 녹음
렌더링 프레임을 지키면서 실시간 음성 전송·녹음·립싱크를 동시에 수행하는 더블 버퍼링 구조. 실시간 오디오를 AI 모델 입력으로 잇는 축의 시작점
Moii · 2022 ~ 2025
Summary요약
문제
Agora 음성 공유를 실시간 녹음하는 기능이 필요했지만, 제공 API를 그대로 사용하면 심각한 성능 저하가 발생해 실시간 대화에 지장을 주었습니다.
역할
API 문서 분석과 Agora 기술지원팀 협의로 스펙을 확정하고, 더블 버퍼링 기반 버퍼 전달 구조를 설계·구현했습니다.
성과
프레임을 유지하면서 다중 사용자 음성 전송과 녹음, 아바타 립싱크를 동시에 수행할 수 있게 되었습니다. Unity MainThread의 제한된 연산 자원에 맞는 멀티스레드 최적화 전략을 정립했고, 이 경험은 이후 디지털치료기기의 실시간 음성 녹음 모듈(청크 녹음, dB 측정, 파형 출력)을 음성 분석 모델 입력단으로 만드는 작업으로 이어졌습니다.
Technical Deep Dive
업무 동기
Agora는 실시간 음성, 영상, 메시지 등 다양한 통신 기능을 제공하는 플랫폼이며, Moii는 Agora를 활용해 음성 채팅 서비스를 제공하고 있습니다.
사용자 간 대화 기능을 지원하면서 두 가지 주요 요구사항이 발생했습니다.
- 사용자의 음성 입력 여부에 따라 아바타가 립싱크하는 기능
- Agora를 통해 공유되는 음성을 실시간으로 녹음하는 기능
첫 번째 기능은 제공되는 API로 간단히 구현할 수 있었지만, 두 번째 기능은 API 사용 시 심각한 성능 저하가 발생하는 문제가 있었습니다. 실시간 유저 간 소통에 지장이 없으면서 동시에 음성 녹음이 원활히 이루어져야 했기 때문에, API 기반의 최적화 작업을 진행하게 되었습니다.
업무 전개
- 개발자 문서를 통해 관련 API를 파악하고 최적화 개요를 수립
- 문서에 없는 동작은 Agora 기술지원팀 Slack 채널로 직접 문의하여 스펙 확정
- 더블 버퍼링 기반의 버퍼 전달 구조를 목표로 설계·구현
- C# 기반 성능 최적화 RingBuffer 제작, 실시간 스트리밍 전달을 위한 다중 Thread 연결 구조 구현, 대용량 버퍼 전달 과정 최적화
전체 흐름은 워크 다이어그램 (Figma)에서 확인할 수 있습니다.
시연 영상
업무 성과
프레임(렌더링)을 유지하면서 실시간으로 음성을 다중 사용자에게 전송함과 동시에 음성을 녹음하고 아바타의 립싱크를 수행할 수 있게 되었습니다.
이 과정에서 Thread의 특성을 이해하고 Multi Thread를 활용하는 능력이 크게 향상되었으며, Unity MainThread의 제한된 연산 자원을 이해하고 거기에 맞는 최적화 전략을 수립할 수 있게 되었습니다.