본문 바로가기

Audio

Raspberry Pi 더하기 Cirrus Logic Audio Card로 미디어센터 만들기

라즈베리 파이 B+ - 2015.06.12

Raspberry Pi B+

친구가 아들 가지고 놀라고 준 것을 계기로 많은 삽질을 하는 계기가 되었다.

 

비싼 오디오 기기들 다 팔고 티비를 소스기기 삼아 음악을 듣고 있는데

티비가 오래된 모델이라 전기를 많이 먹으니 영 부담스러운 상황이었다.

 

소스기기가 하나도 없어진 상황에서 음악을 들을 방법이 참 아쉬웠는데

라즈베리파이는 미디어센터로 KODI라는 툴을 가지고 있어서 

간단하게 Upnp, AirPlay가 다 되는 미디어센터를 만들 수 있어서 얼마나 다행이었는지 모른다.

 

라즈베리파이 2 모델 B가 새롭게 출시되었는데 기존 B+ 모델 보다 6배나 빠른 CPU를 달고 나왔다.

이걸 사야 되는데...

사기 전에 우선 티비를 대체할 소스기기가 필요해서 몇 가지 검토를 해야 했다.

티비가 왜 소스기기냐면 

라즈베리파이만으로도 소스기기 역할은 할 수 있지만 

이놈이 가지고 있는 아날로그 출력단이 매우 불량해서 소스기기로 쓸 수가 없는 상태라서

할 수 없이 그나마 음질이 나은 HDMI 출력을 이용할 수 밖에 없었고

HDMI로 내보낸 출력은 티비가 받아서 내장 DAC를 거쳐 아날로그 모니터링 출력을 통해

앰프로 들어가 소리를 내는 시스템이 된 것이다.

 

그나마 티비에 달린 DAC가 나름 들을만한 소리를 내어주는 것이 다행이었다.

 

최근에 Cirrus Logic에서 Raspberry PI 용 오디오 카드를 새로 출시했다.

기존에 Wolfson 칩을 제조하던 회사를 Cirrus Logic이 인수해서 

Wolfson audio card가 Cirrus Logic Audio Card for RPI로 새롭게 출시하게 된 것이다.

기존 Wolfson 카드는 라즈베리 A, B 모델용이었고

Cirrus Logic Audio Card는 B+와 2 용으로 출시되었다.

 

Wolfson의 DAC 칩은 나름 인지도가 있고 훌륭한 음질로 오디오쟁이들의 많은 사랑을 받은 제품이다.

Wolfson DAC이 달려 있다는 것 만으로도 충분히 기대할 만한 제품이라는 것이다.

 

그래서 이 카드를 사려고 인터넷을 뒤졌더니 Element14.com에서 판다.

국내 법인도 가지고 있고 한글 홈페이지도 있어서 구매하기는 쉬웠는데

1개가 45천원 정도 하는데 한 개만 사면 핸들링 차지가 무려 28천원.

95천원 이상 사면 무료 배송.

그래서 하는 수 없이 세 개를 주문했다.

 

 

  






 

UPS 통해서 싱가폴에서 배송이 되어 왔고

개인통관부호가 필요하다고 UPS 인천 창고에서 전화가 왔었다.

개인통관부호가 없으면 주민등록번호를 불러줘야 한다고 하는데

예전에 DSLR을 사면서 마이크로 SD 카드를 미국에서 직구했던 적이 있는데

그 때 만들어 두었던 개인통관부호가 이렇게 쓰게 될 줄은 몰랐다.

 

당시에 삼성 MicroSD 카드를 64GB 짜리 2개를 샀는데 

2개 가격이 국내에서 파는 1개 가격이었고 심지어 무료 배송이었다.

 

개인이 해외에서 구매하는 제품의 통관은 15만원이 넘지 않으면 관세를 물지 않는다고 알려져 있다.

개인이 수입하는 것이라고 하니 UPS 직원이 개인이면 관세는 없다고 이야기 하더군.

 

 

 



 

 

 

 

아주 작지만 역시 Cirrus Logic이라는 이름이 아깝지 않게 아주 잘 만들어져 있다.

녹색 스테레오 단자가 LineOut, 분홍색이 LineIn.

RCA 잭 두개는 SPDIF-In,Out.

왼쪽 검정색은 Headset/Mic 겸용 단자로 4극만 쓸 수 있는 것 같다.

3극 이어폰 또는 헤드폰을 끼웠을 경우에는 하우링 같은 이상한 소리가 난다.

즉 헤드폰 용은 아니라는 것.

 

기판에 SPKOUT이라고 적혀 있는 구멍 네 개가 있는데 

