
"컴퓨터가 오디오 데이터를 처리하는 속도가 실제 재생/녹음 속도를 따라가지 못해 소리가 끊기는 현상"
① Underrun (언더런) - 주로 재생 시 발생
② Overrun (오버런) - 주로 녹음 시 발생
상황: 마이크 등으로 들어온 데이터를 컴퓨터가 빨리 가져가서 처리해야 하는데, 버퍼가 이미 꽉 차서 새로 들어오는 데이터를 저장할 공간이 없는 상태입니다.
결과: 새로 들어온 데이터가 버려지게 되어 녹음된 결과물에 중간중간 구멍이 생깁니다.
오디오는 끊김 없는 실시간성이 생명이다. 하지만 컴퓨터는 다른 작업(백그라운드 프로세스, 네트워크 등)도 함께 처리하기 때문에 오디오 처리가 뒤로 밀릴 수 있다.
버퍼 사이즈가 너무 작을 때: 지연 시간(Latency)을 줄이려고 버퍼를 너무 작게 설정하면, 컴퓨터가 데이터를 채워 넣을 시간이 부족해집니다.
CPU 부하가 높을 때: 다른 무거운 프로그램이 CPU를 점유하고 있으면 오디오 처리가 제때 이뤄지지 않습니다.
시스템 인터럽트(IRQ) 충돌: 특정 하드웨어가 CPU의 관심을 독점하여 오디오 카드의 요청을 방해할 때 발생합니다.
실시간 영상 처리 와 같이, 오디오 역시 실시간성이 중요하다.
버퍼 사이즈 조절: 지연 시간이 조금 늘어나더라도 버퍼 크기를 키우면 xrun을 방지할 수 있습니다.
실시간 커널(RT Kernel) 사용: 리눅스 환경이라면 오디오 프로세스에 최우선 순위를 부여하는 실시간 패치 커널을 사용합니다.
우선순위 설정: chrt 같은 명령어를 통해 오디오 관련 프로세스의 스케줄링 우선순위를 높입니다.
전력 관리 비활성화: CPU가 절전 모드로 들어가면서 클럭 속도가 변할 때 xrun이 발생하기 쉬우므로, 'High Performance' 모드로 고정하는 것이 좋습니다.