Learning
레슨 6 / 8·20분

샘플링과 재생

Sampler와 Player

Sampler는 녹음된 소리(샘플)를 피치 변환하여 악기처럼 사용할 수 있게 해줍니다. Player는 오디오 파일을 직접 재생합니다. 실제 악기 소리나 사운드 이펙트를 사용할 때 매우 유용합니다. GrainPlayer를 사용하면 그래뉼러 합성으로 독특한 사운드를 만들 수 있습니다.

javascript
import * as Tone from 'tone';

// Sampler — 샘플 기반 악기
const sampler = new Tone.Sampler({
  urls: {
    C4: 'piano-C4.mp3',
    E4: 'piano-E4.mp3',
    G4: 'piano-G4.mp3',
    C5: 'piano-C5.mp3',
  },
  baseUrl: '/samples/piano/',
  onload: () => {
    console.log('샘플 로드 완료');
    // 로드 후 연주 가능
    sampler.triggerAttackRelease('C4', '4n');
  },
}).toDestination();

// 로드 후 다른 음도 자동 피치 변환
// C4와 E4 사이의 D4는 자동으로 보간됨
sampler.triggerAttackRelease('D4', '4n');
sampler.triggerAttackRelease(['C4', 'E4', 'G4'], '2n'); // 화음
javascript
// Player — 오디오 파일 재생
const player = new Tone.Player({
  url: '/samples/drum-loop.mp3',
  loop: true,
  loopStart: 0,
  loopEnd: '1m',
  playbackRate: 1, // 재생 속도 (0.5 = 반속, 2 = 배속)
  onload: () => console.log('로드 완료'),
}).toDestination();

// 재생 제어
player.start();           // 재생
player.stop();            // 정지
player.playbackRate = 1.5; // 재생 속도 변경

// Players — 여러 오디오 파일 관리
const players = new Tone.Players({
  kick: '/samples/kick.mp3',
  snare: '/samples/snare.mp3',
  hihat: '/samples/hihat.mp3',
}).toDestination();

// 개별 재생
players.player('kick').start();
players.player('snare').start('+0.5'); // 0.5초 뒤
javascript
// GrainPlayer — 그래뉼러 합성
const grainPlayer = new Tone.GrainPlayer({
  url: '/samples/vocal.mp3',
  grainSize: 0.1,     // 그레인 크기 (초)
  overlap: 0.05,      // 그레인 오버랩
  playbackRate: 0.5,  // 재생 속도 (피치 변경 없이)
  detune: 0,          // 피치 미세 조정 (센트)
  loop: true,
}).toDestination();

grainPlayer.start();

// Buffer — 오디오 데이터 직접 조작
const buffer = new Tone.ToneAudioBuffer('/samples/sound.mp3', () => {
  console.log('Duration:', buffer.duration);
  console.log('Channels:', buffer.numberOfChannels);
  console.log('Sample Rate:', buffer.sampleRate);

  // 버퍼를 역재생
  buffer.reverse = true;

  const player = new Tone.Player(buffer).toDestination();
  player.start();
});
  • Sampler — 샘플을 피치 변환하여 악기처럼 사용
  • Player — 단일 오디오 파일 재생/루프
  • Players — 여러 오디오 파일을 이름으로 관리
  • GrainPlayer — 그래뉼러 합성으로 피치와 속도 독립 제어
  • ToneAudioBuffer — 오디오 데이터에 직접 접근/조작
  • playbackRate — 재생 속도 (1 = 원본, 2 = 2배속)
💡

Sampler에 모든 음의 샘플을 제공할 필요는 없습니다. 2~3옥타브 간격으로 샘플을 제공하면 Tone.js가 사이 음을 자동으로 피치 변환합니다. 단, 원음에서 멀어질수록 음질이 저하됩니다.