볼륨을 올렸다. 볼륨을 내렸다.
소리의 크고 작음을 '볼륨volume'이라는 말로 지칭한다. 볼륨은 소리의 힘(power)과 관련이 있고, 소리의 힘은 다시 음파의 크기(amplitude)와 관련이 있다.
※ 힘(power)은 단위 시간에 전달되는 에너지이다.
음파인 소리는 사인파(sinusoidal wave)로써 힘으로 나타내면 아래와 같이 표현할 수 있다.
평균 힘(average power) = Pavg = 1/2 * μ * A^2 * w^2 * v
μ: 사인파를 만들어내는 현(string)의 밀도
A: 음파의 크기(amplitude)
w: 각속도(=2πf)
v: 소리의 속도
즉, 소리의 세기는 음파의 크기인 A의 제곱에 비례한다. 일반적으로 볼륨을 높이면 소리가 크게 들리는 당연한 상관관계는 이와 같은 음파의 크기와 소리 세기 사이의 관계에 원인이 있다.
소리의 세기를 측정하고 비교하기 위한 방법으로 데시벨(dB, decibels)을 자주 사용한다. 웹 오디오와 같이 프로그래밍 관점에서 dB는 dBFS(decibels Full Scale)를 의미한다. dBFS의 정의는 아래와 같다.
dBFS = 20*log(측정된 음파의 크기 / 음파가 가질 수 있는 최대 크기)
dBFS는 음파 크기(amplitude)의 함수이고 소리의 세기(power)를 나타내기 때문에 계수(coefficient)로 20을 곱해준다. 왜냐하면 power는 음파 크기의 제곱이 되어야 하고 이 제곱이 log 밖으로 나오면 상수 2가 곱해지는 것으로 연산이 바뀌기 때문이다. 따라서 소리를 대상으로 할 때는 데시벨의 계수로 일반적으로 사용하는 10이 아닌 20을 사용한다.
음파의 크기를 16bit로 표현하는 디지털 오디오에서 소리가 가질 수 있는 최소, 최대 크기는 아래와 같다.
최소 소리 크기: 20*log(0/2^16) = 20*log(0) ≈ -96dB
최대 소리 크기: 20*log(2^16/2^16) = 20*log(1) = 0dB
다이나믹 레인지Dynamic range는 음파를 시간축에 따라 나열했을 때 음파의 가장 높은 곳과 가장 낮은 곳 사이의 차이를 크기로 나타낸 것이다. 일반적으로 다이내믹 레인지가 적절한 음원이 듣기에 불편함이 없다.
다이내믹 레인지를 조정하기 위한 방법이 Dynamic compression이다. 압축 곡선을 이용해서 특정 크기 이상의 음파의 크기를 줄이게 된다. Web audio API에서는 DynamicCompressor 노드node를 이용해서 사용할 수 있다. DynamicCompressor 노드에 관해서는 앞의 '음량 조절' 포스팅에서 자세히 살펴보았으므로 이를 참고하면 된다.
■
'웹 오디오 프로그래밍' 카테고리의 다른 글
[Web Audio API #10] Analyser 노드 응용 - 자동 볼륨 보정 (0) | 2021.07.18 |
---|---|
[Web Audio API #9] 사운드 시각화 - Sound Visualization (0) | 2021.07.13 |
[Web Audio API #7] 음량 조절 (0) | 2021.07.04 |
[Web Audio API #6] 여러개의 웹 오디오 소스 재생 잠시멈춤 (0) | 2021.07.01 |
[Web Audio API #5] 재생-멈춤-재생 예제 코드 (0) | 2021.06.29 |
댓글