현재의 CPU가 전문 디지털 오디오 믹싱을 할 수 있을만큼 충분할까요?

jackeystar의 이미지

안녕하세요~ 컴퓨터 음악에 관심이 많은 개발자입니다.

오디오쪽엔 케케묵은 뜨거운 주제가 있는데요.
그 쪽 게시판에 digital vs analog? 이런 느낌의 질문을 올리면 전쟁이 납니다..
한 10년정도 전쟁을 한것 같은데, 아직도 그쪽에선 명확한 설명이 잘 안나오더라구요.

다들 오디오 엔지니어들이다보니, 각자 경험에 빗대어서 이론을 껴맞추는 경우가 많고,
컴퓨터나 전기 전공자들이 아닌이상 이론이 허술하니 결국은 개싸움으로 끝나게 됩니다.;;

그래서 혹시 여기 분들이라면 답을 알고 계시지 않을까? 하고 글을 써보네요.

일단 제가 궁금한것은, '왜 DSP를 이용한 디지털 이펙터의 음질이 소프트웨어 이펙터보다 음질이 좋을까?'
인데요.

그쪽에서는 디지털로 아날로그를 emulation하는것이 항상 탑 토픽입니다.
실제로 여전히 아날로그 제품들이 계속 출시되고 초 초 초 고가에 불티나게 팔리고 있는만큼 아직 아날로그는 살아 있습니다.

그런 반면, 디지털 오디오 신봉자들은 아날로그 사운드를 추구하는건 단순 취향의 문제이지 퀄리티의 문제가 아니다 라고 주장을 하는 편입니다.
그리고 귀로 듣고 각자 판단하는것이기 때문에 항상 결판이 나지가 않는데요.

그런데 제가 이 부분을 파고들다보니, DSP를 이용한 사운드와, 단순히 CPU 연산능력만을 이용한 사운드가 차이가 있다는걸 느끼게 되었습니다.

근데 상식적으로는 DSP 이펙터나 단순 소프트웨어 이펙터나 결과물이 달라질 이유가 없잖아요?
그래서 전혀 이런쪽으로는 생각을 안했었는데요.

이게 혹시 '실시간'이라는 개념이 접목이 되면 이야기가 달라지는건지.. 하는 의문이 들게 되었습니다.

보통 오디오 믹싱 엔지니어들이 DAW(Digital Audio Workstation) 상에서 작업하는 환경은 이렇습니다.

오디오 트랙들의 음질은 보통 48khz 에 32bit 데이터로 되어있구요. 즉 초당 48000 * 32bit * 2 (스테레오) 의 데이터 양입니다.

오디오 트랙을 20~40 트랙 까지를 동시에 플레이 합니다.
각각의 트랙에 이펙터를 최소 3개, 많게는 10개이상 걸어주게 됩니다.

이 오디오 트랙들을 그룹으로 묶어서, 거기에 또 그룹 이펙터를 수개 이상 걸어주게 됩니다.
최종적으로 모든 트랙을 다 믹스해서, 거기에 또 이펙터를 걸고, 오디오 하드웨어를 통해 스피커로 내보냅니다.

여기서 제가 드는 의문은 이것입니다.

당연히 디지털 상에서 알고리즘이 같다면, DSP나 소프트웨어나 음질이 같아야겠지만,
혹시 이펙터를 개발하는 개발사에서 알고리즘을 변경할만큼 CPU의 성능이 걱정스러운 수준인가 하는것입니다.

그리고 이게 CPU성능만의 문제인지도 의심이 좀 갑니다.
실제로 DAW 상에서 소프트웨어 플러그인을 과도하게 거는 경우 CPU load는 별로 올라가지 않는데도, 사운드가 끊기거나 지직거리는 경우가 많이 생기더라구요.
물론 최고 사양의 오디오 카드에서의 상황입니다.

그래서 혹시 CPU 성능과 관계없이, 데이터 전송속도라든지 하는 부분에서 문제가 되는건 아닌지,
소프트웨어 플러그인 개발사들이 일부러 안좋은 알고리즘을 쓰는게 아닌지 하는 생각이 드는데요.

