정정된 총평: 코드를 직접 확인한 결과, 이 게임의 오디오 시스템은 예상보다 훨씬 완성도가 높다. 외부 음원 파일 없이 WebAudio로 전부 절차적 생성(오실레이터+노이즈)하는 구조이며, 음악/효과음/UI 3채널 독립 볼륨, 배경음악 루프(5음 펜타토닉 아르페지오), 17개 이상의 개별 SFX 함수(스냅·완성·피니시·팡파르·차지·승리·게임오버·가챠당첨 등)가 이미 구현돼 있다. 남은 기회는 "없는 걸 새로 만들기"가 아니라 이미 있는 계층을 더 세밀하게 나누는 것이다.
1. 업계 원칙 대조
- 비언어적 강화: 클릭=확인, 차임=보상, 낮은 톤=경고 — 우리 게임은
playUiClick()(설정/토글용, sine 880→660Hz 짧은 하강)과 playSnap()(카드 이동)으로 이미 이 원칙을 지키고 있음.
- 라우드니스 일관성: 모든 SFX가 게인 노드로 개별 엔벨로프 제어됨 — 오디오 파일이 아니라 매번 코드로 생성하므로 애초에 "믹싱 안 맞는 사운드"가 발생할 수 없는 구조적 장점.
- 축하 계층(celebration hierarchy):
playSnap(약)→playComplete/playDing(중)→playFanfare/playVictory(강)→playBoom(승리화면 최상급)까지 이미 단계가 나뉘어 있음 — 업계가 권장하는 구조와 이미 일치.
2. 코드 실측 — 현재 인벤토리
| 레이어 | 구현 상태 | 근거 |
| 3채널 볼륨(Music/SFX/UI) | 완비 | sfxGain()/uiGain()/musicGain() 개별 GainNode, 설정화면 3개 슬라이더 연결 |
| 배경음악 | 완비 | musicStep() — 5음 펜타토닉(C5 D5 E5 G5 A5) 1.6초 간격 아르페지오, 옥타브 아래 겹침으로 화음감. 첫 유저 제스처 후 시작(오토플레이 정책 대응) |
| 가챠 당첨음 | 완비 | playGachaWin() — "당첨 사운드 + 짧은 음악 스팅" 주석 확인 |
| 가챠 등급별 차등(레어/에픽 서스펜스 길이) | 미확인/보강기회 | playGachaWin() 호출부가 등급 인자를 받는지 코드 추가 확인 필요 |
| 범용 UI 클릭음 | 완비 | playUiClick() — 예상과 달리 이미 있었음(초안 보고서 오류 정정) |
3. 남은 개선 기회 (있는 걸 더 세밀하게)
① 가챠 리빌에 등급별 서스펜스 escalation 추가. 지금 playGachaWin()이 단일 사운드라면, 레어도가 높을수록 리빌 전 서스펜스(빌드업) 길이와 팡파르 크기를 늘리는 계층을 추가하는 게 가장 저비용 고효율 — Coin Master류 경쟁작의 표준 기법.
② 세트 완성 시 전용 차임을 카드 이동음과 더 뚜렷이 분리. playComplete()/playDing()이 이미 구분되어 있다면 좋은 상태 — 실제 플레이에서 "세트 완성=재화 획득"이라는 인과관계가 청각적으로 확실히 느껴지는지 실기기 테스트로 재확인 권장.
③ 마을(village) 화면 전용 앰비언트. 게임 화면엔 풍부한 SFX 계층이 있지만, 마을 화면은 배경음악만 흐르고 주민 등장/상호작용 시 전용 사운드(뾰옹 소리 등)가 있는지 불명확 — 있다면 유지, 없다면 짧은 절차적 "뾰옹" 사운드 하나 추가로 마을의 생동감을 크게 높일 수 있음(WebAudio 인프라가 이미 있어 구현 비용 매우 낮음).
부록 — 코드 위치 · 출처
Ssoly Town · Magpies Studio · 내부 의사결정 문서 · noindex