NeRF, Stable Diffusion, LLMOps
중 하나 이상 알고 있다면?
#인공지능 

컴퓨터 음악 Computer Music 1편 – 컴퓨터로 음악을 다루는 방법, 샘플링

연속적인 파동의 형태를 가지는 소리 데이터를 컴퓨터가 이해할 수 있는 이산 신호로 변환하는 샘플링 (sampling) 방법과, sampling rate가 중요한 이유를 알려드립니다.

2022-11-24 | 소준섭

모두의연구소 콘텐츠 크리에이터 모임 “코크리” 1기 활동으로 작성된 글입니다. (저자 블로그)


0. 컴퓨터 음악

오늘날 우리는 음악을 들을 때 대부분 컴퓨터를 이용해서 듣습니다. 여기서 ‘컴퓨터’ 라는 것은 PC, 노트북, 스마트폰 등을 포함한 전자 기기를 의미합니다.

ipod

출처: https://www.apple.com/kr/shop/buy-ipod/ipod-touch

하지만 원래 음악은 소리의 성질을 가지고 있는 연속적인 데이터입니다.

자 여기서 문제가 발생합니다. 음악과 소리는 연속적인 데이터이지만, 컴퓨터는 연속적인 데이터를 표현하지 못합니다. 모든 데이터를 이산적으로 처리하죠. 아래 그림을 한 번 봅시다.

sampling - continuous vs. discrete data

출처: https://www.sigmamagic.com/blogs/is-my-data-continuous-or-discrete/

연속적이란 것은 데이터가 연결되어 있다는 것이고, 이산적이라는 것은 데이터가 연속적이지 않고 분리되어 있다고 볼 수 있습니다. 여기서 소리, 음악 같은 데이터들은 파동의 형태이기 때문에 연속적인 데이터 형태를 가집니다. 따라서 위 그래프의 선이 연속적인 데이터에 해당되죠. 하지만 이런 데이터를 컴퓨터로 표현할 때는 이산적으로 저장해야 합니다. 위 그래프에서 화살표가 이산적인 데이터에 해당됩니다. 이렇게 보면 아무래도 느낌이 안 오니까 우리가 자주 보던 그림으로 바꿔 봅시다.

컴퓨터 음악 - Apple loop

Apple loop [직접 캡쳐]

위 그림은 여러분들이 많이 보던 화면일 것이라고 생각됩니다. 휴대폰으로 녹음을 진행하거나 TV 등에서 녹취록을 보여줄 때 자주 보던 화면입니다. 위 데이터는 소리의 진폭을 그대로 보여주고 있는 상태입니다. 그렇다면 이 데이터를 확대해 볼까요?

컴퓨터 음악 - Apple loop

Apple loop [직접 캡쳐]

조금 더 확대해 봅시다.

컴퓨터 음악 - Apple loop

Apple loop [직접 캡쳐]

컴퓨터 음악 - 미디 작곡 프로그램 ablenton 상에서의 데이터

미디 작곡 프로그램 ablenton 상에서의 데이터 [직접 캡쳐]

자 이제 어떻게 보이시나요? 점으로 보이는 부분들은 각 실제 연속 데이터가 이산 데이터로 표현된 부분이라고 보셔도 됩니다. 이제 위에서 봤던 그래프와 비슷한 모양으로 보입니다.

sampling - continuous vs. discrete data

출처: https://www.sigmamagic.com/blogs/is-my-data-continuous-or-discrete/

자, 이제 이 개념을 알고 나면, 주변의 음향 장치들이 연속적인 데이터로 동작하는지 이산적인 데이터로 동작하는지 확인해볼 수 있습니다. 초기의 음향 장치일수록 연속 데이터로 소리를 재생했지만, 이후로부터는 두 가지 방법들이 혼용되어 소리를 재생합니다. 예를 들어 아래 사진을 보시죠.

현미경으로 본 vinyl

