채점 API의 정상 경로를 검사하려고 악보와 같은 음높이·박자로 합성 연주를 만들었습니다. 합성음을 AAC로 인코딩해 분석 API에 넣자 **2~4번째 음이 TIMING**으로 판정됐습니다. 악보와 합성기의 박자는 그대로였는데, 파일을 거친 뒤에만 음이 늦어진 것처럼 보였습니다.
AAC 준비 샘플과 박자 오차
테스트는 FFmpeg의 표준 출력에서 조각 MP4를 받아 사용했습니다. AAC 인코더는 앞에 준비 샘플을 붙일 수 있습니다. 재생 타임라인에는 그 구간을 건너뛰는 정보가 필요한데, 이 테스트의 조각 MP4에는 그 정보가 없었습니다. 앱의 녹음 파일은 일반 MP4였습니다. Apple의 AAC 인코딩 설명
기록에 든 1,024샘플을 16kHz로 환산하면 약 64ms입니다. 이 테스트의 박자 허용치인 1/8박은 62.5ms였습니다. 64ms는 샘플 수로 계산한 설명값이고, 이 파일의 지연을 별도로 실측한 값은 아닙니다. 실제 관측은 2~4번째 음에 박자 오류가 찍혔다는 결과였습니다.
앱과 같은 MP4로 재검증
같은 합성음을 일반 MP4 파일로 쓰도록 테스트 생성기를 바꿨습니다. 이때 +faststart를 사용했습니다. 표준 출력에 조각 MP4를 쓰던 것에서 일반 파일을 생성하는 방식으로 바꾼 것이므로, 결과를 옵션 하나의 효과로 떼어 해석하기는 어렵습니다.
바꾼 파일을 같은 채점 경로에 다시 넣자 모든 음이 CORRECT가 됐습니다. 이후 API 단위 검사 22개를 포함한 테스트 묶음 59개도 통과했습니다. 이 결과가 검증하는 것은 합성 입력을 만드는 방식과 API 판정 경로입니다. 실제 대금 녹음의 채점 정확도는 별도의 검증 범위입니다.
합성 테스트에서 여러 음이 같은 방향으로 밀린다면, 채점 허용치를 넓히기 전에 합성 파형이 파일을 거쳐 어떻게 디코딩되는지부터 살펴볼 만합니다.

댓글
댓글과 반응은 GitHub 계정으로 로그인해 남길 수 있어요.