태그: Audio

USB Audio 전송 케이블에 따른 음질 열화 논란에 대하여

요즘 들어서 오디오에 관심을 가지다 보니, 자연스럽게 이러한 케케묵은 논쟁거리에 발을 담그게 되는 것 같다.
오디오 케이블, 특히 디지털 케이블이 음질에 미치는 영향은 오랜 기간 동안 논란이 되어 왔는데, ‘청감상 무의미하다’는 의견이 대세가 되었음에도 아직 완전히 수그러들지는 않았기에 이 글을 작성하게 되었다.

이 글은 USB-IF에서 게시한 USB 2.0 Specification 및 USB Audio 2.0 Specification에 근거하여 작성되었으며, 이 기술 명세들은 공공에 공개되어 있음을 미리 밝히는 바이다.

 

1. USB의 전송 모드

현재 논란이 되고 있는 지터(Jitter) 노이즈에 대해 이야기하려면, 먼저 USB의 전송 모드에 대한 이해가 필요하다.
USB 2.0 표준은 4가지의 전송 모드를 가지고 있다.
각각 Control Transfer, Bulk Transfer, Interrupt Transfer, Isochronous Transfer 모드로, 각 모드의 특징은 다음과 같다.

– Control Transfer : USB 장치가 연결되고 초기 설정을 진행하는 모드로, 데이터의 수신이 보장된다.
– Bulk Transfer : 대용량 데이터를 전송할 때 사용하는 모드로, 에러 감지와 정정을 통한 신뢰성 있는 통신을 보장한다.
– Interrupt Transfer : 제한된 지연 시간(Latency)가 요구되는 경우에 사용된다. 디바이스로부터 임의의 시간에 데이터가 올 수 있으며, 디바이스가 요구하는 것 이상의 전송률(Rate)를 반드시 지원해야 한다. 추가적인 타이밍 소스가 없음에도, 응답 시간 제한이 요구될 수 있다.
– Isochronous Transfer : 생산-전송-소비가 연속적, 실시간으로 이루어지는 모드로, 타이밍이 매우 중요하다. 일정한 전송률로 데이터를 보낼 것이 요구되며, 지연 시간은 단말의 버퍼 크기에 달려 있다. 주로 비디오, 음성 등을 전송할 때 사용되며, USB Audio도 여기에 속한다. Isochronous Transfer는 일정한 전송률을 유지하는 것과 지연 시간을 최소화하기 위해 재전송을 허용하지 않으며, 오로지 Control Transfer를 통한 에러 보고만이 이루어진다.

Each AudioStreaming interface can have at most one isochronous data endpoint.
USB Audio 2.0 Specification

이와 같이 USB Audio는 Isochronous Transfer를 이용하는 것을 알 수 있다.

 

2. USB Audio 표준과 전송 지터 문제

지금껏 논란이 되었던 것은, ‘과연 USB 케이블의 품질이 전송 신호에 영향을 미칠까?’라는 것이었다. 이 주장은 크게 두 가지로 나뉘는데, USB 케이블을 거치는 동안 클럭이 열화된되는 주장과, USB 케이블의 품질에 따라 데이터 자체에 손실이 일어난다는 것이었다.
먼저 클럭 열화부터 다루어 보자.
클럭 열화가 발생한다고 주장하는 측에서는 컴퓨터가 생성하는 클럭의 품질이 낮으며, 그에 따라서 아날로그 신호를 재생할 때 열화가 발생한다고 말한다. 하지만 엄밀히 말해서 이것은 정확한 주장이라고 말하기 힘들다.

PC에서 기준 클럭으로 사용하는 오실레이터의 성능은 보통 25MHz 수준이며, 이것은 최대 0.08μs의 오차를 가진다는 이야기이다. 흔히 오디오용으로 사용되는 TCXO 오실레이터의 경우 40MHz의 클럭을 가지며, 약 0.05μs의 오차를 가진다. 최대값 기준으로 0.03μs의 오차를 구분하는 것은 사람의 귀로는 불가능하다.

그렇다면 무엇이 문제였는가? 사실 이 문제는 USB가 데이터를 전송할 때 전송 신호를 동기화하는 방식에서 기인한다.
디지털 신호를 전송할 때 클럭 동기화는 중요한 고려 요인 중 하나이다. 왜냐하면 디지털 신호는 전압 변동을 통해 0과 1을 해석하는데, 해석 타이밍이 어긋나버리면 0을 1로, 1을 0으로 인식할 수 있기 때문이다. USB에서는 클럭을 SOF(Start of Frame)을 기준으로 동기화하였고, 프레임의 주기는 USB 1.0에서는 1ms, 2.0에서는 125μs가 된다. 이 클럭 주기는 일반적인 데이터를 전송할 때는 문제가 없었지만, 데이터를 실시간으로 처리해야 되는 입장에서 보면, 데이터를 해석할 수 있는 기준점이 프레임의 주기마다 한번씩 들어오는 셈이 된다.

