레슨 4 / 8·20분
이펙트와 오디오 프로세싱
고급 이펙트 체인 구성
이펙트 체인은 소리가 여러 이펙트를 순서대로 통과하며 가공되는 구조입니다. Tone.js는 EQ, 컴프레서, 코러스, 페이저, 비트크러셔 등 다양한 이펙트를 제공합니다. 이펙트의 순서에 따라 최종 사운드가 크게 달라지므로 체인 구성이 중요합니다.
javascript
import * as Tone from 'tone';
// EQ3 — 3밴드 이퀄라이저
const eq = new Tone.EQ3({
low: -6, // 저음 (dB)
mid: 3, // 중음
high: -3, // 고음
lowFrequency: 400, // 저음 기준 주파수
highFrequency: 2500, // 고음 기준 주파수
});
// Compressor — 다이나믹 레인지 압축
const compressor = new Tone.Compressor({
threshold: -20, // 압축 시작점 (dB)
ratio: 4, // 압축 비율
attack: 0.003, // 반응 속도
release: 0.25, // 해제 속도
});
// Chorus — 풍성한 사운드
const chorus = new Tone.Chorus({
frequency: 1.5, // LFO 주파수
delayTime: 3.5, // 딜레이 시간 (ms)
depth: 0.7, // 효과 깊이
wet: 0.5,
}).start();javascript
// Phaser — 위상 변조 효과
const phaser = new Tone.Phaser({
frequency: 0.5, // LFO 속도
octaves: 3, // 주파수 범위
stages: 10, // 필터 단계 수
wet: 0.5,
});
// BitCrusher — 로파이/레트로 사운드
const bitCrusher = new Tone.BitCrusher({
bits: 4, // 비트 수 (1~16, 낮을수록 거칠음)
});
// AutoWah — 와와 페달 효과
const autoWah = new Tone.AutoWah({
baseFrequency: 100,
octaves: 6,
sensitivity: 0,
wet: 0.8,
});
// 이펙트 체인 구성
const synth = new Tone.PolySynth(Tone.Synth);
synth.chain(eq, chorus, compressor, Tone.Destination);
synth.triggerAttackRelease(['C4', 'E4', 'G4'], '2n');javascript
// 실시간 이펙트 파라미터 제어
const reverb = new Tone.Reverb({ decay: 4, wet: 0.5 }).toDestination();
const delay = new Tone.FeedbackDelay('8n', 0.5).connect(reverb);
const synth = new Tone.Synth().connect(delay);
// 슬라이더로 이펙트 제어하기
function updateReverb(value) {
reverb.wet.value = value; // 0~1
}
function updateDelay(time) {
delay.delayTime.rampTo(time, 0.1); // 부드럽게 전환
}
// LFO로 파라미터 자동 변조
const lfo = new Tone.LFO('4n', 200, 2000); // 주기, 최소, 최대
lfo.connect(autoWah.baseFrequency);
lfo.start();- •EQ3 — 저/중/고음 3밴드 이퀄라이저
- •Compressor — 소리의 다이나믹 레인지를 압축
- •Chorus — 소리를 약간 지연/변조하여 풍성하게
- •Phaser — 위상차로 독특한 스위핑 효과
- •BitCrusher — 비트 해상도를 낮춰 레트로 사운드
- •LFO — 다른 파라미터를 주기적으로 변조
💡
이펙트 체인의 순서가 중요합니다. 일반적으로 EQ -> Compression -> Modulation(Chorus 등) -> Time(Delay/Reverb) 순서가 자연스럽습니다. Reverb는 보통 체인의 마지막에 배치합니다.