질문과 답변
기 타 컴퓨터에서 소리(sound)의 이해
2020.09.05 14:27
소리파일에 대한 개념을 질문드립니다.
가령 16 bit, 44.1 kHz 의 wav 파일이 있다고 하면 그 파일은
1) 그 wav 파일의 재생시간은 이론적으로는 1/44100 초의 정수배이다.
2) 그 wav 파일에 있어서는 1/44100 초가 더 이상 쪼개지지 않는 단위시간이다.
3) 매 단위시간동안 2^16 개만큼의 다양한 소리가 날 수 있다.
4) 포토샵에서 1픽셀을 원하는 색깔로 칠할 수 있는 것처럼, 원하는 1단위시간의 소리만
2^16 개 중 원하는 것으로 치환할 수 있다(실용성을 떠나 가능 불가능만 따집니다)
5) 스피커에서 실제로 나는 소리는, 매 단위 시간마다 기록되어있는 소리를 연달아 내는 소리이다.
수 만개의 소리상자가 일렬로 있으면 빠른속도로 소리상자를 한 번에 하나씩 까는 식이다.
6) 소리가 재생될 때 연속해 있는 소리 상자 여럿을 한꺼번에 분석해서 다시 부드럽게 잇는다거나 연산해서 새로운 무엇을 만들거나 하지 않는다.
우선 1),2),3),4),5),6) 이 맞는지 궁금하고..
그렇다면 단위시간 동안 날 수 있는 소리란 어떤 것인지 궁금합니다.
예컨대 1픽셀의 경우에는 컬러팔레트를 제시함으로써 얼마나 다양한 색깔이 있는지 말할 수 있는데
1단위시간의 경우에는 컬러팔레트같은 개념으로 무엇이 있는지가 궁금하네요.
일단 1)~5)는 맞습니다.
6)은 케바케라서 정답이 없구요.
다만 그래픽의 픽셀개념과 비슷하다고는 할 수 있으나
인지개념과 같다고는 할 수 없습니다.
사람의 귀가 인지하는건 "주파수"이기 때문에 1개의 단위시간의 소리를 어떻게 지정하건
그 주변과의 조화로 달라질 수 있습니다.
그리고 5번과 6번에 대해서 설명하자면,
스피커에 따라 음질에 차이 날수 있습니다. 불량의 문제가 아닌 특성의 문제입니다.
즉, 어떤 스피커든 간에 정확한 표현력은 떨어진다는거죠.
비유하자면
계단이 있다면 거기에 시멘트를 들이부어 평평한 오르막 내리막을 만들거나
아니면 깎아서 갈아내어 평평한 오르막 내리막을 만드는 셈이죠.
(설명에 따라서는 "모든 스피커는 불량하다"라고 해도 되는 내용인 셈이죠.)
흔히 진공관 스피커가 좋다고는 하는데,
기본적으로 "왜곡"에 의한 소리를 내는데, 진공관이 왜곡하는게 사람이 듣기엔 더 부드러워지는 효과입니다.
"정확하게" 음을 표현해줘서 좋은건 아닙니다.
일단 이론적인 접근을 위해 설명하자면
https://ko.wikipedia.org/wiki/%EC%83%98%ED%94%8C%EB%A7%81_%EB%A0%88%EC%9D%B4%ED%8A%B8
위 링크의 이미지 부분을 봐주세요.
16비트는 소리의 크기를 세분화 하는 것이고(이거 명칭이 헷갈리네요. 영어로는 amplitude인데 우리말로는 뭐더라...)
44.1kHz는 1초동안 몇번을 잘라내느냐를 따지는 "샘플링 주파수"입니다.
일단 기본적으로 모두 자르는 단위입니다.
2비트의 10Hz의 규격이 있다고 가정해보죠.
2^2 으로 4단계의 소리 크기를 지정 가능합니다.(대강 +2,+1,0,-1 이런식)
10Hz이므로 1초간 10개의 데이터가 나옵니다.
이걸 그대로 저장하는게 wav등의 무손실 규격이고
이걸 그대로 재생하면 1초동안 +2 ~ -1의 크기인 소리를 10번 들려주는겁니다.
그게 기본적인 소리 저장과 재생의 원칙이고 원리입니다.
그런데 위쪽 내용에서 사람이 인지하는건 "주파수"라고 그랬죠?
저걸 들려줘봐야(물론 현실적인 샘플링,크기로 한다고 쳤을때), 사람은 샘플 사이사이의 차이를 거의 인지하지 못합니다.
단지 샘플 사이사이에서 샘플끼리의 관계에서 발생하는 "주파수"가 사람의 인식대상이 됩니다.
위의 예시를 20초짜리를 저장한다고 치고 계산의 편의를 위해 2바이트마다 1개씩 저장한다고 가정하죠.
그럼 2x10x20=400바이트가 요구됩니다. 저런 저음질에 쓰기엔 너무 용량낭비입니다.
그래서 나온게 mp3같은 손실규격입니다. 사람이 인식못할 주파수에 해당하는 부분은 계산해서 다 잘라버리는거죠.
그리고 차이가 얼마 안나는 주파수나 음폭은 합치는거구요.
(예를들어 +2+1+2+2+2+2 이런식의 구간이 있으면 +1부분은 인간이 인지 못하기에 아예 들어내버립니다.)
400바이트를 쓴다면 100바이트나 50바이트로 훅 줄여버리게 되죠.(물론 내용과 압축 비트레이트에 따라 케바케)
위에서 2비트 짜리 데이터로 정의했으니
2바이트나 필요하지 않기에 1바이트나 심지어 기준인 2비트를 적용해서 1바이트에 4개의 데이터를 구겨 넣을수도 있습니다.
그리고 실제로는 2비트조차 불필요하다며 1비트로 만들어 1바이트에 8개를 구겨 넣을수도 있습니다.
그런식으로 구겨넣어 압축하는 것도 기법이죠.
추가적으로 위에서 정의한 10Hz에 대해서도 주의해야할 부분이 있는데요,
10Hz가 표현 가능한 "실제 소리주파수"는 5Hz에 불과합니다.
나이키스트율 또는 나이키스트 주파수라고 해서 이론적으로 표현가능한 주파수는 샘플링 주파수의 절반으로 봅니다.
(사실 이마저도 최소한의 크기지, 소리의 종류에 따라서는 4분의 1이나 그보다 더 적을수도 있습니다.)
사실 당연합니다.
앞에 말했듯, "주파수"라는건 디지털 상에서는 "샘플과 샘플 사이의 관계"에 해당하기에 "최소 2개의 샘플"이 필요합니다.
단 1개의 샘플로는 어떤 주파수도 표현해내지 못합니다.
(참고로 샘플로 구분하는건 디지털적인 설명이고 아날로그는 연속적인 값이지만 기본 이치적으로는 비슷합니다.)
이는 소리만이 아닌 모든 과학분야에서 공통적인 부분입니다. 이치적으로 그렇죠.
그러므로 샘플링 주파수가 44.1kHz의 경우
표현 가능한 실제 주파수는 22.05kHz가 됩니다.
이론적인 인간 가청주파수에 근접하죠.
(물론 실제로는 나이든 사람은 10kHz만 넘어가도 잘 인식 못합니다. 어려도 보통 15kHz에서 인식 못하죠.)
어쨌든
16비트 44.1kHz는
65535개의 소리 변화를 표현 가능하고 22kHz의 주파수가 표현가능합니다.
mp3등의 손실압축은 이 비트를 줄여버리고 샘플링 주파수를 줄여버리고 주파수와 주파수 사이의 묻히는 부분을 버리면서
압축에 성공하는 방법이죠.
이런거 얘기하면 말이 길어지네요.(설명도 잘 못하면서...)
그냥 링크만 찾아 걸걸 그랬네요 ㅠㅠ
(사실 마땅한 링크도 없어서리...)
좀 더 자세한건 "샘플링 주파수" 같은걸로 검색하시면 잘 아실수 있을겁니다.
여기서 주절주절 설명이 많았지만 주파수에 대해서는 이정도 몇마디말로는 부족할정도로 많은 이론이 있습니다.
학술적으로 더 자세히 알고 싶다면, 검색해서 많이 찾아보셔야하죠.
(참고로 음악 플레이어에서 약 10여개정도의 게이지를 늘어놓고 올라갔다 내려갔다하면서 보여주는게 모두 주파수 대역별로 나타나는 진폭의 크기입니다.)