전화기 속 목소리는 왜 거칠고 먹먹할까? (다운샘플링)

Original
Telephone

위 2개의 음성 파일을 재생해보자. 하나는 원본 음성이고 하나는 예전 아날로그 전화기 소리로 변조된 음성이다. 핸드폰에서 소리가 안 난다면 핸드폰의 무음모드를 꺼야한다!

오늘은 예전 전화 목소리가 빈약하고 거친 사운드가 났으며 그 소리를 어떻게 재현할 수 있는 지 알아보자

오늘 배울 것들

TL;DR (길어요; 짧게 좀)

통화로 대화를 전달할 때는 풍성한 소리 품질이 필요없다. 아래의 소리 파일처럼 저음과 고음이 많이 잘려있어도 상대가 말하는 것을 알아들을 수만 있으면 된다.

잘린 소리 영역들이 다 데이터다. 위와 같이 고음 영역을 줄여서 보내면 원음을 보낼 때 대비 80% 이상 데이터 크기가 줄어든다! 다르게 말하면 똑같은 통신만으로 5배 더 많은 통화를 수용할 수 있는거다. 장비는 다 돈이다.

우리가 아는 전화기 소리는 낮은 비용으로 들으만한 소리를 만들기 위한 기술적 절충의 결과인거다. 경제적으로(저비용으로) 목적을 달성하고자 하는 공학의 접근법이다.

소리 신호의 기초

글에 들어가기 앞서서 브금을 틀자.

모두들 얼추 알 것이라고 생각하는데 소리는 파동이다. 아래의 회색 사각형을 터치하고 이곳저곳으로 쓸어보자. 소리가 안 난다면 핸드폰의 무음(진동)모드를 꺼야한다. 컴퓨터라면 마우스로 드래그 해보자!

눈치챘겠지만 상하로 움직이면 고음, 저음으로 소리가 변하고 좌우로 움직이면 음색이 변한다.

회색상자를 터치했을 때 중간에 나오는 꼬불꼬불한 파동이 실제 소리의 형태이다. 고음 때는 파동이 빽빽한데 이는 초당 진동이 더 많다는 이야기이고, 반대로 저음일 때는 파동이 드문드문해지는데 이는 초당 진동이 적다는 이야기다. 우린 이 파동(신호)가 초당 얼만큼 진동하는지를 주파수라고 나타낸다. 예를들어 회색상자의 정중앙을 눌렀을 때 파동이 초당 440번 진동하는데 우리는 이를 440Hz라고 부르는거다. 한번 상상해보라. 여러분이 화면 정중앙을 눌렀을 때 스피커에서 나오는 소리가 공기를 통해 우리의 귀로 전달되고 귀 안의 고막을 440번 진동시키는거다. 그 진동을 우리 귀 안의 세포가 전기신호로 변환하고 뇌로 전달하는 과정을 거치고서 우리는 소리를 듣게된다.

회색상자를 좌우로 쓸면 파형(파동의 모양)이 변하는데 왼쪽은 둥글둥글한 모양으로, 오른쪽은 뽀족뽀족한 모양으로 변한다. 왼쪽의 둥글한 녀석을 사인파 혹은 정현파라고 부르고 오른쪽의 뽀족한 녀석을 삼각파라고 부른다. 파형이 달라지면 같은 주파수(음정)이라고 소리의 색깔이 달리지고 우리는 이를 소리의 음색이라고 부른다. 각 사람의 목소리마다 파형이 다른데 우리는 이 파형이 차이로 목소리를 특정하고 구분할 수 있는거다. 음색, 파형에 대한 이야기는 보너스로 쓴 거라서 이 정도까지만!

어지럽다면 이것만 기억하자

디지털 신호의 기초

컴퓨터는 디지털을 기반으로 동작한다는 이야기를 들었을 것이다. 컴퓨터는 소리도 디지털로 다루게 되는데 이게 무슨 말이냐면 연속적인 신호를 010101과 같은 숫자로 저장하고 재생한다는거다. 그래프를 통해 조금 더 자세히 알아보자

