Post

AudioKit의 Balancer

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 신호를 모델에 맞게 맞춰주는 역할을 합니다.


This post is licensed under CC BY 4.0 by the author.