일반적으로 사용되는 CD의 샘플링 레이트인 44.1KHz를 기준으로 하면, 0.023ms, 23μs간격마다 한번씩 클럭이 교정되어야 ‘정확한’ 복원이 이루어진다고 장담할 수 있다. 하지만 USB Audio 1.0을 기준으로 한다면 무려 50배, 2.0을 기준으로도 6배의 오차가 발생할 수 있게 된다. 이러한 오차는 DAC에서 오버샘플링을 거치면서 더욱 커지게 되고, 결과적으로는 청감상으로도 영향을 미칠 수 있게 된다.
물론 나는 0.1ms정도의 오차로 발생할 수 있는 지터 노이즈를 인간의 귀가 구분할 수 있다고 생각하지 않는다. 하지만 이러한 논란이 제기된 것이 USB Audio 1.0이 사용되던 시기임을 생각하면 최대 1ms, 오버샘플링을 적용할 경우 수ms의 오차로 발생하는 노이즈는 귀로도 알아챌 수 있었을 것이다.

물론 이러한 문제가 USB Audio 표준 제정시에도 알려져 있었기에, 이러한 클럭 동기화에 따른 지터를 방지하기 위한 목적으로 Asynchronous(비동기) 클럭 동기화가 제안되었다. 이 비동기 전송이 USB Audio 2.0부터 도입된 것이라고 생각하는 사람들이 많은데, USB Audio 1.0 Specification에도 엄연히 비동기 전송이 포함되어 있으며, DAC를 USB로 연결하는 것이 보편화된 2000년대에 들어서야 비동기 전송이 채택된 DAC들이 시중에 등장하기 시작했다고 보는 것이 옳다.

비동기 클럭 동기화는 마스터 클럭을 SOF로부터 복원하는 것이 아닌, 단말이 가지고 있는(혹은 외부의) 클럭 소스로부터 얻어내는 것으로, USB의 클럭 주기에서 벗어나 더 고성능의 클럭을 이용해 DAC를 수행할 수 있게 하였다. 2016년 현재 판매되는 대부분의 USB DAC들은 비동기 전송을 지원하는 제품으로, 전송 지터는 사실상 무의미한 문제가 되었다.

 

3. USB Audio 전송 시의 데이터 손실

흔히들 ‘디지털 데이터는 무손실이기 때문에 데이터 오류가 발생하는 것은 불가능하다’고 치부하고 넘어가는 이 문제는 사실 전송 지터보다 훨씬 유의미한 문제이다. 왜냐하면 앞서 보았듯이 USB Audio가 사용하는 전송 모드인 Isochronous Transfer는 재전송을 수행하지 않기 때문인데, 디지털 신호에서 에러는 ‘발생하지 않는 것’이 아니라 ‘감지/정정 가능한 것’이기 때문에 아날로그 신호에 비해 월등한 신뢰성을 보장하는 것임을 생각하면 재전송을 통한 에러 정정을 수행하지 않는 것은 데이터가 전송 에러에 그대로 노출된다는 것을 의미한다.

USB에서는 에러를 감지하는 수단으로 CRC를 제공하지만, 에러를 정정하는 것은 하드웨어/소프트웨어 단의 재전송을 통해 이루어진다.

The protocol allows for error handling in hardware or software. Hardware error handling includes reporting and retry of failed transfers. A USB Host Controller will try a transmission that encounters errors up to three times before informing the client software of the failure. The client software can recover in an implementation-specific way.
USB 2.0 Specification

The timely delivery of isochronous data is ensured at the expense of potential transient losses in the data stream.
USB 2.0 Specification

하지만, USB Audio에서는 에러가 발생하더라도 재전송을 통한 정정을 수행하지 않는다!

이제 실제로 데이터가 손실될 수 있음을 알았으니 이 사실이 ‘청감적으로 유의미한 차이를 가져오는가’에 대해 논할 차례가 되었다.
정말 그럴까? 한번 계산을 통해 확인해보자.