현미경으로 본 Vinyl
(출처: https://kottke.org/14/11/microscopic-photo-of-vinyl-record-grooves)

우리가 흔히 알고 있는 LP(Vinyl)을 확대하면, 위와 같은 이미지를 확인할 수 있습니다. 턴테이블에 있는 카트리지의 바늘이 소리골을 따라 진동하며 소리를 내고, 그 소리를 증폭하면 우리가 LP에 녹음된 소리를 들을 수 있게 됩니다. 이 방식의 경우에는 연속적인 진동 신호를 소리로 바꾸는 방법을 사용해 재생합니다.

이 방식을 기본으로 우리가 자주 사용하는 전자기기는 이산 데이터로 소리 데이터를 저장하고, DAC(Digital to Analog Converter)를 이용해 스피커로 소리를 재생하는 형태로 변화합니다.

아래 그림을 참조해봅시다.

소리가 전달되는 형태

소리가 전달되는 형태
(출처: https://www.quora.com/What-is-ADC-and-DAC-How-do-you-use-ADC-and-DAC-in-the-8051-microcontroller)

DAC의 성능, 스피커의 성능에 따라서 재생되는 사운드의 품질이 달라지다 보니, 고가의 음향 장비에 대한 수요가 많이 있는 편입니다. 개인의 선택이지만, 가성비 좋은 장비들도 많으니 직접 들어보고 결정해보는 것도 재미있는 경험입니다.

1. 연속 신호에서 이산 신호로: 샘플링

우리가 전자 기기에서 소리를 재생할 때 위에서 본 것과 같이 연속 신호를 이산 신호로 샘플링해야 합니다. 이때 샘플링의 간격에 따라서 문제가 발생할 수도 있습니다. 아래 그래프를 봅시다.

sampling - 비행고도 예시

비행고도 예시
(출처: https://jackschaedler.github.io/circles-sines-signals/aliasing.html)

비행기가 시간 가격에 따라서 위와 같은 고도를 보내왔다고 가정해봅시다. 이때 우리가 65분일 때의 비행기 고도를 알 수 있을까요? 단순히 두 점을 이어서 고도가 31000이라고 대답할 수 있을까요?

정답은 ‘아니다’ 입니다.

우리가 각 지점의 정보를 가지고 있다고 하더라도 중간 데이터를 확신할 수 없습니다. 예를 들어 아래처럼 그림이 그려질 수도 있습니다.

sampling - 실제 비행고도 예시

실제 비행고도 예시
(출처: https://jackschaedler.github.io/circles-sines-signals/aliasing.html)

총 4개의 각기 다른 비행 고도 데이터가 있을 때, 주어진 데이터로는 어떤 경로로 비행했는지 우리가 알 수 없습니다. 지금은 위에 보이는 모든 데이터가 주어진 데이터를 기반으로 봤을 땐 같은 신호로 볼 수 있습니다.

따라서 우리가 조금 더 정확하게 고도를 측정하려면, 데이터를 선택하는 시간 간격을 줄여야 합니다.

이번엔 10분이 아니라 5분으로 다시 그래프를 그려보겠습니다.

sampling - 실제 비행고도 예시

실제 비행고도 예시
(출처: https://jackschaedler.github.io/circles-sines-signals/aliasing.html)

다시 그래프를 보면 5분 간격으로 데이터를 가져왔을 때, 파란 선만이 정확히 데이터와 일치하고, 나머지 데이터들은 파란색 데이터와 다른 것이 확인되게 됩니다. 이렇게 우리가 신호의 샘플링 간격을 조정했을 때, 샘플링 간격이 너무 길면 다른 신호와 구분할 수 없기 때문에 aliasing이 발생하게 됩니다. 반대로 샘플링 간격을 줄이게 되면, 원래 신호와 비슷해지기 때문에 샘플링하기 이전의 신호를 복원할 수 있게 됩니다.

샘플링을 진행할 때의 간격을 Sampling rate라고 하는데, 원래 신호를 완벽하게 복원할 수 있는 Sampling rate를 Nyquist rate라고 하며, 입력 신호의 최고 주파수의 2배가 되도록 Sampling rate를 사용합니다. 우리가 흔히 CD에서 볼 수 있는 44.1kHz는 보통 CD를 제작할 때, 사용하는 Sample rate이며, 사람의 가청 주파수가 20 ~ 20,000 Hz (20kHz)이기 때문에 음악을 제작할 때 사용하는 Sample rate입니다.

다음 글에서는 aliasing, sample rate 등 이런 신호들에 대해서 조금 더 자세히 알아보겠습니다!

콘텐츠 크리에이터 소개

Rubato Lab. 소준섭입니다. 음악을 좋아해서 제작부터 DJ 등 여러 활동을 했었고, Art&Tech 관련 대학원에서 Music Information Retrieval (MIR) 분야를 찾아 공부했습니다. 다양한 기술들을 이용해 다양한 콘텐츠를 만드는데 관심이 많습니다. (블로그)