AudioKit의 Balancer
Balancer
이 코드는 AudioKit을 이용해 재생 중인 오디오(피아노 소스)와 지속적인 사인파(440Hz 등)를 비교하여 밸런스를 맞추는 오디오 신호처리 구조입니다. 아래에서 각 구성 요소와 오디오 흐름, 그리고 핵심 역할인 Balancer를 중심으로 설명드립니다.
클래스 목적
BalancerConductor는 AudioKit의 Balancer 노드를 활용해 두 오디오 신호(오디오 플레이어와 사인파 오실레이터)를 비교하여 레벨 균형을 맞춘 후 DryWetMixer로 두 소리를 혼합합니다. 사용자 조작으로는:
- 사인파 주파수(
frequency) - 오디오 재생 속도(
rate) - Dry/Wet 믹스 비율(
balance)을 조절할 수 있습니다.
신호 흐름
1
2
3
4
5
[Audio File] --(VariSpeed)--> [Fader] -->┐
├──[Balancer]──┐
[Oscillator] --------------------------->┘ │
├─[DryWetMixer]─▶ Output
[Fader] ------------------------------------------------┘
구성 요소 설명
| 구성 요소 | 설명 |
|---|---|
AudioPlayer |
피아노 샘플을 불러와 루프 재생 |
Oscillator |
440Hz 사인파 생성. frequency로 조절 가능 |
VariSpeed |
피아노 재생 속도 조절. rate로 설정 |
Fader |
VariSpeed의 출력을 볼륨 조절용으로 래핑 |
Balancer |
오실레이터의 출력을 기준으로 fader 출력을 레벨 밸런싱 |
DryWetMixer |
원본(fader)과 보정된(balancer) 출력을 블렌딩 |
Engine.output |
최종 믹싱된 결과를 출력 |
@Published 변수
| 변수 | 설명 |
|---|---|
frequency |
오실레이터의 주파수를 0.5초에 걸쳐 슬라이딩 조절 ramp(to: frequency, duration: 0.5) |
rate |
VariSpeed를 통해 오디오 재생 속도 조절 (1.0이 원래 속도) |
balance |
DryWetMixer의 블렌딩 비율 조절. 0 → 원본만 / 1 → 밸런서만 |
Balancer란?
Balancer(source, comparator)는source의 레벨을comparator에 맞춰 보정합니다.-
이 경우:
source: 오실레이터 (톤 기준)comparator: 피아노 파일 (재생된 사운드)
- 즉, 오실레이터 신호의 레벨이 피아노와 일치하도록 자동 조정됩니다.
- 이는 두 소스 간 일정한 레벨 밸런스를 유지할 때 유용합니다 (예: 모노소스 정렬, 분석 기준 맞춤 등).
🔍 실용적 의미
- 이 코드는 음향 비교, 레벨 정규화, 주파수 기반 음향 실험에 적합합니다.
- 특히 정현파(사인파) 기준으로 다른 소리의 볼륨을 맞추고 싶을 때, 이 구조가 적절합니다.
- 사용자는 실시간으로 주파수(frequency), 재생속도(rate), DryWet 비율(balance)를 변경해가며 음향 실험을 진행할 수 있습니다.
시각적 의미
기본 개념
Balancer는 다음 두 신호의 레벨 차이를 비교하고, source의 게인을 자동으로 조정합니다:
source: 조정 대상 (여기서는osc= 사인파)comparator: 기준 레벨 (여기서는fader= 피아노 재생 소스)
시각적 예시
예:
osc는 일정한 레벨의 사인파,
fader는 볼륨이 점점 커졌다 작아지는 피아노 소리라고 할 때:
1
2
3
4
5
6
7
8
9
10
Time → -->
comparator (피아노 볼륨):
░░░░░▒▒▒▒▒▓▓▓▓▓██████▓▓▓▓▓▒▒▒▒▒░░░░░ <-- 커졌다가 줄어듦
source (원래 오실레이터 출력):
██████████████████████████████████ <-- 항상 일정
Balancer(source, comparator) 출력:
░░░░░▒▒▒▒▒▓▓▓▓▓██████▓▓▓▓▓▒▒▒▒▒░░░░░ <-- comparator에 맞춰 조정됨
즉, osc의 신호는 실제로는 그대로지만, Balancer가 comparator의 레벨을 추적하여 볼륨을 자동으로 매칭합니다.
응용 시나리오
- 기준 신호(예: 백그라운드 노이즈나 기준톤)에 맞춰 다른 소리를 정렬
- 두 채널 간 음압 차이를 줄일 때
- 실시간 신호 비교 및 교정
- “참조 기준” 대비 신호 변화를 분석하고자 할 때
이해를 돕기 위한 간단한 다이어그램:
1
2
3
4
5
6
+---------+ +-----------+ +----------+
| Osc |──┐ | Fader |──┐ | |
| (source)| ├─────▶ |(comparator)| ├────▶ | Balancer |──▶ Output
+---------+ │ +-----------+ │ +----------+
│ │
└──────────────────────┘
용어 설명
🎧 1. 모노 소스 정렬 (Mono Source Matching / Alignment)
-
의미: 하나의 모노 오디오 신호를 다른 신호의 음량 또는 에너지 레벨에 맞춰 조정하는 것
-
예시: 믹스 중에
보컬 신호(모노)를 기준으로, 사인파(모노 톤)를 같은 음압으로 들리도록 맞추고 싶을 때 사용 -
실제 활용:
- 사운드 테스트용 기준 톤을 맞출 때
- 비교 대상이 되는 음성/악기 신호에 맞춰 임의 신호(예: 톤)를 정렬할 때
- 머신러닝/오디오 분석에서 “기준 볼륨”에 맞춰 데이터 정규화할 때
🔬 2. 분석 기준 맞춤 (Comparator Level Matching / Normalization)
-
의미: 특정 신호(분석 대상)의 레벨을 기준 신호(분석 기준)에 맞추는 작업
-
즉, “A 소리”를 “B 기준 레벨”에 맞춰서 자동 조정함
-
예시:
- 사운드 A를 기준 사운드 B의 에너지 레벨에 맞춰 비교 가능하도록 볼륨을 자동 보정
- 실시간으로 들어오는 마이크 입력을, 기준 신호에 따라 자동 볼륨 조정
- 예: 노이즈 프로파일에 맞춰 마이크 신호를 억제하거나 강조
🧠 쉽게 비유하자면:
기준이 되는 “모델 소리”가 있고, 그 기준에 따라 “학생 소리”가 그에 맞춰 음량을 조정당한다고 보면 됩니다.
Balancer는 이 “모델 소리”를comparator로 사용하고,source신호를 모델에 맞게 맞춰주는 역할을 합니다.