USB 3.0 Electrical Compliance Methodology에 따르면 USB 3.0을 지원하는 장비는 10-12의 BER(Bit Error Rate)를 가진다고 한다. 아주 관대하게 봐서 비트 에러가 오로지 전송 매체(케이블)에서 발생한다고 가정하자. 그렇다면 1012비트를 전송하는 동안 1비트의 오류가 발생하는 셈이다. 1012비트를 좀 더 읽기 좋게 환산하면 125GB가 된다.
음.. 가만 생각해보니 청감상 무의미하다는 쪽에 무게를 너무 많이 실어주는 것 같다. 지금 예시로 든 것도 USB 3.0이지, 2.0이 아니지 않은가?
안타깝게도 USB 2.0에서 요구하는 비트 에러율에 대한 레퍼런스를 찾을 수 없었기에, 아주 관대하게 ‘좀 더 낡은 규격인 USB 2.0은 USB 3.0보다 100배의 에러가 발생한다’고 가정하자. 이렇게 가정하였을 경우 USB 2.0의 비트 에러율은 10-10이며, 1.25GB의 데이터를 전송할 때 1비트의 에러가 발생한다는 이야기가 된다.

앞서 말했듯이 USB 2.0은 125μs당 하나의 마이크로 프레임(Micro Frame)을 전송하며, 하나의 마이크로 프레임에 포함될 수 있는 데이터의 최대 크기가 1023Bit이므로, 1023Bit가 손실된다고 가정해 보자. 이 경우 일반적인 PCM 2채널의 비트레이트인 1141Kbps를 기준으로 약 0.001초에 해당하는 데이터가 손실된다. 하지만 Isochronous Transfer는 전송률을 맞춰야 하므로 1141Kbps에 맞춰서 데이터를 전송한다고 가정하면 약 143Bit가 손실된다. 이것으로 손실되는 데이터는 거칠게 계산해서 0.0001초 미만이다. 이것을 청감상으로 구분할 수 있을까? 판단은 지금 이 글을 읽고 있는 독자에게 맡긴다.
또한 실제로 에러가 발생하였을 경우 DAC에서는 데이터를 파기하는 대신 보간을 통한 복원을 시도한다. 이러한 알고리즘이 100% 성공적이라고 장담할 수는 없겠지만, 데이터가 잘려나가는 대신 정정된 데이터가 들어가는 것만으로도 에러를 구분할 수 있을 가능성은 더욱 줄어들 것이라는 점을 쉽게 알 수 있을 것이다.

한편, 1.25GB의 데이터를 전송할 동안 1비트의 에러가 발생한다는 것이 잘 와닿지 않을 수도 있겠다는 생각이 들어 간단한 예시를 준비하였다.
일반적인 PCM 데이터의 비트레이트인 1141Kbps를 기준으로 계산해보면, 약 8764초를 재생할 때 1비트의 에러가 발생한다는 결론이 나온다. 즉, 확률적으로 음악을 2시간 30분간 재생할 때 0.0001초의 노이즈가 1회 발생한다.

이것이 청감상으로 유의미하며 또한 자신의 귀로 구분이 가능하다고 주장하는 사람이 있다면 그건 정말 대단한 일이 아닐 수 없다는 생각이 든다.

 

4. 결론

이것으로 USB Audio의 음질 열화, 그리고 고급 USB 케이블을 둘러싼 소모적인 논쟁의 마무리를 지을 수 있었으면 한다.
무엇이건 주장하는 것은 자신의 자유이지만, 그 주장으로 남을 설득시키기 위해서는 상대방이 납득할 수 있는 수준의 근거와 논리가 필요하다. 마찬가지로, ‘청감상 무의미하다!’고 주장하는 것은 자유이지만, 이 주장을 입증하기 위해서는 나름의 근거와 논리가 있어야 할 것이다. 이 글이 오디오 미신과 싸우는 다른 모든 사람들에게 유익한 글이 되었기를 희망한다.

최고의 AirPlay 리시버 어플리케이션 – TuneAero

 

이번에 패시브 스피커와 앰프를 들여놓으면서 음악 감상 환경에 많은 변화가 있었다.

예전에는 음악을 들을 때 헤드폰을 사용했고, 심지어는 잘 때도(!) 그러하였다. 그러나 제대로 된 스피커를 들여놓으면서 더 이상은 그럴 필요가 없어져버렸다.

이제 남은 포인트는 단 하나. 얼마나 편하게 음악을 들을 것인가. 내가 구매한 앰프인 SMSL Q5 Pro는 SPDIF, USB, AUX 입력을 지원한다. 국내 수입사인 (주)사나코는 제품 명세에 블루투스 또한 지원한다고 적어 놓았으나, 사실은 지원하지 않는다.

다양한 입력단자(특히 디지털) 덕분에 PC를 통한 음악감상에는 불편함이 없었으나, 모바일 기기를 이용한 감상,  그것도 수면을 취할 때의 음악감상에는 상당한 불편함이 따랐다. 누워서 PC의 플레이어를 조작할 수는 없지 않은가?

