CrownyAudio v3.0 — 진짜 벡터형 4상균형3진 CAF7 포맷 완성
개요
CAF7 오디오 포맷을 진짜 TOAU 큐브 기반 4상균형3진 포맷으로 구현 완료. 파일 전체가 27-트릿 큐브(8바이트/큐브)로 구성 — 2진 바이너리 헤더 없음.
핵심 파이프라인: PCM → MDCT(1024윈도우) → 소멸게이트(-80dB) → 균형3진 양자화(16트릿) → 큐브 패킹
진짜 TOAU 구현 (v3.0 핵심)
C 코덱 (신규)
player/shared/caf7_toau.h (139줄) — TOAU 타입, 큐브 구조, APIplayer/shared/caf7_toau.c (794줄) — 전체 구현:player/shared/caf7_cli.c (362줄) — CLI 도구 (encode/decode/info/roundtrip/play)한선씨 동반
libs/codec/TOAU코덱.한선(55줄) — 컴파일+실행 PASS, 균형3진 검증
플레이어 업데이트
player/mac/CrownyCAFPlayer.m (431줄) — v3.0으로 업데이트:검증 결과
실제 음원 테스트: 위로_양혜림.wav (40MB, 스테레오, 44100Hz, 16bit, 2분37초)
인코딩: WAV → CAF7 TOAU
MDCT + 소멸게이트 + 3진양자화: 30초
샘플레이트: 44100 Hz
채널: 2
총 프레임: 6,940,328
총 큐브: 3,734,446
파일크기: 29.8 MB
존재 주파수: 26.7% (3,707,320 bins)
소멸 주파수: 73.3% (10,173,000 bins)
트릿 분포: T=30% O=51% A=20%
디코딩: CAF7 TOAU → WAV
3진복원 + IMDCT + overlap-add: 30초
라운드트립 WAV 재생: 정상
MP3 테스트: ocean.mp3 (73KB, 스테레오, 2.4초)
MP3 → AudioToolbox 디코딩 → TOAU 인코딩: 0.9초
CLI play: 정상 재생
TOAU 큐브 파일 구조
모든 바이트가 TOAU 큐브 (2진 헤더 없음)
[큐브0] 매직 = 1128416823 (CAF7 ASCII → 균형3진)
[큐브1] 버전 = 7
[큐브2] 샘플레이트 (예: 44100)
[큐브3] 채널 << 16 | 비트깊이
[큐브4] 총 프레임수
[큐브5] 소멸 임계 (dB)
[AUDI] 오디오 시작 마커 (명령 큐브)
[프레임 헤더] 명령 큐브: 스파스수, 스케일, 채널
[계수 큐브] 데이터 큐브: bin인덱스(9t) + 값(16t)
...반복...
[7FAC] 푸터 (명령 큐브)
큐브 내부 구조 (27 트릿)
데이터 큐브 (t[26]=T):
t[0..8] = bin 인덱스 (9 트릿, 0~9841)
t[9..24] = 계수값 (16 트릿, ±21.5M levels)
t[25] = 타입 (T=숫자, O=문자열, A=참조)
t[26] = 역할 (T=데이터)
명령 큐브 (t[26]=O):
t[0..3] = 스파스 카운트 (4 트릿)
t[4..15] = 스케일 팩터 (12 트릿)
t[16..18] = 채널
t[26] = 역할 (O=명령)
빌드
bash# CLI 도구 (macOS, 재생 기능 포함)
cd /Users/ef/crowny-audio/player/shared
cc -O2 -lm -framework AudioToolbox -framework CoreFoundation \
-DCAF7_PLAY -o caf7 caf7_cli.c caf7_toau.c
# GUI 플레이어 (macOS)
cd /Users/ef/crowny-audio/player/mac
cc -O2 -framework Cocoa -framework AudioToolbox -framework Accelerate \
-framework CoreFoundation -framework UniformTypeIdentifiers \
-I../shared ../shared/caf_codec.c ../shared/caf7_toau.c -lm \
-o CrownyCAFPlayer CrownyCAFPlayer.m
# 사용법
./caf7 encode input.wav -o output.caf7 # WAV → CAF7 TOAU
./caf7 encode input.mp3 -o output.caf7 # MP3 → CAF7 TOAU (macOS)
./caf7 decode input.caf7 -o output.wav # CAF7 TOAU → WAV
./caf7 info input.caf7 # TOAU 큐브 정보
./caf7 play input.caf7 # 재생 (macOS)
./caf7 roundtrip input.wav -o output.wav # 라운드트립 테스트
전체 프로젝트 현황
| 영역 | 파일수 | 줄 | 상태 |
|---|---|---|---|
| TOAU 코덱 (C) | 3 | 1,295 | 신규 |
| DAW 코어 | 1 | 628 | 완성 |
| DAW UI | 3 | 653 | 완성 |
| DAW 엔진 | 3 | 619 | 완성 |
| DAW 웹 | 1 | 351 | 완성 |
| MIDI | 2 | 776 | 완성 |
| MDCT 코덱 (한선) | 5 | 1,877 | 완성 |
| DSP | 1 | 272 | 완성 |
| 이펙트 | 1 | 938 | 완성 |
| 시각화 | 2 | 782 | 완성 |
| 시간 | 1 | 257 | 완성 |
| TOAU 동반 (한선) | 1 | 55 | 신규 |
| CAF 코덱 (한선) | 1 | 512 | 완성 |
| 플레이어 (한선) | 1 | 247 | 완성 |
| 도구 | 4 | 1,181 | 완성 |
| 서버 | 1 | 323 | 완성 |
| 합계 한선 | 28 | 9,471 | — |
| C 코덱 | 5 | 1,974 | 완성 |
| macOS 플레이어 | 1 | 431 | v3.0 |
| CLI 도구 | 1 | 362 | 신규 |
| JS 서버 | 2 | 591 | 완성 |
| 웹 UI | 2 | 2,743 | 완성 |
발견된 이슈
VM 버그 (기존 5건 + 추가)
- 함수 정의 스킵: 명령어 예산 소진 → 인라인 코드 사용
- 맵꺼내(배열, idx) -1 반환 → 맵생성+문자열키 사용
- 문자열 연접 루프: VM 느림 → 직접 출력
최적화 기회
- MDCT: 현재 O(N²) 코사인 테이블 → FFT 기반 O(N log N) 가능 (~10x 추가 속도)
- 압축률: 107% (원본 대비) → 다중 계수 패킹으로 개선 가능
포트
- audio.crowny.org: 9880
- daw.crowny.org: 9881