← Home

Polyphonic Synthesizer

마우스 클릭 또는 키보드로 연주하는 2옥타브 폴리포닉 신시사이저.

keyboard — C3 to B4

C3a
D3s
E3d
F3f
G3g
A3h
B3j
C4k
D4l
E4;
w
e
t
y
u
o
p

예제 악보

keyboard shortcuts

white: a s d f g h j k l ;  black: w e t y u o p

waveform

attack — 20 ms

0 ms500 ms

release — 300 ms

50 ms2000 ms

master volume — 70%

delay effect

이 실험에 대해

각 음표마다 독립적인 OscillatorNode를 생성해 동시에 여러 음을 낼 수 있다(폴리포닉). 어택은 소리가 최대 볼륨에 도달하는 시간, 릴리즈는 키를 떼고 소리가 사라지는 시간이다. 딜레이는 DelayNode에 피드백 루프를 연결해 에코 효과를 만든다.

핵심 코드

// 폴리포닉: 음표마다 독립적인 osc + gain
function noteOn(freq: number) {
  const osc = ctx.createOscillator()
  const gain = ctx.createGain()
  osc.type = waveType
  osc.frequency.value = freq

  // 어택 엔벨로프
  const now = ctx.currentTime
  gain.gain.setValueAtTime(0, now)
  gain.gain.linearRampToValueAtTime(0.4, now + attack / 1000)

  osc.connect(gain)
  gain.connect(master)
  osc.start()
}

// 릴리즈 엔벨로프
function noteOff(note: string) {
  const now = ctx.currentTime
  gain.gain.exponentialRampToValueAtTime(
    0.0001, now + release / 1000
  )
  osc.stop(now + release / 1000 + 0.05)
}

// 딜레이 피드백 루프
delay.connect(feedback)   // delay → feedback
feedback.connect(delay)   // feedback → delay (루프)
delay.connect(master)     // 딜레이 출력 → 마스터