# Dansori EQ > **말로 빚는 소리.** 자연어 AI로 이어폰/헤드폰 EQ를 만들어 **Equalizer APO**에 적용하는 Windows 앱. > 코드 식별자: **DansoriEQ** · 표시명: **Dansori EQ** · 경로: `C:\Users\ekeer\DansoriEQ` --- ## ⚡ 핸드오프 요약 (반드시 먼저 읽기) 이 프로젝트는 **설계 + 대량의 선(先)생성 코드**가 이미 존재한다. **"아직 코드 없음"이 아니다.** 이전(토의) 세션에서 핵심 사용자 여정과 부가기능 대부분을 **코드 레벨로 배선**해 두었고, 다만 **아직 한 번도 컴파일/실행되지 않았다.** 다음 단계는 **빌드 + 실환경 연동**이다. - 앱은 APO/AI키 없이도 **미리보기 모드**로 파이프라인이 도는 구조다(생성 config를 파일로 기록). - 남은 일은 대부분 **실제 빌드/실행 환경**이 있어야 진행된다(아래 "다음 세션 첫 작업"). ## 먼저 읽을 순서 1. `README.md` — 개요·기능·빌드·구조 2. `docs/PREBUILT.md` — **선생성 파일 목록 + 교체/연결 지점**(가장 중요) 3. `docs/DEV_PLAN.md` — 마일스톤 M0~M15, 체크박스(`[x]`선구현 / `[ ]`남음) 4. `docs/SCENARIO.md` — 요구사항 + **핵심 사용자 여정**(§4.5) 5. `docs/ARCHITECTURE.md` — 스택·데이터흐름·DB/AI/APO/공유(.tweq) 스키마 6. `docs/TYPOGRAPHY.md` — 폰트 규칙(최소 12·최대 24, 가독성 우선) 7. `mockups/gallery.html` — 전체 UI 목업(브라우저로 열기) ## 다음 세션 첫 작업 (순서) 1. **솔루션·빌드·테스트** ``` dotnet new sln -n DansoriEQ dotnet sln add src/DansoriEQ.Core/DansoriEQ.Core.csproj dotnet sln add src/DansoriEQ.App/DansoriEQ.App.csproj dotnet sln add tests/DansoriEQ.Core.Tests/DansoriEQ.Core.Tests.csproj dotnet restore ; dotnet build ; dotnet test ``` 2. **컴파일 오류 수정** — 선생성 코드는 미검증. 특히 WPF 시그니처(`EqGraphControl`, Win32 P/Invoke), XAML, 패키지(WPF-UI/LiveCharts2는 아직 미추가) 확인. 3. **실환경 연동** - **APO**: 실제 config 쓰기 + 최초 1회 승격(Include+ACL). 지금은 미리보기(`NullApoWriter`). - **AI**: 실제 키로 프롬프트 루프 검증. provider/model은 `AppSettings`(AI 관리 화면)에서 선택됨. - **DB**: `DesignProfileDbService`(스텁) → `SqliteProfileDbService`로 교체 + 사이드바 바인딩. 4. **마감(M5/M6)**: WPF-UI(Fluent/Mica) 테마 + 테마전환, MVVM 바인딩, 헤더 버튼 정리, 패키징/아이콘. ## 핵심 교체/연결 지점 (dev) - **DB**: `SqliteProfileDbService`(App/Profiles) — `Search()`=사이드바, `LoadEq(id)`=프로파일 base EQ, `UpdateAsync`=AutoEq zip 다운로드(무겁다 → curated 서브셋 권장). - **AI**: `AiProviderFactory.Create(store)` 가 provider 생성. 프롬프트창(`MainWindow.SendPromptAsync`)은 이미 연결. - **APO**: `ApoWriterFactory` 가 설치 감지 → 실제/미리보기 자동 선택. - **크로스피드**: `ApoRenderer` 상단 메모대로 **저역통과+딜레이** 정식 구현 필요(현재 플레이스홀더). - **DefaultDeviceSwitcher**: IPolicyConfig(**undocumented COM**) vtable 검증 필요. ## 절대 제약 (유지) - 아름다운 모던 **Fluent GUI**(단순/텍스트 UI ✗, 웹앱 ✗) · **EQ 그래프** 포함 - **저권한**: 최초 1회만 승격, 이후 무승격 - 프로파일 목록 **IEM/헤드폰 분리** · 라이선스 배포불가 소스는 **배포 빌드 제외**(UI엔 병합 표시) - **AutoEQ 베이스 + 귀로 AI 미세조정**(측정 마이크 없음) · **DAC/앰프는 EQ 대상 아님** - **API 키는 런타임에 사용자 제공**(DPAPI 암호화 저장) · 초보자 친화 최우선 ## 선구현 범위 (코드 레벨 완료, 미컴파일) - **Core**: EQ 수학(RBJ)·모델·`ApoRenderer`(+이펙트)·`PreampCalculator`·프리셋(`.tweq`)· AI(`IAiEqProvider`·4개 provider·`EqDelta(+Effects)`·파서·프롬프트/스키마)·스위칭 규칙/평가·AutoEqParser - **App 창**: MainWindow(그래프·**AI 프롬프트 실배선**·Undo/Reset·바이패스+프리셋전환 핫키·볼륨패널·가변40밴드) + Settings/DbManager/Effects/PresetLibrary/Command/ApoSetup/**AiManager**/**SwitchRules**/PresetInfo/도움말드로어 - **App 서비스**: Apo(추상화+미리보기+installer/setup), Ai(4 provider+factory+**계정모델조회**+**Ollama설치/모델pull**), Audio(NAudio 볼륨/**출력장치전환**·Windows볼륨 양방향 동기화), Switching(**앱+장치 감지→프리셋 자동전환**, 런타임 리로드), Profiles(**SQLite 실저장소**+AutoEq import + 디자인 스텁), Security(DPAPI), Input(전역 핫키) - **테스트**: Filter 수학 / AutoEqParser / PresetSerializer / ApoRenderer 이펙트 - **AI 제어**: EQ + **이펙트(크로스피드/밸런스/베이스)를 자연어 한 문장으로** 동시 제어 ## 범위 결정 사항 - **스피커 확장 제외**(측정 기반이 정석인데 그 트랙은 안 함). - **로컬 AI = Ollama만**(무인 자동설치 확실). LM Studio/GPT4All 등은 `LocalRuntime.cs` 메모의 "추후 테스트 후보". - 서라운드/리버브는 향후(M13). `.tweq` 확장자 유지. ## 컨텍스트 (왜 이 앱인가) 사용자는 하이엔드 오디오 보유자(iFi Pro iDSD/iCAN Signature, SMSL DO400 등). Luxsin X8의 "AI EQ"에 관심 → X8은 DAC/앰프가 기존 플래그십과 중복이라 비효율 → **X8의 AI EQ 경험만 소프트웨어로 재현**. 하드웨어 PEQ 역분석(FiiO K13)은 리스크로 폐기 → **Equalizer APO + AI(클라우드/로컬)** 조합으로 확정. ## ⚠️ 이 시점에서 남은 것은 대부분 실환경 의존 빌드·컴파일 검증 · APO 실적용 · AI 키/네트워크 · NAudio/Win32/winget/Ollama · SQLite/AutoEq 다운로드 · MVVM 바인딩 · Fluent 테마. **여기서부터는 개발 세션(실행 환경 필요)에서 진행한다.**