크라우니음향믹서 — 1단계 엔진 설계 (RPi5 베어메탈)

🟢 라이브 관제 하네스 … 서비스 … 엔진 … CI … 결함추적 …

v0.1 · 2026-08-2748kHz내부 32bit float16ch / 6밴드 EQ클럭 = internal 마스터 정본 SSOT: crowny-mixer/설계/2026-08-27-1단계-엔진-SSOT.md

전체 블록다이어그램

블록을 클릭하면 세부 설명으로 이동합니다. 실선 = 오디오(블록 48샘플=1ms 파이프), 점선 = 제어/클럭.

AES67 장비RTP L24/L16 · PTPv2 S16 (AES50)브릿지 경유 (별도박스) CORE 0 — 제어평면 (예약) NIC · AES67 스택RTP/PTP GM · 디스커버리 파라미터·계수 계산EQ계수 · 게인 · 보상테이블 UI 링크 서버바타입 터치 ↔ TCP/OSC 클럭 마스터internal → PTP GM CORE 1 — 라우팅/플로팅 입력 변환16/24bit int → float32 라우팅 매트릭스입력→채널/버스 패치 출력 변환float32 → int + 디더 CORE 2 — DSP 프로세싱 채널스트립 ×16 트림→게이트→컴프 →EQ 6밴드→페이더→팬 딜레이 컴펜세이션기준 = DSP 출력 (최장경로 정렬) 버스 합산마스터 LR + 버스 1..4 CORE 3 — 이펙터엔진 FX 4슬롯 리버브 · 딜레이 모듈레이션 · GEQ 센드 / 리턴SPSC 링버퍼 · 1블록 홉
실선 오디오 경로(48샘플 블록) · 점선 제어/클럭 · 코어 간 이동 = 공유메모리 SPSC 링버퍼(홉당 1블록 = 1ms)

3단계 로드맵

단계대응 시장플랫폼상태
1아날로그 16ch 6밴드EQ+FX 믹서 대체라즈베리파이5 베어메탈 (3코어)진행 중
2Waves LV1 / Behringer Wing 급맥미니 M4대기
3SSL L550 / DiGiCo 급미정대기

컨트롤러·I/O는 별도 — 만드는 것은 컴퓨터에서 작동하는 믹서 엔진. 컨트롤 표면 = 바타입 터치 디스플레이(랙 장착/탁상) 단일.

블록별 세부 설명

AES67 I/O (범용 장비 전제)

범용 AES67 장비를 표준 I/O로 전제한다. RTP 페이로드 L24(권장)·L16, 48kHz, 패킷타임 1ms(48샘플/패킷), 멀티캐스트. 디스커버리는 SAP부터, NMOS(IS-04/05)는 2차.
Dante 검토: Dante 장비 다수가 AES67 호환모드를 탑재 — 이 모드로는 추가 개발 없이 수용 가능(단 Dante 쪽에서 멀티캐스트 플로우 수동 생성 필요, 유니캐스트 불가). 네이티브 Dante 프로토콜은 Audinate 폐쇄 라이선스(DEP/칩 필요)라 직접 구현 비목표 — 결론: Dante는 "AES67 모드로 지원", 네이티브는 제외.

S16 / AES50 브릿지 (별도 박스)

Behringer S16은 AES50(초저지연 전용 PHY, 이더넷 프레이밍 비표준) — RPi5 이더넷 MAC으로 직접 종단 불가. AES50↔AES67 변환 브릿지를 별도 하드웨어 모듈로 분리하고, 엔진은 AES67 단일 언어만 말한다. 이 분리가 2·3단계 확장성의 핵심(엔진 코드에 장비 특수처리 0). 브릿지엔 워드클럭 공급(믹서 internal 기준).

CORE0 — NIC · AES67 스택

