오디오 기술 / 전문 해설

노트 타이밍과 오디오 지연을 구분하는 기준

노트가 판정선에 닿은 시각과 음악 파일의 위치, 출력 장치가 재생하는 위치를 나눠 보면 동기화를 점검할 순서가 생긴다. 세 시계의 가상 숫자에서 출발해 재생·정지·재개·반복의 계산과 출력 대응 정보의 범위를 연결한다.

글·편집 게임 제작 노트 · 자료 확인·보강 · 6분 읽기

기사 요약

  • 단위·원점·측정 대상을 적고 같은 기준으로 변환한다.
  • 파일 위치는 속도와 재생 구간의 기준에서 계산한다.
  • 출력 프레임 대응과 반복 타격·물리 계측을 구분한다.
버튼이나 악기를 조작한 순간부터 실제 소리가 들릴 때까지의 지연을 설명하는 W3C 도해. 사용자 행동과 오디오 출력 사이의 시간 관계를 표현했다.

Web Audio API 1.1 · 지연 설명 그림

이 공식 도해는 버튼 또는 악기 조작에서 소리가 들리기까지의 지연을 설명한다. 본문에서는 그 다음 단계로 프로그램 시간 좌표와 파일 위치를 나눈다.

이미지 출처: W3C Web Audio Working Group · W3C 문서 라이선스 · 제공 페이지 ↗ · 원본 ↗ · 문서 라이선스 ↗

같은 순간을 서로 다른 숫자로 적는다

화면에서 노트가 판정선에 겹친 장면을 보았다면 먼저 무엇을 기록했는지 정한다. 화면 좌표, 프로그램 시각, 음악 파일 위치와 출력 스트림 위치는 서로 다른 자료다. DJMAX 사진은 표시 위치를 관찰하는 출발점이고, 소리가 들린 순간은 별도 측정에서 얻는다.

가상 대응표에서 같은 순간의 performance 시각은 12,500ms, 오디오 컨텍스트 시각은 8.2초, 음악 파일 위치는 14초일 수 있다. 단위와 시작 기준이 달라 숫자가 다르다. 시계마다 원점·단위·측정 대상을 적은 뒤 비교할 기준으로 변환한다.

관련 원자료: W3C · High Resolution Time 시간 원점 ↗

같은 순간, 세 가지 시간 좌표

같은 순간, 세 가지 시간 좌표. performance12,500ms·컨텍스트 8.2초·파일 14초를 대응시킨 가상 표.

편집부 작성 도표 · performance12,500ms·컨텍스트 8.2초·파일 14초를 대응시킨 가상 표.

가로: 같은 순간과 이후 1초. 행: performance(ms)·컨텍스트(초)·파일(초).

작은 화면에서는 도표를 좌우로 밀어 볼 수 있다. 도표 크게 보기 ↗

도표의 값과 읽는 순서
  1. 12,500ms ↔ 8.2초 ↔ 14.0초
  2. 13,500ms ↔ 9.2초 ↔ 15.0초, 연속 속도 1 조건

파일의 시작 위치와 재생 경과를 연결한다

별도의 계산 예제에서 오디오 예약 시각 E=8초, 현재 C=10초, 파일 시작 위치 O=14초라고 하자. 속도 1로 중단 없이 재생했다면 파일 위치는 O+(C−E)=16초다. C−E는 컨텍스트에서 지난 시간이고 O는 파일의 시작 위치다.

속도가 r로 고정된 구간은 O+r(C−E)로 표현할 수 있다. 시작 전에는 예약 대기 상태로 다루고, 구간마다 E·O·r을 기록한다. 파일 위치를 구하는 계산과 출력 장치의 시각 대응을 나누면 조사할 값이 선명해진다.

속도 1로 연속 재생한 위치 계산

속도 1로 연속 재생한 위치 계산
항목값역할
E8초오디오 예약 시각
C10초현재 오디오 시각
O14초파일 시작 위치
C−E2초구간 경과
O+(C−E)16초현재 파일 위치
DJMAX RESPECT V의 PC판 화면. 중앙 레인으로 노트가 내려오며 아래쪽에 판정 위치가 있다. 음악 영상과 입력 정보가 화면의 영역을 나눠 쓴다.

DJMAX RESPECT V · 공식 PC판 화면

판정선과 노트, 판정 글자의 위치를 읽는 실제 화면이다. 출력 시각과 입력 오차는 아래 계산·측정 기록에서 별도로 다룬다.

이미지 출처: NEOWIZ / Steam · 제공 페이지 ↗ · 원본 ↗

출력 프레임의 시각을 대응시킨다

getOutputTimestamp()의 contextTime은 출력 장치가 렌더링하는 표본 프레임의 오디오 시각이고 performanceTime은 그 프레임이 출력된 순간의 performance 기준 추정값이다. 서로 다른 시간 좌표를 연결하는 한 쌍이다.

