feat(player): 신스 다듬기 — 벨로시티·엔벨로프·로우패스 (음색 3단계) - #59
Conversation
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>
There was a problem hiding this comment.
💡 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); |
There was a problem hiding this comment.
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 👍 / 👎.
요약
화음 발성(PR #52)의 예고된 후속 — 소리의 다이내믹과 질감 층.
스펙:
docs/superpowers/specs/2026-08-05-player-synth-polish-design.mdvelocity = 0.7 + accentLevel×0.3 + energy×0.1(0.6~1.1) — merge/고에너지 순간이 실제로 크게 울린다 (기존: type 3단 고정 게인).검증
신규 3건(velocity 범위+accent>tap 평균, cue 필드, 필터 노드 수·컷오프) 포함
npm run qa전체(node 96 + UI 33 + 하니스 8) 통과 — 스케일 적합·fingerprint 결정성 무회귀,build:extension통과.경계
player/src/lib/2개 파일 + 테스트 + 스펙만 수정.🤖 Generated with Claude Code