Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
15bee37
build: Core 라이브러리와 테스트 프로젝트를 추가하고 설정을 Core 로 옮긴다
amophi Oct 14, 2026
194a230
fix: PC 판의 버그를 고친다 (오버레이 언어, VB-CABLE, 레벨 경합, 장치 재시작, 전체 초기화)
amophi Oct 14, 2026
7a236d2
feat: 앱 글꼴을 Pretendard 로 바꾼다
amophi Oct 14, 2026
4ff621e
ci: 올릴 때마다 Windows 에서 빌드와 단위 테스트를 돌린다
amophi Oct 14, 2026
3a2634d
test: AI 이식을 검증할 기준 데이터와 모델을 테스트에 연결한다
amophi Oct 14, 2026
be280dc
feat: Qualcomm 기준 로그멜 변환을 옮긴다
amophi Oct 14, 2026
5edfa69
feat: AI 입력 경로(링 버퍼, 16kHz 리샘플러, 무음 게이트)를 옮긴다
amophi Oct 14, 2026
469ea92
feat: AI 분류 규칙(라벨 매핑, 투표, 위협 단서, 후처리)을 옮긴다
amophi Oct 14, 2026
a461f8b
test: YAMNet 출력 검증에 쓰는 모델 입력(logmel_golden.bin)을 추가한다
amophi Oct 14, 2026
3d36693
feat: YAMNet 실행과 실시간 AI 파이프라인을 옮긴다
amophi Oct 14, 2026
3e3c6cb
docs: README 의 AI 설명을 새 파이프라인에 맞추고 안드로이드 버전을 잇는다
amophi Oct 14, 2026
2ca83ff
feat: 오버레이를 새 AI 파이프라인에 연결한다
amophi Oct 14, 2026
a3e46a9
feat: 개발자 모드의 AI HUD 글자와 결과 기록(CSV)을 옮긴다
amophi Oct 14, 2026
4740483
feat: 분류 탭의 데이터(18개 언어 소리 이름, 묶음 이름, 묶음 표)를 Core 에 넣는다
amophi Oct 14, 2026
76963ba
feat: 분류 탭의 소리 목록·묶음·찾기 계산을 Core 로 옮긴다
amophi Oct 14, 2026
d32abad
feat: 화면 언어 18개와 언어별 문자열 표를 Core 에 둔다
amophi Oct 14, 2026
c863a3e
feat: 화면 문자열을 언어별 표로 옮기고 18개 언어와 오른쪽에서 왼쪽 배치를 지원한다
amophi Oct 14, 2026
a325a19
test: 화면 글자가 모두 문자열 표를 거치는지 앱 소스를 지킨다
amophi Oct 14, 2026
7b4c3da
i18n: 화면 문자열을 일본어·중국어(간체·번체)·베트남어·태국어·인도네시아어로 옮긴다
amophi Oct 14, 2026
f33cb97
i18n: 화면 문자열을 러시아어·폴란드어·터키어·힌디어·아랍어로 옮긴다
amophi Oct 14, 2026
3850d90
i18n: 화면 문자열을 스페인어·포르투갈어(브라질)·프랑스어·이탈리아어·독일어로 옮긴다
amophi Oct 14, 2026
906a35c
feat: 화면 색 팔레트를 Core 에 두고 대비 테스트와 XAML 대조 테스트를 더한다
amophi Oct 14, 2026
d1f55df
feat: 카드·버튼·스위치 줄·슬라이더 줄·선택지 칸을 공통 서식(Theme.xaml)으로 둔다
amophi Oct 14, 2026
c63a21d
feat: 색 선택 창을 안드로이드 모양으로 바꾼다
amophi Oct 14, 2026
5983a4f
feat: 런처와 오버레이 편집 패널에 공통 서식을 입히고 진하기를 저장값 그대로 보인다
amophi Oct 14, 2026
a8d9c37
i18n: 16개 언어의 진하기 문구를 안드로이드 번역에 맞추고 common.on 을 지운다
amophi Oct 14, 2026
e80da98
feat: 소리 탭에서 바꾼 소리 종류와 고급 모드를 설정에 저장한다
amophi Oct 14, 2026
82d532f
feat: 오버레이의 AI 가 소리 탭에서 바꾼 소리 종류를 따른다
amophi Oct 14, 2026
4aeefc6
feat: 소리 탭 목록의 줄과 글 꼴을 Core 에서 정한다
amophi Oct 14, 2026
1f49fa9
feat: 앱 언어로 묻는 확인 창을 더한다
amophi Oct 14, 2026
9306b5f
feat: 런처에 소리 탭을 더한다
amophi Oct 14, 2026
ceafed6
docs: 소리 탭의 소리 이름과 번역이 AudioSet 온톨로지의 CC BY-SA 4.0 각색물임을 적는다
amophi Oct 14, 2026
22fda37
feat: 오버레이 애니메이션을 60fps 기준으로 시간 정규화한다
amophi Oct 14, 2026
ba9f34d
feat: 숨긴 종류로 지나간 소리를 보관해 늦게 온 위협음 판정에 그린다
amophi Oct 14, 2026
5c88db9
perf: 보이는 것이 없으면 오버레이가 프레임마다 그리지 않고 쉬다가 소리가 나면 깨어난다
amophi Oct 14, 2026
0a7d86b
feat: 사운드 모드 2.0 은 좌우를 Mid/Side 로 화면 둘레에 펼친다
amophi Oct 14, 2026
fdc1799
fix: 모서리 자리가 조용하면 16:9 화면에서 파도와 외곽선이 통째로 사라지던 것을 고친다
amophi Oct 14, 2026
ce6c746
feat: 제보 링크와 앱 버전 문구를 Core 에 옮긴다
amophi Oct 14, 2026
a06b366
feat: 오픈소스 고지를 저장소 원본 그대로 Core 에 넣고 구분선을 창 폭에 맞춘다
amophi Oct 14, 2026
10ab73d
feat: 실행 상태와 멈춘 이유를 Core 에 두고 홈에 보일 안내를 고른다
amophi Oct 14, 2026
1c6a51e
feat: 도움말 탭을 안드로이드처럼 펼치기 카드로 다시 짜고 제보·앱 정보·라이선스 창을 둔다
amophi Oct 14, 2026
3379450
feat: 오버레이가 멈춘 이유와 AI 상태를 런처에 알리고 홈 상태 줄 아래에 안내를 보인다
amophi Oct 14, 2026
40cfc17
feat: 알림 영역(트레이) 아이콘으로 상태를 보이고 켜고 끄고 런처로 돌아온다
amophi Oct 14, 2026
6c0b485
i18n: 도움말·홈 안내·트레이 문자열을 일본어·중국어(간체·번체)·베트남어·태국어·인도네시아어로 옮긴다
amophi Oct 14, 2026
ffdab33
i18n: 도움말·홈 안내·트레이 문자열을 러시아어·폴란드어·터키어·힌디어·아랍어로 옮긴다
amophi Oct 14, 2026
9ed3916
i18n: 도움말·홈 안내·트레이 문자열을 스페인어·포르투갈어(브라질)·프랑스어·이탈리아어·독일어로 옮긴다
amophi Oct 14, 2026
8cda20b
fix: 2채널 출력의 방향 안내를 사운드 모드 2.0 의 펼치기에 맞춘다
amophi Oct 14, 2026
f96b44c
fix: 사운드 모드 도움말에서 스테레오 그래픽이 좌우에만 나온다는 문장을 고친다
amophi Oct 14, 2026
34661ea
docs: README 에 소리 탭·도움말·안내·트레이·18개 언어와 렌더링 변화를 적는다
amophi Oct 14, 2026
0748b24
feat: 개발자 모드 HUD 의 소리 크기를 가장 최근 캡처 버퍼의 피크로 둔다
amophi Oct 14, 2026
d77f7bd
feat: 개발자 모드 HUD 를 언제 읽고 언제 기록할지 Core 에서 정한다
amophi Oct 14, 2026
af58120
feat: 개발자 모드의 결과 기록 스위치(DeveloperRecord)를 설정에 저장한다
amophi Oct 14, 2026
2183f97
feat: 개발자 모드에서 오버레이 왼쪽 위에 AI HUD 를 띄우고 가운데 AI 라벨을 없앤다
amophi Oct 14, 2026
1d2cf8e
feat: 런처와 오버레이 편집 패널에 "결과를 파일로 기록" 스위치를 더한다
amophi Oct 14, 2026
d1bc9d3
feat: 튜토리얼 그림의 소리 대본과 소리 박자를 Core 에 옮긴다
amophi Oct 14, 2026
9b124ba
feat: 튜토리얼을 본 적이 있는지 설정에 남긴다
amophi Oct 14, 2026
80cf125
feat: 튜토리얼 소리 조각을 WAV 로 넣고 출처를 THIRD_PARTY 에 적는다
amophi Oct 14, 2026
7378e49
feat: 튜토리얼 창을 더한다
amophi Oct 14, 2026
379dda8
feat: 처음 열 때 튜토리얼을 띄우고 홈의 "튜토리얼 보기"로 다시 연다
amophi Oct 14, 2026
0d8df19
fix: 한국어 화면 문구의 '고르다'를 '선택'으로 바꾼다
amophi Oct 14, 2026
51d9137
docs: README 에 튜토리얼과 개발자 모드 HUD·CSV 기록을 적는다
amophi Oct 14, 2026
0cd523a
chore: 버전을 2.0.0 으로 올린다
amophi Oct 14, 2026
36d1bb5
fix: 키보드로 런처의 모든 탭 내용에 닿고 Ctrl+Tab·Esc 가 어디서나 통하게 한다
amophi Oct 15, 2026
e55ecb9
fix: 언어 콤보를 키보드로 둘러볼 때 고르기 전에는 언어가 바뀌지 않게 한다
amophi Oct 15, 2026
0933101
fix: 화면 읽어주기가 아이콘·단축키·색 버튼과 소리 목록을 이름으로 읽게 한다
amophi Oct 15, 2026
ae6af32
fix: 색 선택 창의 사각형·막대·자주 쓰는 색을 화면 읽어주기가 읽게 한다
amophi Oct 15, 2026
282c99f
fix: 소리 탭의 바꾼 소리 수와 꺼짐 안내를 화면 읽어주기가 바로 읽게 한다
amophi Oct 15, 2026
e50f0cf
fix: 구역·카드·창 제목을 화면 읽어주기에 제목 단계로 알린다
amophi Oct 15, 2026
b58850d
fix: 편집 화면에서 마우스로 끄는 값을 모두 패널 슬라이더로도 바꾸게 하고 손잡이는 화면 읽어주기에서 숨긴다
amophi Oct 15, 2026
1df47bd
docs: README 에 키보드와 화면 읽어주기로 쓰는 법을 적는다
amophi Oct 15, 2026
a593e9e
fix: 소리 탭을 스크롤하거나 다시 그릴 때 고급 모드가 저절로 꺼지지 않게 한다
amophi Oct 15, 2026
8ac4145
chore: 앱 이름을 'Sound Visualizer' 에서 'SoundVisualizer' 로 붙여 쓴다
amophi Oct 15, 2026
3487dce
fix: 오버레이 편집 패널에서 모드 칸을 바꾸면 슬라이더를 새 모드의 값으로 다시 채운다
amophi Oct 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
21 changes: 21 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: build

on:
push:
branches: [ main, "feature/**" ]
pull_request:
branches: [ main ]

jobs:
build:
name: 빌드 · 단위 테스트
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x
- name: 빌드
run: dotnet build SoundVisualizer.slnx -c Release
- name: 단위 테스트
run: dotnet test SoundVisualizer.Tests/SoundVisualizer.Tests.csproj -c Release --no-build
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ obj/
*.suo
*.sln.docstates
.agents/mcp_config.json
*.lscache
61 changes: 45 additions & 16 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<br/>

# Sound Visualizer
# SoundVisualizer

<img width="1024" height="818" alt="SoundVisualizer" src="https://github.com/user-attachments/assets/b11aa5b3-c995-4e36-8ff6-3e2f2c2b2388" />

Expand All @@ -20,9 +20,11 @@

<br/>

> **Sound Visualizer**는 컴퓨터의 시스템 오디오를 실시간으로 캡처하여 방향·크기·의미를 그래픽 오버레이로 변환하는 데스크톱 애플리케이션입니다.
> **SoundVisualizer**는 컴퓨터의 시스템 오디오를 실시간으로 캡처하여 방향·크기·의미를 그래픽 오버레이로 변환하는 데스크톱 애플리케이션입니다.
단순한 파형 시각화를 넘어, **YAMNet**과 **ONNX Runtime** 기반의 AI 사운드 분류기를 내장하여 현재 재생 중인 소리의 종류(배경음, 대화음, 위협음 등)를 실시간으로 인지하고 피드백을 제공합니다.