위의 그래프는 연속적인 사인파를 나타낸 그래프이다. ‘연속적’?이라는게 무슨 뜻일까? 한번 그래프 밑에 있는 슬라이더를 왼쪽으로 옮겨보자 슬라이더를 왼쪽으로 옮기다보면 회색의 선으로 표현된 사인파가 사실 무수히 많은 회색의 점들에 의해 그려진 것을 알 수 있다. 슬라이더가 거의 왼쪽 끝으로 다다를 쯤에야 회색 점들 사이를 직선으로 이은 파란선들이 보일 것이다. 이게 그 유명한 디지털이다.

디지털 컴퓨터는 아날로그 소리 신호의 연속적인 값을 그대로 저장할 수 없다. 이는 아날로그 신호가 시간에 따라 무한히 세밀한 연속성을 가지며, 이론적으로는 두 점 사이에 무한히 많은 값들이 존재하기 때문이다. 다르게 말하면 회색 점을 아무리 세세하게 찍어도 새로 찍은 점 사이에도 무한한 수의 회색 점을 찍을 수 있다는 뜻이다. 디지털로 동작하는 컴퓨터와 같이 유한한 저장 공간을 가진 장치는 이러한 무한한 정보를 모두 기록할 수 없으므로, 대신 아날로그 신호의 일부(샘플)를 저장하는 샘플링 방식을 사용한다.

슬라이더를 움직이면서 눈치챘겠지만 샘플의 갯수가 소리를 재현하는데 결정적인 역할을 한다. 슬라이더가 오른쪽에 있을 때는 샘플의 갯수가 많아 원래의 둥글한 사인파가 그대로 재현되지만, 슬라이더가 왼쪽에 있을 때는 샘플 갯수가 적어서 원래의 둥글한 파동은 없고 삐죽삐죽한 파동이 남게된다. 소리를 정확하게 재생하는 측면에서는 당연 샘플 갯수가 많은게 유리하다! 하지만 세상에 공짜는 없다. 샘플링을 많이하면 저장해야하는 점들이 많으니 저장 용량이 많이 소모된다. 고품질 디지털 음원은 초당 샘플링 횟수(주파수)는 44.1kHz인데 이는 초당 44100개의 점들을 저장한다는 말이기도 하고 0.0000227초(227μs)마다 샘플링을 한다는거다. 음원의 길이가 4분 33초라면 음원 파일에는 12,039,300 숫자를 저장되어 있는거다. 무압축 음원이라면 이 소리 파일의 크기는 48메가바이트가 된다.

(존 케이지의 4`33` 의 스튜디오 앨범을 들어보면 정말 아무런 소리가 담겨 있지 않다. 무압축 음원이라면,,, 48메가바이트짜리 디지털 쓰레,,,)

샘플링 이론

약간 전문적인 내용이라서 최대한 간단하게 설명하고 넘어갈거다.

샘플링 주기에 따라 정도의 차이가 있을 뿐 소리 정보 손실은 불가피하다. 앞서 봤듯 샘플링 주기가 변하면 복원된 소리의 파형이 바뀌지만 경우에 따라서는 소리의 주파수가 변하기도 한다. 위 그래프에서 그려진 소리 신호는 초당 10번 진동한다. 다르게 말해서 위 소리 신호의 주파수는 10Hz이다.

슬라이더를 왼쪽으로 옮기면서 그래프의 변화를 관찰해보자. 슬라이더를 왼쪽으로 옮길 수록 샘플의 갯수가 적어지면서 사인파의 모양이 망가지게 된다. 그러다가 샘플 갯수가 20개 되면 재미있는 일이 일어난다. 슬라이더를 옮겨 샘플 갯수를 20개로 맞추거나 슬라이더 밑에 있는 Number of Samples에 20을 눌러보자. 샘플의 갯수가 20일 때는 원래의 사인파는 없고 삼각파가 그려지게된다. 샘플의 갯수가 줄면서 소리가 망가지게 된 것이다. 다르게 표현하면 소리의 해상도가 줄어들어 소리가 망가진 것이다.