저는 어디서부터 어떻게 계산해야할지 감이 안와서 이해하는데 도움을 좀 구하고 싶습니다.

(아참.. 제가 실시간이라는 단서를 붙였는데, 오디오 믹싱 과정은 라이브 공연이 아니기 때문에 약간의 딜레이는 괜찮습니다. 이 부분도 고려해주셨으면 좋겠습니다.)

hiseob의 이미지

필연적으로, 아날로그는 input 포트에서 output 포트로 이동하는 모든 시간동안 노이즈가 섞일 가능성이 정말 너무 크고
필연적으로, 디지털은 ADC 와 DAC 의 품질이 문제가 되죠.
공통적으로 전원부 설계도 중요해지고...
잡설은 각설하고.

DAW를 만들거나 소스를 까본적은 없으니 정확하겐 모르겠습니다만. 머릿속에서는 이렇게 될거 같군요....

트랙 40개 -> 믹서 -> 컴프레서-> 믹서 이런 간단한 연습용 구조라면...

대략...

트랙 스레드 40개

.... 파일 열기
.... 파일 내용을 버퍼에 저장 (버퍼를 채울 필요가 있으면 채운다 아니면 건너뛰기)
.... 샘플 1개를 다음 슬롯에 전달
.... 버퍼에 저장하는 부분으로 복귀

믹서
.... 사용자가 볼륨, 3band eq 등 설정
.... 총 40개의 슬롯에 들어온 각 샘플 값에 설정값을 적용하는 함수에 집어 넣는다. 볼륨 실행 -> 3band eq 실행 -> ..... -> 끝
.... 총 40개의 결과물을 더해서 나누기 40.
.... 컴프레서에 전달

컴프레서

.... 슬롯에 들어온 샘플을 컴프레서 함수(필터)에 집어 넣는다.
.... 결과물을 다음 슬롯에 전달

출력 믹서

.... 슬롯에 들어온 샘플을 믹싱함 (위의 믹서와 상이 하진 않을것 같네요)

간단하게는 이렇게 되지 않을까 싶어유....

근데 이런 저런 필터를 적용하는게 정수값 연산 보다는 실수값 연산이 절대적으로 많아서 (샘플값만 DAC 타입이 정수면 정수지 않나...) DSP 가 훨씬 빠른 분야구요.

루프도는게 많다보니 DSP 자체를 루프 돌리는데 최적화하기도 한답니다.

PC의 DAW의 경우에는 락에 경쟁이 생기기도 할거고 실수 연산 능력이 딸려서 트랙에서 한 샘플 나오는 시간이 1/48KHz 보다 길어서 뚜뚝거리지 않나 싶습니다.

요런 경우는 export 할때는 아무 문제가 없지만 라이브로 나올땐 문제가 되겠죠.

알고리즘만이 문제가 아니라 파일이나 녹음 장비에서 샘플를 획득해서, 디지털 필터로 넘기는거 까진 좋은데, 그걸 다 cool 하게 시각화 하는 과정까지 들어가면서 프로그램 자체가 복잡해서 문제가 된것이라고 생각 하시면 될거 같습니다.

오디오 카드와는 별 상관이 없는게 오디오 카드는 연산에는 별 관여를 하지 않고 그저 DAC / ADC 와 PCI/PCIE 의 중간에 있는 칩이라고 보심 됩니다.

작업용 일수록 각종 부가기능은 빼고 순수하게 재생/녹음 기능에만 치중하는 경향이 있는데 이러면 진짜로 그냥 인터페이스 IC 일 따름이죠.

hiseob의 이미지

PC 에서 DSP 와 가장 유사하다고 볼 수 있는게 바로 GPGPU 기능이 지원되는 그래픽 카드들인데,

엔비디아 8000 번대 그래픽카드 쓰면 시피유 왕창 잡수시는 고해상도 (720p 이상?) 동영상도 coreavc 같은 cuda 지원 코덱으로 손쉽게 감상할 수 있었죠.

오디오에서 DSP 도 마찬가지라고 봅니다.

abc1234의 이미지