이름 그대로 스피커를 직접 연결할 수 있다고 한다.

물론 출력은 아주 작다.

 

 

 



 

 

 

 

뒷면에는 GPIO 커넥터가 한쪽에 있고 이 부분을 라즈베리파이의 GPIO에 꼽으면 된다.

 

Munufactured In PRC

이건 요즘 중국산 제품들에 많이 표기되고 있다는데 중화인민공화국 영문 약자를 쓴다.

Made In China 하면 어쩐지 싸구려 느낌이 난다고 해서 이렇게 많이 바꿔 표기한다고...

 

오른쪽 작은 봉지에 파이 보드와 CL 보드 간에 지지 봉과 플라스틱 나사 네 개가 들어 있다.

 

 

 


 

 

 

 

라즈베리파이 모델 B+ 위에 Cirrus Logic Audio Card를 장착한 모습.

장착이 되서 정상적으로 드라이버가 올라와 동작하게 되면 카드 위에 빨간 LED는 꺼진다.

드라이버가 로드되지 않으면 파란 LED 오른쪽에 빨간 LED가 켜진다.

 

  

 

 

 

 

 

 

KODI에 jRiver MC에서 음악 재생중.

 

 

 

 

 

     

 

 

 

 

좌측은 Kodi의 공식 리모트 앱인 Kore

우측은 Youtube Add-on을 깔아서 유투브 영상이 재생되고 있는 모습.

스마트 티비 없이도 티비에서 유투브 영상을 다 볼 수 있는 것도 매우 쓸만 함.

 

 

 

기존에 Cirrus Logic Audio Card가 없는 상태에서는 OSMC (Open Source Media Center)를 쓰고 있었는데

OSMC는 아직 Cirrus Logic Audio Card를 지원하는 커널을 제공하지 않고 있어서

인터넷을 죄다 뒤져서 온갖 정보를 다 찾아 봤더니 Element14에서 제공하는 프리 컴파일 커널 이미지가 가장 나을 것 같다고 판단되었다.

CL 카드의 사용자 메뉴얼에도 Full Install은 이 이미지로 하도록 안내하고 있다.

 

이제부터는 산 넘어 산이다.

정말 많은 것들을 손을 대야 했었고

여러 가지 문제가 생겨 하나 하나 해결하면서 넘어가는 산이 한 두 개가 아니었다.

 

나중에 헷갈리지 않도록 여기에 넘었던 산을 모두 기록하고자 한다.

 

 

1. Cirrus Logic Audio Card User Documentation 이걸 잘 읽고 따라 할 것.

raspbian의 기본 user는 pi 이고 password는 raspberry 이다.

root 패스워드는 sudo passwd root 로 바꿀 수 있다.

 

2. CL 카드를 쓸 수 있게 하는 방법은 두 가지

Element14에서 풀 이미지를 받아 MicroSD 카드에 구워 그대로 사용하는 것이 가장 쉽고 빠름.

기존 운영 환경을 그대로 두고 CL 카드 드라이버를 새로 넣고 커널 빌드를 새로 하는 방법

후자의 방법은 엄청난 시간과 노력을 들여야 하기 때문에 절대 권장하지 않음.

특히 OSMC를 쓰고자 한다면 거의 불가능에 가깝다.

OSMC는 아주 작은 필수 요소만 가진 운영체제이기 때문에 컴파일러도 없고 커널 소스도 없어서

이 환경을 다 갖추는 것이 거의 무의미하다고 보여진다.

 

3. Win32DiskImager를 받아 설치한 후 MicroSD 카드에 Element14에서 받은 이미지를 굽는다.

이때 최소한 8GB 이상이 카드를 써야 한다고 권장하고 있다.

Class10이 권장되고 삼성의 카드들이 속도면에서 좋다고 함.

 

4. 구워진 MicroSD 카드를 라즈베이파이에 넣고 전원을 연결하면 Raspbian Desktop으로 부팅이 된다.

이 이미지에는 기본적인 Raspbian 환경이 그대로 다 들어 있다.

OSMC 처럼 불필요한 부분 다 제거한 최소한의 운영체제는 아닌 것으로 보인다.

커널 빌드도 다 되고...

 

5. 부팅이 되었지만 화면 해상도가 맞지 않는 등 여러 가지 손을 대야 할 부분이 있다.

해야 할 일들은 다음과 같다.

- 화면 해상도 조정 - /boot/config.txt에 아래 내용 수정

----------------------------

hdmi_group=2

hdmi_mode=81 <- 이 수치는 모니터에 따라 다르게 지정해야 하는데 1366x788이 0x50, 즉 81이다.

----------------------------

hdmi_mode 전체 리스트는 구글링으로 쉽게 찾을 수 있다.

 

- root와 pi user의 password 변경

- raspi-config을 이용해서 Filesystem 확장 - 이걸 해야 SD 카드의 남은 영역을 다 쓸 수 있게 된다.

이 변경은 다음 리부팅 후에 적용된다.

 

- raspi-config을 이용해서 부팅 후 Desktop으로 들어가지 않고 login prompt 상태가 되도록 변경

GUI 데스크탑이 떠서 불필요한 자원을 먹을 필요가 없으므로...

 

- /boot/config.txt에 GPU_mem 관련한 부분과 오버클락 부분 수정 - 이거 하지 않으면 Kodi에서 동영상 재생에 문제가 생긴다.

-----------------------

arm_freq=850

core_freq=375

gpu_mem_256=112

gpu_mem_512=144

hdmi_ignore_core_init=1

disable_overscan=1

start_x=1

-----------------------

이것은 OSMC (RPI B+ 용)에 있는 config.txt의 내용인데 이 환경이 가장 잘 돌아가는 것 같아서 옮겨 둔다.

여기에 화면 해상도를 위한 위의 2줄을 같이 넣어주면 되겠다.

 

여기서 reboot을 한 번 해주자.

그러면 Deaktop이 아닌 login 프람프트만 보이게 부팅이 된다.

 

******************************************************************************

IMPORTANT

이 커널은 절대 Upgrade 하면 안된다.

업그레이드를 하게 되면 CL 카드 드라이버 트리가 깨져서 CL 카드가 동작하지 않게 되므로 

sudo apt-get upgrade는 절대 하지 말 것.

==============================================================================

 

6. 이제 Kodi를 설치하자.

sudo apt-get update

sudo apt-get install kodi

이렇게 하면 kodi가 설치된다.

 

- /etc/default/kodi 파일을 열어 ENABLED=0 (KODI가 부팅시 자동실행 안됨)을 1로 수정해

부팅시 KODI가 자동으로 실행되도록 해야 한다.

여기에 한 가지 더 해줘야 하는 부분이 있는데 이 상태로는 초기에 자동 실행된 KODI에서 마우스 키보드가 말을 안 듣는 경우가 생긴다.

/etc/group 파일을 열어(vi 또는 nano) adm과 input에 kodi user를 추가해 준다.

이 단계에서 reboot

 

 

7. 부팅이 되면 바로 KODI가 뜬다.

영문이다. 이 상태에서는 자막을 한글로 볼 수 없다.

KODI에서도 손 볼 부분이 몇 군데 있다.

 

- SYSTEM - Settings - Apearance - Skin에 들어가면 fonts가 있는데 이걸 Arial base로 변경한다. 잠시 후 껌뻑하며 글꼴이 바뀐다.

- Skin 아래에 International에 Language가 English로 되어 있는데 이걸 Korean으로 바꾼다. 잠시 후 한글로 다 바뀐다.

위 두 단계의 순서가 바뀌면 화면에 글자가 안 보이는 현상이 있으므로 꼭 fonts를 Arial base로 바꾼 후에 

언어를 Korean으로 변경할 것.

- 언어 - 시간대 국가를 Korea (South)로 변경해야 시간이 맞는다.

 

- 시스템 - 설정 - 설정 수준을 전문가로 바꿀 것.

 

- 시스템 - 설정 - 서비스에 들어가 몇 가지 설정을 해야 한다.

UPnP에서 UPnP를 통해 비디오 및 음악 라이브러리 공유를 켠다. UPnP를 통해 Kodi 제어 허용도 켠다.

그 아래 웹서버에서는 HTTP를 통해 kodi 제어 허용을 켠다. 

이 걸 켜야 Kodi의 공식 리모트 앱인 Kore를 통해 Kodi를 제어할 수 있다.

그 아래 AirPlay도 필요하면 켜라.

서비스 설정은 이로 끝.

 

- 시스템 - 설정 - 시스템에 들어가 몇 가지 설정을 마무리 한다.

비디오출력은 /boot/config.txt에서 지정한 hdmi_mode에 맞게 해상도가 설정되어 있을 것이다.

오디오출력에서는 오디오 출력 장치가 기본 PI:HDMI로 되어 있는데 CL 카드를 쓴다면

오디오 출력 장치를 누르면 창이 떠서 장치를 선택할 수 있고 

ALSA: Default (snd_rpi_wsp Analog) 라는 장치를 선택하면 CL 카드를 통해 LineOut으로 소리를 낼 수 있다.

입력장치에서는 마우스와 터치 스크린 지원이 켜져 있어야 한다. 

이게 껴저 있으면 마우스가 동작하지 않는다.

