Skip to content

feat(player): 신스 다듬기 — 벨로시티·엔벨로프·로우패스 (음색 3단계) - #59

Merged
redsunjin merged 2 commits into
mainfrom
feat/player-synth-polish
Aug 5, 2026
Merged

feat(player): 신스 다듬기 — 벨로시티·엔벨로프·로우패스 (음색 3단계)#59
redsunjin merged 2 commits into
mainfrom
feat/player-synth-polish

Conversation

@redsunjin

Copy link
Copy Markdown
Owner

요약

화음 발성(PR #52)의 예고된 후속 — 소리의 다이내믹과 질감 층.
스펙: docs/superpowers/specs/2026-08-05-player-synth-polish-design.md

  • 벨로시티 커브: velocity = 0.7 + accentLevel×0.3 + energy×0.1 (0.6~1.1) — merge/고에너지 순간이 실제로 크게 울린다 (기존: type 3단 고정 게인).
  • 엔벨로프: type별 attack/release — tap(0.008/0.06) 깔끔한 타격, accent(0.005/0.12) 즉각+여운, hold(0.03/0.2) 패드성 페이드. release는 duration 이후 꼬리 감쇠.
  • 로우패스 필터: voice별 BiquadFilter — hold(sawtooth) 1400Hz, accent 2600, tap 3200, 화음 패드 1200Hz로 더 어둡게. 미지원 환경 폴백.

검증

신규 3건(velocity 범위+accent>tap 평균, cue 필드, 필터 노드 수·컷오프) 포함 npm run qa 전체(node 96 + UI 33 + 하니스 8) 통과 — 스케일 적합·fingerprint 결정성 무회귀, build:extension 통과.

경계

player/src/lib/ 2개 파일 + 테스트 + 스펙만 수정.

🤖 Generated with Claude Code

selimDGAX and others added 2 commits August 5, 2026 15:52
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
강조/에너지가 실제 음량으로 반영되는 velocity(0.6~1.1)를 노트에
부여하고, noteType별 attack/release 엔벨로프(패드성 hold, 즉각적
accent)와 voice별 로우패스 필터(사각·톱니 하모닉 정리, 화음 패드는
1200Hz로 더 어둡게)를 적용한다. 구필드 없는 cue는 기존 동작 폴백.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b9ad8abad0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

gainNode.gain.exponentialRampToValueAtTime(baseVolume * cue.gainMultiplier, startTime + 0.01);
gainNode.gain.exponentialRampToValueAtTime(0.0001, endTime);
gainNode.gain.exponentialRampToValueAtTime(baseVolume * cue.gainMultiplier, startTime + attack);
gainNode.gain.exponentialRampToValueAtTime(0.0001, endTime + release);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Hold gain until cue duration before releasing

With Web Audio automation, this second exponentialRampToValueAtTime starts from the previous scheduled event, which is the attack peak, so every cue begins fading immediately after attack and reaches silence only at endTime + release. In normal playback this means the new release tail is not actually after the note duration; hold/accent cues lose their body over the whole note instead of sustaining until endTime. Schedule the peak value at endTime before ramping down to make the release happen after the cue duration.

Useful? React with 👍 / 👎.

@redsunjin
redsunjin merged commit 4cd6b4e into main Aug 5, 2026
4 checks passed
@redsunjin
redsunjin deleted the feat/player-synth-polish branch August 5, 2026 07:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants