Learning
레슨 2 / 8·20분

이펙트와 프로세싱

오디오 이펙트 체인 구성하기

이펙트(Effect)는 원본 소리를 가공하여 새로운 느낌을 만듭니다. Reverb는 공간감(잔향), Delay는 메아리, Distortion은 일그러짐, Filter는 특정 주파수를 걸러냅니다. Tone.js에서는 .connect()로 이펙트를 연결하거나, .chain()으로 여러 이펙트를 순서대로 연결할 수 있습니다.

javascript
import * as Tone from 'tone';

// ── 개별 이펙트 생성 ──
// Reverb — 잔향 (콘서트홀처럼 울리는 효과)
const reverb = new Tone.Reverb({
  decay: 3,       // 잔향 길이 (초)
  wet: 0.5,       // 원본 대비 이펙트 비율 (0~1)
}).toDestination();

// Delay — 메아리 효과
const delay = new Tone.FeedbackDelay({
  delayTime: '8n',   // 딜레이 간격 (8분음표)
  feedback: 0.4,      // 반복 감쇄 (0~1)
  wet: 0.3,
}).toDestination();

// Distortion — 소리 일그러짐
const distortion = new Tone.Distortion({
  distortion: 0.6,   // 일그러짐 정도 (0~1)
  wet: 0.7,
}).toDestination();

// Filter — 주파수 필터링
const filter = new Tone.Filter({
  frequency: 800,     // 기준 주파수 (Hz)
  type: 'lowpass',     // lowpass, highpass, bandpass
  rolloff: -24,        // 감쇄 기울기 (dB/octave)
}).toDestination();

이펙트 체인 연결하기

javascript
// ── connect()로 하나씩 연결 ──
const synth1 = new Tone.Synth();
synth1.connect(reverb); // synth → reverb → destination
synth1.triggerAttackRelease('C4', '4n');

// ── chain()으로 여러 이펙트를 순서대로 연결 ──
const chorus = new Tone.Chorus(4, 2.5, 0.5);
const tremolo = new Tone.Tremolo(9, 0.75).start();

const synth2 = new Tone.PolySynth(Tone.Synth);
// synth2 → chorus → tremolo → reverb → speaker
synth2.chain(chorus, tremolo, reverb, Tone.Destination);

synth2.triggerAttackRelease(['E4', 'G4', 'B4'], '2n');

// ── 실시간으로 이펙트 파라미터 변경 ──
reverb.decay = 5;
delay.delayTime.value = 0.25;
filter.frequency.rampTo(2000, 1); // 1초에 걸쳐 주파수 변경
  • Reverb — 공간감/잔향, decay로 길이 조절
  • FeedbackDelay — 반복 메아리, feedback으로 감쇄 조절
  • Distortion — 기타 앰프 같은 일그러짐
  • Filter — lowpass(고음 제거), highpass(저음 제거), bandpass(특정 대역만)
  • .connect(effect) — 한 개의 이펙트에 연결
  • .chain(a, b, c, Tone.Destination) — 여러 이펙트를 순서대로 체이닝
  • wet — 이펙트 적용 비율 (0: 원본만, 1: 이펙트만)
💡

rampTo() 메서드를 사용하면 파라미터를 부드럽게 전환할 수 있습니다. filter.frequency.rampTo(4000, 2)처럼 목표값과 시간(초)을 지정하면 2초에 걸쳐 점진적으로 변합니다.