레슨 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가 사이 음을 자동으로 피치 변환합니다. 단, 원음에서 멀어질수록 음질이 저하됩니다.