사실 리모트 컨트롤이 가능한 음악 플레이어는 꽤 많이 있고, 실제로 설정도 어렵지 않지만 나 같은 경우에는 iTunes 라이브러리를 이용하기에 가능하면 iTunes를 그대로 사용할 수 있는 방법을 찾고 싶었다.

처음 떠올린 생각은 앰프에 블루투스 리시버를 붙이는 것이었다. Bluetooth to SPDIF 변환 모듈을 붙이면 되겠지.. 하고 알리 익스프레스를 뒤진 결과, 약 50달러 정도를 주면 해당 모듈을 구할 수 있다는 사실을 알아내었으나 곧 애플에는 AirPlay가 있다는 사실을 떠올렸다.

‘블루투스가 없으면 AirPlay를 사용하면 되지’

그리하여 AirPlay 리시버 어플리케이션을 찾아본 결과, AirServer Universal과 Reflector라는 어플리케이션이 유명한 듯 했다. 이 둘 중에서 AirServer는 Mac 지원이라 제외하고, 결국 Reflector를 사용해 보았는데, 음악 재생기로써는 매우 치명적인 결함이 있었다. Reflector에서 사운드를 재생하기 위해서는 반드시 미러링 기능을 활성화해줘야만 했다!

미러링 기능을 활성화하면 아이폰의 화면을 PC로 미러링하게 되는데, 당연히 대역폭 소모도 더 크고, 배터리 소모도 심해진다. 단순히 음악을 듣기 위해서 미러링을 활성화하는 것은 적절하지 않은 것 같았다. 그리고 프로그램 자체도 좀 불안정했고. 그래서 대안을 찾기로 했는데, AirPlay Transmitter로 유명한 TuneBlade를 제작한 Breakfree Audio에서 AirPlay 리시버도 만들고 있었다. 그것이 바로 TuneAero다.

TuneAero

사실 이 TuneAero라는 어플리케이션은 상당히 모호한 타겟층을 가지고 있다. 요즘 대부분의 고급형 액티브 스피커들이 자체적으로 AirPlay를 지원하며, 패시브 스피커의 경우는 올인원 앰프나 네트워크 플레이어를 사용할 수 있기 때문이다. 결국 이 어플리케이션은 나처럼 ‘돈이 없는’, 가난한 사람들을 위하여 값 싸게 AirPlay 기능을 제공해주는 것이 목적이라 할 수 있겠다. 제작사에서도 이 점을 인지하고 있어서인지, Multiple Receiver를 지원하고서부터 버젼을 1.0으로 올렸다.

Multiple Reciever란 기기에 따라 아웃풋 단자를 다르게 설정할 수 있는 기능인데, 이를테면 다수의 스피커를 운용하면서, 각각의 스피커에 다른 음악을 재생시킬 수 있다.

나야 뭐 스피커를 여러대  굴릴 생각은 없으니 제쳐두고, TuneAero의 기본적인 기능에 대해 이야기를 좀 더 해보도록 하겠다.

 

TuneAero를 설치하고 실행하면, 트레이에 작은 아이콘이 생긴다. 그리고 아이콘을 클릭하면 이런 화면이 뜬다.

main

AirPlay 연결을 기다리고 있다. 현재 상태에서는 AirPlay 이름이 HYPER-V로 뜬다. 기본적으로 컴퓨터 이름을 가져온다.

위쪽의 톱니바퀴를 클릭하면 설정 화면이 뜬다.

Preferences-1

General 탭. 자동 실행, AirPlay 이름을 정할 수 있다.

Preferences-2

Advanced 탭. Reflector와는 다르게 오디오 출력 인터페이스를 지정할 수 있다. 음악 플레이어로써의 기본기를 갖추고 있다.

Preferences-3

License 탭. 라이센스 키를 입력할 수 있다. 가격은 15달러이며, 트라이얼 버젼에서 15분에 한번씩 접속이 끊기는 것을 제거해준다. 그냥 재접속하면 되지만, 실제로 사용하는 컴퓨터에 물려서 쓸 경우에는 그 때마다 뜨는 활성화 안내 창 때문에 불편함을 느낄 수 있어보인다. 나야 서버에 물려서 쓰니 상관없지만.. 그래도 라이센스는 구매했다. 잠이 들 때까지는 적어도 30분 정도가 걸리니까.

기능이 워낙 간단한 탓에 소개할 내용도 많이 적은 듯 하다. 그래도 15달러에 불과한 가격에 네트워크 플레이어가 하나 생긴 것이니 가성비는 아주 뛰어난 듯.