이 쌍을 (C₀,P₀)로 둘 때 가까운 오디오 시각 T의 performance 추정값은 P₀+1000(T−C₀)ms로 계산한다. 이 변환의 대상은 출력 프레임이다. 실제 손가락 접촉, 입력 장치 전달과 사람이 소리를 지각한 시각은 각 측정 절차와 함께 기록한다.

관련 원자료: MDN · getOutputTimestamp() ↗

소스만 멈춘 구간에서는 새 기준을 잡는다

파일 16초에서 개별 소스를 정지하고 컨텍스트는 계속 진행하는 예를 보자. C가 10초에서 13초가 돼도 게임이 저장한 파일 위치는 16초다. C=13초에 새 소스를 파일 16초에서 예약하면 E와 O를 13·16으로 다시 잡고, C=14초에 파일 17초를 얻는다.

컨텍스트 전체 중단은 그 시계의 진행도 함께 살피는 별도 상태다. 중단 정책, 저장한 파일 위치, 새 소스와 이미 예약한 작업의 정리 책임을 적는다. 복귀에서는 음악과 노트가 같은 상태에서 다시 진행하는지 확인한다.

컨텍스트가 진행해도 저장한 파일 위치는 멈춘다

컨텍스트가 진행해도 저장한 파일 위치는 멈춘다. 소스만 정지한 가상 예. 컨텍스트 10~13초 사이에 파일 16초를 저장하고 새 기준에서 재개한다.

편집부 작성 도표 · 소스만 정지한 가상 예. 컨텍스트 10~13초 사이에 파일 16초를 저장하고 새 기준에서 재개한다.

가로축: 컨텍스트 시각(초). 세로축: 음악 파일 위치(초).

작은 화면에서는 도표를 좌우로 밀어 볼 수 있다. 도표 크게 보기 ↗

도표의 값과 읽는 순서
  1. E8/O14에서 C10에 파일 16
  2. 소스 정지 중 C10~13:저장 위치 16
  3. 새 E13/O16에서 C14에 파일 17

첫 재생과 반복 구간을 구분한다

버퍼 0초에서 재생하고 loopStart=4초, loopEnd=12초로 정한 예에서는 첫 재생이 12초까지 간 뒤 4초로 돌아온다. 속도 1의 연속 경과 u가 12초 이상이면 위치는 4+((u−12) mod 8)초다. u=13초에서는 5초가 된다.

루프 이전 도입부와 반복되는 8초를 구분해 계산했다. 시작 오프셋, 속도 변경과 정지·재개가 있는 경우에는 해당 구간의 기준을 새로 기록한다. 반복 주기·표시 주기·판정 허용 시간은 각각의 설정으로 관리한다.

관련 원자료: W3C · AudioBufferSourceNode Looping ↗

일정한 이동과 반복 간 흔들림을 읽는다

입력 오차는 목표와 입력의 기준을 맞춘 뒤 모은다. 같은 출력 조건에서도 사람의 예측, 시각·청각 단서, 장치와 실행 부하가 함께 영향을 줄 수 있다. 한 숫자를 원인 이름으로 바꾸기보다 조건표와 사건 기록을 붙인다.

중앙값은 분포의 중심을, 범위와 개별 점은 반복 간 흔들림을 설명한다. 고정 보정은 모든 점을 같은 거리만큼 옮긴다. 단위·원점·반복 계산은 자동 대조하고, 실제 청감과 타격은 기기별 시험에서 확인한다.

기록으로 답할 수 있는 질문

기록으로 답할 수 있는 질문
자료읽는 대상남길 조건
파일 위치 계산버퍼 안의 재생 위치E·O·속도·중단·루프
출력 타임스탬프출력 프레임과 프로그램 시각의 대응API 반환쌍·단위·확인 시각
반복 타격사람과 장치가 섞인 입력 오차단서·기기·출력·회차·보정값
물리 지연 계측정한 두 물리 사건 사이 간격센서·장치·측정 정의

출처·확인 범위

2026.10.17 시간 원점 정의, getOutputTimestamp 반환값과 사용 예, Web Audio의 반복 범위를 확인했다. 세 시계 숫자와 정지·재개·반복 계산은 편집부 가상모형이다. 출력 시각 추정과 사람의 입력 오차, 물리 지연 측정은 각기 다른 기록으로 관리한다.

화면·사진의 권리는 각 권리자에게 있다. 작품의 조작과 특징을 설명하기 위해 게재했으며, 버전과 제공처는 각 캡션에 표기했다.

수정 기록: 2026-10-17 사례·계산 예제·도표와 원자료 설명 보강. 오류 제보: 편집 이메일