기가비트 NIC 드라이버 + RTP 수신/송신 + PTPv2. 수신 패킷을 지터버퍼(2~4패킷)로 흡수해 core1 입력 링에 공급. 최대 기술리스크: RPi5 NIC(BCM54213/RP1) 베어메탈 드라이버 — 조기 스파이크로 검증하고, 막히면 core0만 최소 RT-리눅스를 두는 플랜B(코어1~3 베어메탈 유지)로 전환.

CORE0 — 파라미터·계수 계산

EQ biquad 계수(RBJ)·페이더 게인·팬 법칙·딜레이 보상테이블을 오디오 경로 밖에서 계산. 더블버퍼에 써 두고 블록 경계에서만 스왑 — 오디오 코어는 락 없음(락프리). 정합 오라클 = 한선씨 정본 엔진/믹서코어.한선(정수 고정소수점 스케일 10000, 컴파일·실행 검증 완료).

CORE0 — UI 링크 (바타입 터치)

기준 컨트롤/디스플레이 = 바타입 터치 디스플레이(랙 장착 또는 탁상). 물리 페이더 없음 — UI가 곧 컨트롤 표면. 16ch 스트립을 가로 1열로 펼치는 초와이드 레이아웃. 엔진↔UI는 TCP/OSC류 텍스트 프로토콜(상태 구독+파라미터 세트, 오디오 미경유). UI 기획·디자인 = 클로드디자인 MCP(패블 hard) 공동 진행 예정.

클럭 — internal 마스터

믹서 = 클럭 마스터. AES67 네트워크에 자신을 PTP 그랜드마스터로 선언, S16 브릿지엔 워드클럭 공급. 전 장비 48k 슬레이브 강제 — ASRC 없음(1단계). 외부 슬레이브 모드는 비목표.

CORE1 — 입력 변환 (플로팅)

수신 정수 샘플(16/24bit)을 float32로 변환(1.0 = 0dBFS). 16bit 레거시 경로 포함. 블록(48샘플) 단위로 정렬해 라우팅에 공급.

CORE1 — 라우팅 매트릭스

입력 16 × 채널 16 게인 매트릭스(기본 1:1 패치, 자유 패치 가능). 정본: 믹서코어.한선 라우팅생성(). 매트릭스 변경은 제어평면이 재계산 후 블록 경계 적용.

CORE2 — 채널스트립 ×16

트림 → 게이트 → 컴프 → EQ 6밴드 → 페이더 → 팬 전 구간 float32.
EQ = LowShelf + Peak×4 + HighShelf, RBJ biquad 직렬, 실행 토폴로지 TDF-II. 계수는 core0이 공급(오디오 코어는 곱셈-누산만). 페이더 -∞..+10dB.

CORE2 — 딜레이 컴펜세이션 (기준 = DSP)

기준점 = DSP 채널스트립 출력. FX 경유 경로 지연(FX엔진 홉 2블록 + 알고리즘 고유지연)과 직결 경로(1블록)의 차를 계산해, 빠른 경로에 보상 딜레이 삽입 — 전 경로 위상 정렬. 보상테이블은 라우팅 그래프 변경 시 재계산. 정본: 딜레이보상계산() (검증값: FX 24smp 경유 시 직결 528 / FX24 456 / FX480 0).

CORE2 — 버스 합산

마스터 LR + 버스 1..4(모니터·FX 센드). float32 합산 후 소프트클립 한계 처리. 정본: 믹스합산()(±10000=0dBFS 스케일, 클립 검증 완료).

CORE3 — FX: 홀 리버브 1종 집중

[확정 2026-08-28] 이펙터는 홀 리버브 딱 1종을 잘 만든다 — Dattorro 토폴로지(프리딜레이+4단 디퓨저+8자 탱크)를 홀 튜닝(디케이 1.2~3.5s)으로. 고유지연 0샘플(보상 신고는 FX홉 48샘플만). 딜레이·모듈레이션·GEQ 슬롯은 이후 단계.

CORE3 — 센드/리턴 · 코어간 통신

