← 목록
오디오 2026-05-19 5KB 읽기 6분

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 타입, 큐브 구조, API
  • player/shared/caf7_toau.c (794줄) — 전체 구현:
  • 균형3진 인코딩/디코딩 (음수 정확 처리)
  • 큐브 패킹/언패킹 (27 트릿 × 2bit = 7byte + 1pad)
  • MDCT 순방향/역방향 (코사인 테이블 사전계산 최적화)
  • 소멸게이트 (절대 + 상대 임계)
  • 3진 양자화 (16 트릿 = ±21,523,360 levels)
  • 스파스 인코딩 (존재 주파수만 큐브로 기록)
  • WAV 읽기/쓰기
  • macOS AudioToolbox (MP3/AAC/FLAC/ALAC 디코딩)
  • TOAU 파일 읽기/쓰기
  • 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으로 업데이트:
  • CAF7 TOAU (.caf7) 파일 재생
  • MP3/AAC/FLAC/M4A via AudioToolbox
  • 자동 포맷 감지
  • 검증 결과

    실제 음원 테스트: 위로_양혜림.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)31,295신규
    DAW 코어1628완성
    DAW UI3653완성
    DAW 엔진3619완성
    DAW 웹1351완성
    MIDI2776완성
    MDCT 코덱 (한선)51,877완성
    DSP1272완성
    이펙트1938완성
    시각화2782완성
    시간1257완성
    TOAU 동반 (한선)155신규
    CAF 코덱 (한선)1512완성
    플레이어 (한선)1247완성
    도구41,181완성
    서버1323완성
    합계 한선289,471
    C 코덱51,974완성
    macOS 플레이어1431v3.0
    CLI 도구1362신규
    JS 서버2591완성
    웹 UI22,743완성

    발견된 이슈

    VM 버그 (기존 5건 + 추가)

    • 함수 정의 스킵: 명령어 예산 소진 → 인라인 코드 사용
    • 맵꺼내(배열, idx) -1 반환 → 맵생성+문자열키 사용
    • 문자열 연접 루프: VM 느림 → 직접 출력

    최적화 기회

    • MDCT: 현재 O(N²) 코사인 테이블 → FFT 기반 O(N log N) 가능 (~10x 추가 속도)
    • 압축률: 107% (원본 대비) → 다중 계수 패킹으로 개선 가능

    포트

    • audio.crowny.org: 9880
    • daw.crowny.org: 9881