> 📱 안드로이드 버전도 있습니다: [SoundVisualizer for Android](https://github.com/bibibic76/SoundVisualizer)

---

## 📖 목차
Expand All @@ -31,7 +33,6 @@
- [시스템 및 AI 아키텍처](#-시스템-및-ai-아키텍처)
- [설치 및 실행 방법](#-설치-및-실행-방법)
- [빌드 가이드 (개발자용)](#-빌드-가이드-개발자용)
- [팀원 및 역할](#-팀원-및-역할)
- [라이선스](#-라이선스)

---
Expand All @@ -55,21 +56,40 @@
- **원형 모드 (Circle)**: 화면 중앙을 기점으로 바깥쪽으로 퍼져나가는 원형 파동을 렌더링합니다.
- **패드 모드 (Pad)**: 지정된 공간 그리드(방향)에 고정된 패드 형태로 소리를 표현합니다.
- **외곽선 모드 (Outline)**: 파도 모드를 기반으로, 파도의 상한 외곽선 테두리만 표현하여 화면 가림을 최소화합니다.
- 30 FPS부터 모니터 주사율까지, 최대 프레임을 얼마로 두어도 그래픽이 같은 빠르기로 움직입니다.

### 2. 온스크린 실시간 제어 및 에디터
전체 화면 게임을 내리지 않고도 오버레이 상태에서 즉각적인 수정이 가능합니다.
- **F2 / F3 단축키**: 사운드 모드 및 시각화 모드 실시간 변경. 핫키는 변경 가능합니다.
- **에디터 모드 (기본 F4키)**: 화면에 나타나는 가이드라인 경계를 직접 드래그하여 시각화 영역의 크기와 한계를 자유롭게 리사이징합니다. 색상, 투명도, AI 감지 민감도 등 모든 설정 또한 패널에서 조정 가능합니다.
- **에디터 모드 (기본 F4키)**: 화면에 나타나는 가이드라인 경계를 직접 드래그하여 시각화 영역의 크기와 한계를 자유롭게 리사이징합니다. 색상, 투명도 등 모든 설정 또한 패널에서 조정 가능합니다.

### 3. 하드웨어 인식 7.1 다중 채널 지원
- 시스템의 오디오 채널 구성(Stereo, 5.1, 7.1 Surround)을 자동 인식하고, 소리의 발생 방향(각 채널)을 정확하게 매핑하여 입체적인 시각 효과를 렌더링합니다.
- 사운드 모드는 실행할 때와 출력 장치가 바뀔 때 그 장치에 맞춰지며, 직접 바꿀 수도 있습니다.
- 스테레오 출력에서는 좌우에 함께 있는 소리를 화면 위쪽에, 좌우 차이만 옆쪽에 그립니다. 그래서 가운데에서 나는 소리가 양쪽에서 나는 소리처럼 보이지 않습니다.

### 4. AI 실시간 사운드 분류 (ONNX & YAMNet)
- **3-Class 분류 체계**: 모든 소리를 `Ambient(환경음)`, `Speech(대화음)`, `Danger(위협음)` 3가지로 분석하여 카테고리별로 지정된 UI 색상과 투명도로 동적 시각 피드백을 제공합니다. 색상과 투명도는 커스터마이징이 가능합니다.
- **Gunshot Booster**: 게임 및 영상 내의 총소리를 놓치지 않도록 특수 학습된 부스터 모델이 가동되어 위협음 탐지 민감도를 향상합니다.

### 5. 글로벌 다국어 지원
- 한국어, 영어, 일본어, 중국어, 스페인어, 프랑스어, 독일어, 러시아어 등 8개 국어를 지원합니다.
- **위협 단서**: 사이렌, 경보, 폭발음, 폭죽 같은 경고음은 모델의 상위 후보 다섯 개 안에(5% 이상) 들기만 해도 `위협음`으로 봅니다. 음악이나 게임 소리에 묻혀도 놓치지 않기 위해서입니다. 총소리 이름은 오경보를 막기 위해 이렇게 끌어올리지 않습니다.
- **흔들리지 않는 색**: `위협음`은 조건을 넘는 첫 결과에 바로 바뀌고, `대화음`과 `환경음`은 두 번 연달아 같아야 바뀌어 색이 깜빡이지 않습니다. 조용한 동안에는 AI 가 쉬고, 소리가 나면 바로 다시 듣습니다.
- **모든 채널을 듣습니다**: 5.1/7.1 환경에서는 앞쪽뿐 아니라 뒤쪽·옆쪽 채널의 소리도 AI 가 듣습니다.
- **늦게 온 위협음**: `위협음` 판정이 소리보다 조금 늦게 와도, 그 소리를 나던 때의 크기로 그립니다. 앞서 숨겨 둔 종류였던 소리도 그렇습니다.

### 5. 소리마다 종류 정하기 (분류 탭)
- AI 가 알아듣는 소리 521개를 안드로이드 버전과 같은 묶음으로 보여 주고, 묶음마다(고급 모드에서는 소리마다) `환경음`, `대화음`, `위협음` 가운데 무엇으로 볼지 선택합니다.
- 이름으로 찾고, 종류나 바꾼 소리로 거르고, 한 번에 모두 되돌릴 수 있습니다. 바꾼 것은 오버레이의 AI 에 바로 반영됩니다.

### 6. 도움말, 안내, 트레이 아이콘
- **도움말 탭**: 시작하기, 표현 모드, 소리 종류, 단축키, 자주 묻는 질문, 정보가 미리 채워진 GitHub 이슈나 메일로 보내는 제보 버튼, 오픈소스 라이선스를 담았습니다.
- **안내**: 캡처할 출력 장치가 없을 때, 소리 종류 구분을 쓸 수 없을 때, 시각화가 멈춘 까닭을 홈 탭에 알려 줍니다.
- **트레이 아이콘**: 알림 영역에서 시각화를 켜고 끄거나, 런처로 돌아오거나, 종료할 수 있습니다.
- **튜토리얼**: 처음 열면 실제 그리기 엔진으로 소리, 방향, 소리 종류가 어떻게 그려지는지 짧게 보여 줍니다. 홈 탭에서 다시 볼 수 있습니다.
- **개발자 모드**: AI 가 들은 소리(상위 다섯 개, 확신도, 걸린 시간)를 오버레이 왼쪽 위에 띄우고, 모든 결과를 앱 옆 `ai-log` 폴더의 CSV 파일로 기록할 수 있습니다.
- **키보드와 화면 읽어주기**: 런처의 모든 칸에 Tab 키로 닿습니다. 탭 줄에서는 화살표로 탭을 옮기고, 어디서나 `Ctrl + Tab` 으로 다음 탭으로 갑니다. 대화 창과 오버레이 편집 패널은 `Esc` 로 닫습니다. 언어 목록은 화살표로 열어 둘러보고 `Enter` 로 선택할 때만 언어가 바뀝니다. 아이콘 버튼, 단축키 버튼, 색 버튼, 소리 목록은 내레이터·NVDA 같은 화면 읽어주기가 이름으로 읽고, 실행 상태와 안내, 바꾼 소리 수는 바뀔 때 바로 읽힙니다. 편집 화면에서 마우스로 끄는 값은 모두 패널의 슬라이더로도 바꿀 수 있습니다.

### 7. 글로벌 다국어 지원
- 한국어, 영어, 일본어, 중국어(간체·번체), 베트남어, 태국어, 인도네시아어, 스페인어, 포르투갈어(브라질), 프랑스어, 이탈리아어, 독일어, 러시아어, 폴란드어, 터키어, 힌디어, 아랍어(오른쪽에서 왼쪽) 등 18개 언어를 지원합니다. 기본값은 Windows 표시 언어를 따릅니다.
- 화면 글꼴은 Pretendard 이고, Pretendard 에 없는 문자는 Windows 글꼴로 보입니다.

---

Expand All @@ -78,34 +98,43 @@
본 프로젝트는 고성능 실시간 처리를 위해 철저한 메모리 관리 및 백그라운드 최적화로 설계되었습니다.

* **Core Audio API (WASAPI)**: Windows 시스템 전체 오디오를 딜레이 없이 루프백 캡처.
* **DSP & FFT 연산**: 백그라운드 오디오 스레드에서 초당 수십 번의 고속 주파수 변환 연산 수행.
* **채널별 크기 측정**: 캡처 스레드가 버퍼마다 채널별 최고 크기를 재고, 렌더 루프는 지난 프레임 뒤로 가장 큰 값을 가져갑니다.
* **Zero-Allocation 렌더링**: C# / WPF 환경에서 GC(가비지 컬렉터)의 개입을 최소화하여 프레임 드랍 방지.
* **ONNX 추론 파이프라인**: 16kHz 모노 변환 및 Log-mel 스펙트로그램 전처리를 거친 후, `Microsoft.ML.OnnxRuntime` 엔진으로 전이 학습된 YAMNet 가중치 기반 실시간 분류 수행.
* **프레임과 무관한 움직임, 쉬는 오버레이**: 스무딩은 60 FPS 기준으로 맞춥니다. 1초 동안 보이는 것이 없으면 프레임마다 그리지 않고 쉬다가, 소리가 나면 바로 깨어납니다.
* **ONNX 추론 파이프라인**: 250ms 마다 최근 0.975초의 소리를 모노로 섞고, 앨리어싱 방지 필터를 거쳐 16kHz 로 바꾼 뒤, 모델이 만들어질 때와 같은 방식의 Log-mel 스펙트로그램으로 바꿔 `Microsoft.ML.OnnxRuntime` 의 YAMNet 으로 분류합니다. 모델 파일은 불러올 때 고정된 SHA-256 으로 확인하고, 각 단계는 기준 출력과 비교하는 단위 테스트로 검증합니다.

---

## 🚀 설치 및 실행 방법

Sound Visualizer는 설치가 필요 없는 가벼운 **포터블(Portable)** 패키지로 제공됩니다.
SoundVisualizer는 설치가 필요 없는 가벼운 **포터블(Portable)** 패키지로 제공됩니다. Windows 10/11 (64비트)에서 돌아가며, .NET 을 따로 설치하지 않아도 됩니다.

1. **[GitHub Releases](https://github.com/amophi/SoundVisualizer/releases)** 페이지에 접속합니다.
2. 최신 버전의 `SoundVisualizer.zip` 파일을 다운로드 및 압축 해제합니다.
2. 최신 버전의 `SoundVisualizer_vX.Y.zip` 파일을 다운로드해 원하는 곳에 압축 해제합니다.
3. 폴더 내의 **`SoundVisualizer.exe`**를 실행합니다.
4. 런처에서 언어 및 초기 설정을 마친 후, **Start**를 클릭하여 오버레이를 활성화합니다.
4. 런처에서 언어 및 초기 설정을 마친 후, **실행**을 눌러 오버레이를 켭니다.

설정은 `SoundVisualizer.exe` 옆의 `settings.json` 에 저장되므로, 폴더를 그대로 옮기거나 복사해도 됩니다.

---

## 🛠 빌드 가이드 (개발자용)

코드 수정 및 기여를 위해 소스에서 직접 빌드하는 방법입니다.

1. **요구 사항**: Windows 10/11, Visual Studio 2022 (.NET 데스크톱 개발 워크로드), .NET 10.0 SDK
1. **요구 사항**: Windows 10/11, .NET 10 SDK. Visual Studio 2026 (.NET 데스크톱 개발 워크로드)은 있어도 되고 없어도 됩니다.
2. **리포지토리 클론**:
```bash
git clone https://github.com/amophi/SoundVisualizer.git
```
3. Visual Studio에서 `SoundVisualizer.slnx` 솔루션을 엽니다.
4. `Release` 또는 `Debug` 구성 선택 후 솔루션을 빌드(`Ctrl + Shift + B`)하고 실행(`F5`)합니다.
3. 리포지토리 폴더에서 빌드하고 테스트합니다.
```bash
dotnet build SoundVisualizer.slnx -c Release
dotnet test SoundVisualizer.Tests/SoundVisualizer.Tests.csproj
```
또는 Visual Studio 에서 `SoundVisualizer.slnx` 를 열어 빌드(`Ctrl + Shift + B`)하고 실행(`F5`)합니다.

솔루션은 세 프로젝트로 나뉩니다. `SoundVisualizer`(WPF 앱), `SoundVisualizer.Core`(오디오, AI, 렌더링 계산, 설정, 18개 언어 문자열 표. 화면에 의존하지 않음), `SoundVisualizer.Tests`(xUnit 테스트. AI 각 단계의 기준 출력 비교 포함).

---

Expand Down
Loading
Loading