코어 간 = 공유메모리 SPSC 링버퍼(블록 단위, 락프리). 파이프라인 홉당 1블록(1ms). 직결 경로 엔진 레이턴시 목표 3ms 이하 + AES67 패킷타임 별도.

CORE1 — 출력 변환

float32 → 24/16bit 정수 + TPDF 디더(16bit 출력 시). AES67 송신 패킷화는 core0 스택 경유.

진행 현황판 (크라우니관제)

모듈정본(한선씨)실행층(C)정합판정
EQ 계수 (RBJ, 0.1도 해상도)믹서코어.한선eq6.c편차 ≤11/10000티
EQ biquad 필터EQ필터적용()eq6.c TDF-II임펄스 8/8 ≤10티
다이나믹스 (게이트+컴프)다이나믹스처리()strip_dyn.c8/8 ≤1티
등파워 팬팬게인()(스트립 통합 예정)중앙 7059/7071티
딜레이 컴펜세이션딜레이보상계산()parity.c완전일치티
믹스 합산+클립믹스합산()parity.c완전일치티
채널스트립 통합 체인믹서코어 셀프테스트9strip.cL/R 8/8 ≤16티
홀 리버브 (Dattorro 홀튜닝, RT60 1.84s 실측)리버브홀.한선reverb_hall.cdecay ≤0.04%·발산0티
SPSC 링버퍼 (락프리, 10만 블록)링버퍼.한선spsc.h순서오류 0티
포맷변환+TPDF 디더변환.한선convert.c왕복 무손실티
RTP/L24 프레이밍 (AES67)RTP.한선rtp_l24.chex 완전일치티
엔진 통합 e2e (16ch+FX+보상, 유니티빌드)mixer_sim.한선mixer_sim.cNaN0·보상 48smp 정위치·112×RT티
플랫폼 (하이브리드)core0 PREEMPT_RT / core1~3 isolcpus 격리 DSP확정티
3코어 실배치 파이프라인 (pthread+SPSC)mixer_rt.한선mixer_rt.cseq0·보상 정위치·10×RT티
AES67 UDP 송수신+지터버퍼aes67_net.한선aes67_net.c1000패킷 랩어라운드·언더런0티
AES67 PTP (클럭)core0 LinuxPTP — RPi5 실기 단계대기옴
AES67 라우터 맥앱 (로직프로X 테스트 게이트)aes67_router.한선aes67_router.cselftest PASS·양성대조 티·rx 실기동티
바타입 터치 UI 시안UI/시안/시안레이아웃.한선시안 4장 (dc.html)사용자 승인 (2026-08-28)티
UI 인터랙티브 프로토타입 v0.1ui/index.한선/audiomixer/ui/S10 실브라우저: 뮤트클릭→서버반영·채널탭 전환·콘솔에러0 (mixFetch 스코프결함 근본수리)티
제어서버 v2 (한선씨 :9441 — EQ96·FX·씬8·파일브릿지·인증)엔진/제어서버.한선LaunchAgent 상주전 API 왕복·S7 티 · 변이=통합IdP 위임(무토큰/위조/셸주입 401, 실토큰 200)티
상주 엔진 데몬 (파라미터 실적용+실미터 100ms)mixer_engined.한선mixer_engined (LaunchAgent)selftest 11/11 · CPU 1.9% · 종단: 페이더/EQ/뮤트/씬→실미터 · --rx AES67 실입력(FIFO큐+피크홀드, 엔진체인 실수신)티
UI 전 컨트롤 연동 (EQ드래그·FX노브·씬·live배지)ui/index.한선/audiomixer/ui/실미터 라이브(live=1) · 종단검증이 D531/D532 검출→수리티
UI 백로그: 음악플레이어 · 페이더 세밀조절 · 온스크린 키보드요구서 §백로그 — 1단계 완료 후 착수기록됨옴
오디오 IO 백엔드 추상화 (file/null/alsa 스왑)audio_io.한선audio_io.h · mixer_io.cfile 루프백 e2e 티 · ALSA=L1 VM 실증(virtio-snd 오픈+실쓰기, 커널 6.12 백포트 필요 발견) · 캡처/xrun/RT는 L3티
크라우니시뮬레이터 for RPi5 v1시뮬코어.한선크라우니시뮬레이터.shRPi5 환산 9.9~16.8×RT(계수30%) · 4계층 노선표(L1=QEMU virt+A76 주력, 타이밍=L3 실기만)티
시뮬레이터 v2 — L1 QEMU 실부팅+타깃 스모크시뮬L1/부팅판정.한선시뮬L1/ (이미지준비·부팅·스모크)aarch64·4코어·A76 실측 + VM 내 mixer_rt 실배치 티티