DSP와 PC는 용도가 다르기때문에, 차이점이 존재합니다.
동일한 알고리즘이라도, 성능차이 때문에 적용이 어려워, 수정된 알고리즘을 사용할 수 도 있고,
반대로, 넘치는 파워가 아까워, 더 좋은 알고리즘을 사용할 수 도 있습니다.

기본 지식
=====================
- MFLOPS : million floating-point operations per second(부동소수점 연산)
- MMACS : Million Multiply Accumulate Cycles per Second(고정소수점 연산)
※ "1초에 몇번 연산을 할 수 있는가?"에 대한 단위.

- 오디오신호 연산은 보통 c=a1*x+a2*y; 와 같이, 곱셈, 덧셈들의 조합으로 표현되며,
1개의 오디오 필터를 처리하기 위해서는 다수의 덧셈, 곱셈이 필요하다.
- 고정소수점 연산과 부동소수점 연산의 결과는 다르다.(인터넷 검색해보세요)
부동소수점은 오차가 존재하여, 연산 순서가 다르면, 결과 값이 달라질 수 있음. 오차*오차*오차*...은 ???

고정소수점 연산이 좋다 vs 부동소수점 연산이 좋다
====================================================
- 경우에 따라 다름.
- 일반적으로 고정소수점 연산이 빠르고, 정확함.
- 부동소수점은 범위(다이나믹 레인지)가 매우 넓은 곳에서 사용.
- 고정소수점의 범위(다이나믹 레인지)는 정해져 있어, 이 범위를 초과하면, 어떤 결과가 나올지 알 수 없음.

DSP와 PC의 차이점
=====================
1) DSP
- 부동소수점연산 기능이 없는 장비(칩)이 많다.(비싸니깐)
- 보통 고정소수점 연산.
- 연산결과 비트수가 장비마다 다르다. 예) 16비트*16비트 => 40비트까지 연산
(소수점 아랫부분 몇자리까지 연산이 가능한가? 에 대한 부분. 큰 차이는 없음. 미세한 차이)
- 실시간
- 연산성능이 보통 "1초당 몇회 연산이 가능하다"는 식으로 표시됨. 200~1600 MMACS

2) PC
- 부동소수점연산 사용가능. 고정소수점연산은 프로그래머가 선택하기 나름.
- 보통, DSP보다 고성능. 예) DSP=400MHz, CPU=2.2GHz
- 실시간이 어려움.(운영체제에 따라, 딜레이, 레이턴시 발생)
- Intel Core i5-2410M 기준 31.82 GFLOPS (1600 MMACS=1.6 GMACS에 비해 약 20배 성능)

예) CPU성능
Intel Core i7-2630QM 61.01 GFLOPS
Intel Core i5-2410M 31.82 GFLOPS

시간이 없어, 결과만
=====================
- PC프로그래머가 DSP와 같은 연산방식(고정소수점,부동소수점)을 사용했는가?
- 부동소수점 연산을 사용한 경우, 동일한 소스코드로 제작했는가? (부동 소수점은 연산 순서가 바뀌면, 결과 값도 바뀜)
위의 2가지에 따라 오디오 음질이 차이가 날 수 있음.
- DSP에서는 하드웨어 입/출력(ADC,DAC)에 추가 옵션이 있을 수 있음. 예) De-emphasis
- DSP에서는 출력회로에 하드웨어 LPF등의 필터가 들어 있음.
- DSP에서는 일부러 비밀 추가 옵션을 넣었을 가능성이 있음. (타사와 차별화)

차이점 확인 방법
========================
- DSP에 디지털 데이터를 넣고, 출력해서, PC에서 처리한것과 비교하여,
정확히 일치하면, 동일한 연산 방식, 동일한 소스로 동일하게 제작된 PC프로그램임.
(그래도, 출력단에서 차이가 날 수 있음.)

기타
=============
- PC는 DSP에 비해 연산 성능이 매우 높아서, 많은 채널에 많은 기능을 넣어서 사용할 수 있음.
단, 실시간은 어려움.(성능은 가능하지만, 운영체제에서 실시간 보장이 어려움)
주로, 실시간이 필요없는 오디오 레코딩 후작업에 많이 사용됨.(편집용 툴)

※잘못된 점은 지적 바랍니다.
감사합니다.