샘플 갯수가 20개 보다도 작아지면 더 재미있는 일이 일어난다. 샘플 갯수가 매우 적어지면서 소리의 파형도 극단적으로 망가지게 된다. 근데 소리의 파형 말고 더 심각한 문제가 있다. 소리 신호의 주파수가 변해버렸다. 샘플 갯수를 15개로 맞춰본 다음에 소리 신호가 위아래로 움직이는 갯수를 세보면 위아래로 5번 밖에 안 움직이는 것을 확인할 수 있다. 원래의 10Hz 주파수는 온데간데 없고 5Hz의 주파수가 남아버린 것이다. 샘플링 주기(갯수)에 따라 소리의 주파수가 바뀔 수 있다는거다.

소리는 어떨까? ▶ 버튼을 눌러본 후 슬라이더를 옮겨보자. 샘플의 갯수가 400개일 때는 청아한 사인파 소리가 나지만 샘플의 갯수가 작아질수록 로봇 소리 같은 고음이 나기 시작하고 샘플 갯수가 20개일 때는 위잉하는 삼각파 소리가 난다. 그리고 샘플 갯수가 20개 보다 작을 때는 그전까진 들어왔던 사인파의 음정이 사라지게 되고 저음의 소리가 나기 시작한다. 주파수가 낮아져서 음정도 낮아져 버린거다.

우리는 꽤 신기한 현상을 경험한 것이다. 샘플링 주기가 작아지면 소리의 파형이 망가지고 샘플링 주기가 매우 작아지면 소리의 주파수(음정) 마저도 변하는 것을 확인했다. 이것이 무엇을 의미할까? 샘플링 주기가 작아질수록 담을 수 있는 주파수가 작아진다는거다. 다르게 말하면 샘플링 주기에 따라 담을 수 있는 최대주파수가 있다는거다.

아까 샘플 갯수가 20개일 때를 강조한 것도 이 때문이다. 원래의 10Hz의 신호를 담기 위해서는 그 두배의 주파수인 20Hz의 샘플링이 필요하다. 이건 절대 법칙이다! 왜 그런지 궁금하다면 나이퀴스트-섀넌 샘플링 정리를 찾아보도록 하자.

어려운 말이라면 이것만 기억해두자!!!! 8000Hz로 샘플링 하면 4000Hz 주파수의 소리까지 담을 수 있다!

(오해가 있을 것 같아 말하자면 위에 소리는 10Hz가 아니다. 10Hz는 우리 귀에 안 들리는 소리이다보니까 같은 파형의 420Hz 소리로 재생되도록 해놨다.)

Downsampling

우리가 귀는 모든 공기의 진동을 소리로 듣지 못한다. 우리가 소리로 듣는 공기의 진동은 20Hz ~ 22050kHz 주파수의 진동으로 한정되는데 혹시 이 22.05kHz라는 숫자가 친숙한가? 그렇다 22.05kHz에 두배를 곱하면 44.1kHZ, 앞서 말한 고품질 음원이 초당 샘플링 횟수다!

여기까지 이해했다면 옛날 전화기 소리가 왜 빈약한 소리가 나는지를 알기 위한 모든 공학적 지식을 습득한거다. 여유가 있다면 잠시 글 읽기를 멈추고 그 이유를 추측해보자.

전화망은 유한한 자원이다. 고속도로랑 비슷하게 이용자가 많으면 망이 가득차버려 제 역할을 수행 못하고 늘어난 망수요에 맞추기 위해 망을 설치하는 비용을 매우 비싸다. 우린 이 한정된 망 자원을 최대한 효율적으로 써야하는데 가장 쉽게 상상할 수 있는건 전화의 데이터 크기를 줄이는거다. 고속도로 비유로 설명하면 고속도로에 버스만 다니는 대신 경차만 다니도록 해서 고속도로에 다니는 차의 숫자를 늘이는거다.