정합 기준: 정수로직 ±0 / 계수·응답 ±30(0.3%). 검증 도구 = 도구/정합하네스.sh (현재 전항 티)

2단계 — 맥스튜디오/맥미니 LV1급 (2026-08-30 착수)

항목정본/근거산출실측판정
아키텍처 기획 (64ch·ducker 코어할당·핫라인)설계/2단계-LV1급-아키텍처-기획.md7결정·로드맵 M2.0~2.4티
핫라인 DSP PoC (NEON 벡터 biquad)neon_biquad.한선도구/핫라인PoC/neon_biquad.c스칼라 대비 5.0배 · 64ch×6밴드 91×RT · 오라클 정합 ≤10/10000티
M2.0 코어할당 PoC (RT 스레드)coretest.한선도구/핫라인PoC/coretest.c버퍼 64~512 RT승격·데드라인 성립(지터0) · P/E 물리상주는 sudo 관측 잔여티(간접)
데스크톱 LV1급 UI 시안UI/시안2단계/ (dc.html 4장 2560×1440)콘솔·인스펙터·코어모니터·패치베이 (클로드디자인 패블)티(시안)
스튜디오 제어서버 v2 (한선씨 :9442 — 64ch/32버스/EQ384)스튜디오제어서버.한선LaunchAgent 상주1단계 계승·인증게이트 · ch40/ch63 왕복 200 반영티
CoreAudio IO 백엔드 (audio_io 4번째 스왑)audio_io_coreaudio.한선audio_io_coreaudio.m출력장치 오픈 rc0·사인톤 재생 · 캡처는 권한없음 -2 정직실패티
데스크톱 UI 배선 (4뷰→계약v2 실연동)studio/index.한선/audiomixer/studio/64ch 페이더/EQ/FX/씬→:9442 · 코어모니터 텔레메트리 · mixFetch 전역(D574교훈)티

DSP·컨트롤 통합(ducker식 코어할당) · 핫라인=NEON 인트린식(인라인 asm 최후수단) · 정본=한선씨 오라클 계승 · 구현=오푸스

베어메탈 C ↔ 한선씨 대응성 (사전 검증)

헌법상 정본 = 한선씨. 48kHz 실시간 실행층은 부득이 베어메탈 C — 대응 가능성을 착수 전 실측으로 확인한다:
  1. 대응 구조: C 파일마다 동일 로직 .한선 동반. 한선씨 = 정수 고정소수점(스케일 10000) 오라클, C = float32 실행.
  2. 정합 하네스: 같은 입력에 대해 C 출력×10000 반올림 vs 한선씨 출력을 대조, 허용오차 ±1 스케일단위(=0.01%). EQ 계수·딜레이보상·믹스 3종 실측 대조로 성립 확인.
  3. 표현력 확인: 믹서 로직의 전 요소(삼각함수·biquad·매트릭스·최장경로·클립)가 crownyc 정수 VM에서 표현 가능함을 믹서코어.한선 셀프테스트로 이미 실증. 표현 불가 영역은 실시간 스케줄링·NEON·MMIO뿐 — 이는 "로직"이 아니라 "실행 기질"로 분류, C 전담.

정본 문서: docs.crowny.org · 프로젝트: /Users/ef/crowny-mixer · 집사회 미션 M158