에덴고 CAF7 웹 디코더
개요
크라우니 오디오 포맷(CAF7 TOAU)을 브라우저에서 디코딩해 WebAudio로 재생하는 순수 JS 모듈.
무엇을 했는지
- 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)
위로_양혜림.caf 포맷 진단
- 매직 "CAF3"(0x33464143) — 현재 어떤 도구로도 지원 안 함
- 6B×1349192 큐브 구조이나 매직/인코딩 미문서화
- 상태: 미해독, 원본 WAV/MP3 필요
- 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
- 검증 (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 — 구조체/상수 정의
잔여 이슈
- CAF3 파일 해독 불가 -
위로_양혜림.caf 원본 MP3/WAV가 있어야 재인코딩 가능
- 대용량 BGM 한계 - 15분 MP3→CAF7 인코딩 시 파일 크기 10배 증가, 디코딩 ~2분. 단편 음향에 적합
- IMDCT O(N²) - 3분 곡 기준 ~23초 디코딩. 게임 로딩 BGM에는 Worker 필요
- 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>