← Home

Grand Piano

Salamander Grand Piano 샘플 기반. 실제 피아노 녹음을 피치 시프팅해 각 음을 재생한다.

피아노 샘플을 로드합니다 (~2MB)

keyboard — C3 to E4

C3a
D3s
E3d
F3f
G3g
A3h
B3j
C4k
D4l
E4;
w
e
t
y
u
o
p
또는 스페이스바

volume — 80%

예제 악보

keyboard shortcuts

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

이 실험에 대해

Salamander Grand Piano의 실제 녹음 샘플을 AudioBuffer로 로드한다. 샘플은 3반음 간격으로 존재하고, 중간 음은 가장 가까운 샘플을 AudioBufferSourceNode.playbackRate로 조정해 재생한다. reverb는 합성 임펄스 응답을 ConvolverNode에 적용해 공간감을 만든다.

핵심 코드

// 샘플 피치 시프팅
const semitones = targetMidi - sampleMidi
const playbackRate = Math.pow(2, semitones / 12)

source.buffer = sampledBuffer   // 실제 피아노 녹음
source.playbackRate.value = playbackRate  // 음정 조정
source.start()

// 합성 reverb 임펄스 응답
for (let i = 0; i < length; i++) {
  data[i] = (Math.random() * 2 - 1)
           * Math.pow(1 - i / length, decay)
}
convolver.buffer = impulseBuffer