여기 까지 하면 시스템 부분의 설정도 끝.

 

그러면 시스템 설정은 모두 끝났다.

 

이제 미디어 서버의 SMB 공유폴더를 KODI에서 볼 수 있도록 하자.

영화 볼 때 미디어 서버에서 UPnP로 가져다 볼 수도 있지만 UPnP를 통하면 자막을 볼 수가 없으므로

SMB 공유폴더를 KODI에 연결해 두고 여기서 영화를 가져다 보면 자막을 볼 수 있게 된다.

홈 화면으로 나와서 

시스템 - 파일 관리자에 들어간다.

A 루트에 소스 추가를 누른다.

파일 소스 추가 창에서 탐색을 누른다.

새 공유 찾기 창이 뜨고 맨 아래 네트워크 위치 추가를 누른다.

네트워크 추가 창이 뜨고

프로토콜은 윈도우 네트워크(SMB)

서버이름에는 미디어 서버의 이름을 적고

공유 폴더에는 서버에서 공유해준 폴더의 이름을 적고

사용자명은 서버의 사용자명, 비밀번호는 서버의 비밀번호를 입력하고 확인.

위의 내용이 다 맞아 서버에서 공유해준 폴더로 접속이 되면 확인 창이 뜨고 OK OK 하면 된다.

이 후에는 홈 화면의 비디오 - 파일에서 비디오 추가 - 탐색을 누르면 파일 관리자에서 연결한 공유폴더를 볼 수 있다.

 

이상 까지가 라즈베리파이 KODI 환경에서 Clrrus Logic Audio Card를 이용해 미디어센터를 만드는데 필요한 내용들이다.

 

pi user의 홈 폴더에는 CL 카드의 출력방향을 지정할 수 있는 스크립트들이 들어 있다.

라인아웃으로 출력을 내 보내려면 

Playback_to_Lineout.sh을 돌려주는 식의 스크립트들이다.

몇 가지 스크립트들의 활용방법은 Cirrus Logic Audio Card User Documentation에 잘 기술되어 있다.

이 스크립트들은 누적 적용 방식이라고 되어 있다.

즉, 한 가지 스크립트 Lineout을 돌리면 Lineout이 살아나고

이 상태에서 Headset을 돌리면 Headset과 Lineout이 동시에 active가 되는 방식이다.

Reaet_path.sh을 돌리면 모든 출력이 다시 NO로 변경된다.

 

라즈베리파이나 KODI의 스크린샷을 뜰 수 없어 글로만 기록하는 답답함이 있지만 나중에 참고가 될 것 같다.

 

라즈베리파이 B+이나 2에서 CL 카드를 쓰는 여러 가지 방법이 있는데 

위에 기록한 방법도 있고

OpenElec을 가지고 CL 드라이버가 포함된 커널의 테스트빌드도 존재하고 있고

크로스 컴파일로 커널빌드하는 방법도 소개되고 있고

Minibian 기반에서 빌드된 커널도 찾을 수 있고,

여러 사람들이 자기의 필요에 의해 빌드된 커널 이미지들을 공개하고 있으니

자신의 환경과 같은 빌드 이미지를 찾아 테스트해 보면 좋을 것 같다.

 

며칠 간의 삽질 끝에 안정적인 동작을 하는 미디어센터가 만들어져 다행스럽다.

CL 카드의 오디오 품질도 상당히 만족스럽다.

OK. 땡큐.

 

====================================================

발견된 문제 추가.

 

UPnP를 통해 음악을 재생하고 있을 때

재생 중에 다른 곡의 재생을 시작하게 되면 어떤 경우에 

재생 속도가 빨라지는 현상이 발생하는데

한번 빨라지면 다시 원 속도로 돌아가지 않는 현상이 발견 된다.

 

이런 경우에는 Reset_paths.sh를 돌려주고 나서 다시 Playback_to_Lineout.sh을 돌려주면 

재생 속도가 다시 정상으로 돌아온다.

 

어떤 상황에서 재생 속도가 빨라지는지는 좀 더 테스트해서 찾아볼 예정.

 

문제 추가 발견.

 

비디오 재생 중에 1,2초 주기로 멈칫멈칫하는 증상이 있을 때도 역시 

Reset_paths.sh 실행 후 Playback_to_Lineout.sh 돌려주면 정상으로 재생된다.

 

멈칫거리는 증상이 생기면 아무리 리부팅 해 봐도 소용이 없었으며

비디오가 재생중일 때 위 스크립트를 돌리면 더 꼬이기만 했다.

 

모든 재생을 중지하고 위 스크립트를 돌려야 한다.

드라이버가 다소 문제가 있는 듯.