CAF7 TOAU v3.1 — 오디오 품질 검증 완료
개요
CAF7 벡터형 4상균형3진 오디오 코덱의 소리가 정상적으로 나오는 것을 검증 완료.
크라우니시뮬레이터 검사 시나리오를 구축하여 자동화된 품질 측정 체계 확립.
v3.1 수정 (4건 버그 수정)
버그 1: 스케일 팩터 오버플로 (치명적)
- 증상: SNR 0 dB — 복원 음원이 순수 잡음
- 원인:
maxCoeff * 100000이 12트릿 최대값(265720) 초과 → 클램핑 → 음량 3%로 축소
- 수정: 선형 인코딩 → log2 인코딩 (
round(log2(maxCoeff) * 1000))
- 결과: SNR 0 → 66 dB
버그 2: 스파스 카운트 오버플로 (치명적)
- 증상: 프레임당 137개 계수 중 40개만 디코딩
- 원인: 4트릿(최대 40) → 실제 존재 주파수 137개/프레임
- 수정: 4트릿 → 9트릿 (최대 9841), 프레임 헤더 재배치
- 파일 구조:
t[0..8]=sparse(9t) t[9..20]=scale(12t) t[21..23]=channel(3t)
버그 3: MDCT 경계 효과 (합성 신호)
- 증상: 사인파 테스트 SNR 14-22 dB (첫/끝 구간만 불량)
- 원인: 첫/끝 MDCT 윈도우에 오버랩 짝이 없어 복원 게인 불완전
- 수정: pre/post 패딩 윈도우 추가 (encoder -HOP 시작, decoder -HOP 보정)
- 결과: 사인파 SNR 14 → 68 dB, 전 구간 균일
버그 4: 비교 도구 24비트 WAV
- 증상: 24비트 원본을 int16으로 직접 읽어 비교 데이터 오염
- 수정: 24비트→16비트 다운시프트 변환 (코덱과 동일 방식)
최종 검증 결과
시뮬레이터: 마찰 0건, 24/24 성공, A등급
테스트 SNR 최대오차 클리핑 판정
사인파 440Hz 1초 68.17 dB 82 0% 우수
사인파 1kHz 0.5초 68.33 dB 49 0% 우수
사인파 100Hz 2초 67.58 dB 107 0% 우수
최대진폭 440Hz 68.33 dB 103 0% 우수
무음 1초 999 dB 0 0% 우수
실제음원 (위로_양혜림 2분37초) 65.97 dB 28 0% 우수
검사 기준
| 지표 | 기준 | 실측 | 판정 |
|---|
| SNR (합성) | ≥40 dB | 67-68 dB | PASS |
| SNR (실음원) | ≥30 dB | 66 dB | PASS |
| 최대 오차 | ≤150 | 0-107 | PASS |
| 클리핑 | ≤0.01% | 0% | PASS |
| 구간 균일성 | ≥25 dB | 63-69 dB | PASS |
| 무음 정확도 | 오차 0 | 0 | PASS |
압축률
| 신호 | WAV | CAF7 | 비율 |
|---|
| 사인파 440Hz | 86KB | 43KB | 50% |
| 사인파 100Hz | 172KB | 75KB | 44% |
| 실제 음원 | 27MB | 30MB | 108% |
사인파: ~50% 압축 (단일 주파수 → 소멸게이트 효과적)
실제 음원: 108% (다채로운 주파수 → 스파스 효과 낮음, 향후 다중계수 패킹으로 개선 가능)
검사 시스템 구성
시뮬레이터 시나리오
- 파일:
/Users/ef/crowny-simulator/scenarios/audio.js
- 한선씨 동반:
/Users/ef/crowny-simulator/오디오검사.한선
- 실행:
cd /Users/ef/crowny-simulator && node bin/cli.js run audio --fast
- 보고서:
node bin/cli.js report audio
- 비교:
node bin/cli.js compare audio
- 이력:
node bin/cli.js history audio
검사 항목 6종
- 빌드 검사 — 코덱 컴파일 성공
- 인코딩 검사 — WAV → CAF7 TOAU 변환
- 디코딩 검사 — CAF7 TOAU → WAV 복원
- 품질 검사 — SNR, 최대오차, 클리핑
- 균일성 검사 — 구간별 SNR 편차
- 압축률 검사 — 원본 대비 파일 크기
합성 테스트 신호 자동 생성
- 사인파 440Hz/1kHz/100Hz (다양한 진폭/길이)
- 최대 진폭 테스트 (클리핑 검출)
- 완전 무음 (제로 에러 검증)
- 실제 음원 (스테레오 2분37초)
수정된 파일
| 파일 | 변경 |
|---|
player/shared/caf7_toau.h | SPARSE_TRITS=9 추가, 프레임 헤더 레이아웃 업데이트 |
player/shared/caf7_toau.c | 스케일팩터 log2, 스파스카운트 9t, MDCT 패딩 |
/tmp/audio_compare.c | 24비트 WAV 변환 처리 |
crowny-simulator/scenarios/audio.js | 오디오 품질 검사 시나리오 (신규) |
crowny-simulator/오디오검사.한선 | 한선씨 동반 (신규) |
포트
- audio.crowny.org: 9880
- daw.crowny.org: 9881