전화는 사람과 사람의 음성 대화를 송수신하는 기술이다. 대화를 알아듣기 위해서는 Hifi 애호가들의 무손실 음원 같은 고품질 소리가 필요한게 아니라 상대방의 말소리를 인식할 정도의 소리 품질만 있으면 된다. 아까 말한 44.1kHz 샘플링의 고품질 음원으로 전화 송수신이 이루어지면 전화망의 대부분은 우리가 필요하지도 않은 소리 정보를 보내느라 낭비되고 말 것이다. 우린 적당한 샘플링 주기로 소리를 샘플링해서 높은 주파수의 정보를 잃더라도 대화를 알아들을만한 저용량 음성 신호를 송수신하면 된다.

적당한 품질? 적당한 샘플링 주기? 어느 정도가 적당할까? 가장 손쉬운 방법은 대화를 다양한 샘플링 주기로 녹음하고 들어보는거다. 위에 대화 음성 파일을 재생하면서 슬라이더를 움직여보자. 슬라이더를 움직이면 소리 파일의 샘플링 주파수가 변하는데 당신이 생각하기에 적당히 알아들을만한, 들어줄만한 샘플링 주파수는 얼마였는가?

전화/소리 공학자들이 정한 샘플링 주파수는 8000Hz였다. 슬라이더를 8000Hz로 조정해서 들어보자. 우리가 기억하던 전화기 소리와 거의 똑같지 않은가? 44100Hz일 때에 비해 소리가 좀 먹먹해진게 느껴지지 않는가? 낮은 샘플링 주파수로 인해 고음 정보를 잃어서 그렇다. 하지만 우리가 상대방의 목소리를 알아듣는데는 전혀 문제가 없다.

사실 8000Hz라는 적당한 수치는 나름의 근거를 바탕으로 정해진 수치이다. 아까 나이퀴스트-섀넌의 샘플링 정리에 따르면 8000Hz의 샘플링 주기로 복원할 수 있는 소리의 주파수는 4000Hz가 한계다. 인간의 음성 목소리의 주파수 범위는 100Hz~4000Hz라고 알려져있다. 이렇게 보니 너무 당연하지 않은가? 전화는 딱 인간 목소리만 복원할 수 있는 주파수만 송수신 하는거다.

그러면 우리는 샘플링 주기를 44.1kHz에서 8kHz로 낮추면 데이터 크기를 얼마나 줄일 수 있을까? 간단한 나누기만 하면 된다. 8000 / 44100은 0.18이다. 소리 품질을 약간 타협봤더니 데이터의 크기가 82% 줄어들었다.

다르게 말하면 샘플링 주파수를 낮추면 같은 망으로 약 5배 많은 통화를 수용할 수 있는거다!

다운샘플링은 음악에서 매우 사랑 받는 오디오 이펙트다. 아래 곡을 들어보자

Lowpass Filter, Highpass Filter

앞서 다운샘플링만으로 전화기 소리에 가까워졌지만 소리를 조금만 더 만져보자.

오디오 이펙트에서 가장 기초적이면서 중요한 Filter다. 백문이불여일견이 아니라 백견이불여일문이다. 위에 Lowpass Cutoff Frequency와 Highpass Cutoff Frequency 슬라이더를 움직이면서 소리를 들어보자. 소리의 차이가 분명히 들리지 않는가? Lowpass Cutoff Frequency를 낮추면 고음의 소리가 사라지고 Highpass Cutoff Frequency를 높이면 저음의 소리가 사라진다. Filtering은 말 그대로 소리의 주파수 요소를 필터링 하는 녀석이다. 고음은 통과(pass)시키고 저음을 제거하는(filter) 하는 녀석을 Highpass Filter라고 부르고, 저음은 통과시키고 고음은 제거하는 녀석을 Lowpass 필터라고 부른다. 줄여서 HPF, LPF라고 부르는데 위의 슬라이더를 만지면서 눈치챘겠지만 DJ들이 믹스하거나 트랙을 전개할 때 자주 사용하는 이펙트다.

위의 Cutoff 슬라이더를 인간 목소리 범위로 맞춰보자(Highpass Cutoff는 100Hz, Lowpass Cutoff는 4000Hz). 친숙한 전화기 속 목소리가 들리지 않은가?

Downsampling vs Filter

