Audio의 Mid-Side Representation
Binaural/Stereo 오디오를 모델에 넣을 때, 왜 Left/Right 대신 Mid/Side로 바꿔서 다루는지에 대한 짧은 메모.
Left-Right Processing
기본적으로 Binaural Audio 태스크에서 오디오는 2개의 Waveform으로 주어진다:
- Left Waveform: 왼쪽 귀에서 들리는 소리
- Right Waveform: 오른쪽 귀에서 들리는 소리
이 표현에는 문제점이 몇 가지 존재한다.
- 모델의 자원 낭비: Left와 Right의 에너지와 주파수의 Correlation은 90% 이상으로 매우 높다.
- 각각을 예측하라고 하면, Semantic/Acoustic을 두 번 중복해서 학습해야 한다.
- Phase Error에 대한 페널티가 없다.
- L/R의 Phase가 1ms 어긋났다고 가정하자.
- 전체 Waveform의 관점에서는 둘 다 1ms 어긋났으니까, L1/MSE Loss의 변화가 없다.
- 하지만 사람이 들으면 입체감이 붕괴된 안 좋은 소리가 난다.
Mid-Side Processing
Left/Right 신호를 간단한 Linear Combination으로 나타내는 방법.
\[\text{Mid}=\frac{L+R}{2}\]
\[\text{Side}=\frac{L-R}{2}\]
- Mid: 소리의 공통 성분. (Mono Downmix)
- Side: 두 채널의 차이. (공간, 위상차, Reverb 등의 정보만 남음)
역변환도 간단하다: \(L=\text{Mid}+\text{Side}\), \(R=\text{Mid}-\text{Side}\).

가운데서 나는 소리(공통 성분)와 왼쪽에서 조금 늦게 오른쪽 귀에 닿는 소리를 섞은 예. L과 R은 거의 똑같아 보이지만, Side에는 두 귀의 차이 — 방향을 알려주는 성분 — 만 남는다.
장점
- 자원 낭비가 없다.
- Mid가 가지고 있는 정보와 Side가 가진 정보가 각각 다르다.
- Phase Error에 직접적인 페널티가 존재한다.
- Side에 L1 Loss만 걸어줘도 Phase를 잡을 수 있다.
- 모노 호환·조절이 쉽다.
- Mid만 남기면 그대로 모노 다운믹스이고, Side에 gain만 곱하면 스테레오 폭이 조절된다. 방송·믹싱에서 M/S를 오래 써온 이유이기도 하다.
import numpy as np
def to_mid_side(x): # x: (2, T) stereo waveform
L, R = x
return np.stack([(L + R) / 2, (L - R) / 2])
def from_mid_side(ms):
M, S = ms
return np.stack([M + S, M - S])
참고 자료
- R. Gao, K. Grauman, 2.5D Visual Sound, CVPR 2019 — mono에서 L−R을 예측해 binaural을 만드는 대표 논문.
- Interaural time difference — Wikipedia, Mid/Side (stereophonic sound) — Wikipedia.