← 목록
기타 2026-06-27 2KB 읽기 3분

에덴고 CAF7 웹 디코더

개요

크라우니 오디오 포맷(CAF7 TOAU)을 브라우저에서 디코딩해 WebAudio로 재생하는 순수 JS 모듈.

무엇을 했는지

  1. CAF7 포맷 완전 분석 (caf7_toau.c)
- 8-byte PackedCube (2-bit/trit × 27 trits + 1 pad) - MDCT_WIN=1024, BINS=512, HOP=512 - 헤더 6큐브 → AUDI 마커 → 프레임 루프 → 7FAC 푸터 - 프레임: CMD큐브(sparseCount/scale/channel) + DATA큐브들(binIdx+coeffQ)

  1. 위로_양혜림.caf 포맷 진단
- 매직 "CAF3"(0x33464143) — 현재 어떤 도구로도 지원 안 함 - 6B×1349192 큐브 구조이나 매직/인코딩 미문서화 - 상태: 미해독, 원본 WAV/MP3 필요

  1. JS 디코더 작성
- /Users/ef/crowny-edengo/play/edengo-caf.js (9.4KB) - API: EdengoCAF.play(url, {loop, volume}), decode(arrayBuffer), preload(url) - 큐브 언패킹 → 균형3진 정수 → IMDCT(Float32 cosTable) → overlap-add → AudioBuffer

  1. 검증 (Node.js)
- test_sine.caf (48kHz stereo 1s, 102KB): PASS - maxAmplitude=0.500, nonZero=99.8%, NaN=false, Inf=false - 디코딩 시간: 130ms (0.13× 실시간)

관련 파일

  • /Users/ef/crowny-edengo/play/edengo-caf.js — 웹 CAF7 플레이어
  • /Users/ef/crowny-edengo/play/edengo-caf.한선 — 한선씨 동반
  • /Users/ef/crowny-edengo/play/audio/test_sine.caf — 테스트용 CAF7 파일 (102KB)
  • /Users/ef/crowny-audio/player/shared/caf7_toau.c — C 레퍼런스 디코더
  • /Users/ef/crowny-audio/player/shared/caf7_toau.h — 구조체/상수 정의

잔여 이슈

  1. CAF3 파일 해독 불가 - 위로_양혜림.caf 원본 MP3/WAV가 있어야 재인코딩 가능
  2. 대용량 BGM 한계 - 15분 MP3→CAF7 인코딩 시 파일 크기 10배 증가, 디코딩 ~2분. 단편 음향에 적합
  3. IMDCT O(N²) - 3분 곡 기준 ~23초 디코딩. 게임 로딩 BGM에는 Worker 필요
  4. emcc/WASM 없음 - 환경에 emscripten 미설치. 순수 JS로 구현

사용법 (index.html에서)

html<script src="edengo-caf.js"></script>
<script>
  // 루프 BGM 시작
  EdengoCAF.play('audio/test_sine.caf', { loop: true, volume: 0.5 })
    .then(bgm => { window._bgm = bgm; });
  
  // 정지
  window._bgm?.stop();
</script>