다운샘플링과 필터링 둘 다 인간 목소리 범위 밖의 고음 주파수를 제거한다. 하지만 두개가 이펙트가 같은 소리를 만들지는 않는다.
위의 “Downsampling”버튼과 “Filter” 버튼을 번갈아 눌러보며 소리를 비교해보자.

말로 설명하기 어려울 수 있으나 두 소리의 차이는 분명히 다르다. Filter를 했을 때 소리가 되게 먹먹한 반면 Downsampling을 했을 때 잘 들어보면 소리가 조금 더 시원하게 느껴진다. 이유는 고음부의 차이다. Downsampling시에는 Filter 때와는 달리 중고음 주파수가 남아있다.

아까 다운샘플링을 하면 고음부가 사라진다고 했는데 이건 무슨 소리인가? 자세히 들어가면 내용이 좀 어려워지다 보니 최대한 간단히 설명해보려고 한다. 위에 다운샘플링한 그래프를 다시 보면 점 사이에 선들이 부드러운 곡선으로 이어진게 아니라 직선으로 이어져있다. 그리고 이 직선 점을 경계로 바뀔 때마다 직선의 기울기들이 곡선 때에 비해 급격하게 변한다. 별 거 아닌 것처럼 보이지만 소리에 측면에서 급격한 기울기의 변화는 꽤나 거친 변화이고 보통 저런 급격한 변화는 의도치 않은 소리를 발생시킨다. 앞서 사인파와 삼각파의 예시에서처럼 사인파는 부드러운 소리가 나는 반면 삼각파는 약간의 고음부 소리가 나는 걸 들을 수 있는 것처럼 다운샘플링 과정에서 발생하는 급격한 기울기의 변화가 의도치 않은 중고음부 소리, 특히 노이즈를 발생시킨거다.

필터의 경우에는 100Hz ~ 4000Hz 주파수 대역 안에 파형을 변화시키지 않기에 다운샘플링과 같은 중고음부의 노이즈가 나지 않다보니 마치 귀를 막은 소리를 듣는 듯한 먹먹함을 느끼는거다.

그러면 전화기 소리를 정확히 재현하려면 다운샘플링을 써야하는가 필터를 써야하는가? 정답은 둘 다이다. 예전 전화기 소리를 핵심은 다운샘플링이지만 사실 예전 전화기는 다운샘플링과 필터를 동시에 쓴다. 앞서 들었듯이 다운샘플링을 하면 원치 않는 노이즈가 생기는데 이 원치 않는 중고음부의 노이즈를 죽이기 위해 예전 전화기들은 다운샘플링한 사운드에 필터를 건 다음의 결과물을 재생했었다.

논외로 다운샘플링을 하기 전에 Highpass Filter를 걸어야하는데 그 이유는 앞서 나이퀴스트-섀논 샘플링 이론을 바탕으로 추론해보자! (힌트는 Aliasing!)

결론

전화기 소리는 완벽한 음질이 아니라 적당히 사람의 대화를 알아들을만한 음질이면 충분하다. 공학은 모든 측면에서 완벽한 결과물을 내는 것을 목표로 하지 않는다. 공학은 주어진 목표를 가장 경제적으로 (혹은 낮은 비용으로) 달성하는 것을 목표로 한다. 전화에서 비용을 줄이기 위한 핵심 기술은 다운샘플링이었다. 상대적으로 불필요한 고음부를 삭제해서 전화 데이터의 크기를 줄여 낮은 비용으로 통화 기술을 구현한거다. 하지만 세상 일이라는건 뜻대로 안 되고, 다운샘플링 과정에서 노이즈가 발생하는데 이 노이즈를 줄이기 위해 필터라는 것을 덧댄 것이다.

실시간으로 자신의 목소리를 전화기 소리로 변조하는 기능을 짰지만 최신 IOS 사파리 브라우저에서만 동작하며 아직 브라우저 쪽 API가 불안정한 관계로,,, 첨부를 안 한다. 혹시 Abelton이 있다면 Redux, Auto Filter만으로 쉽게 구현 가능하니 해보자. Overdrive도 걸어주면 맛깔난다.