2015년 8월 19일 수요일

라즈베리에 PulseAudio 설치 및 사용

raspbian Debian Wheezy 2015-05-05 버전에는 ASLA 가 기본으로 탑재 되어 있고
PulseAudio 를 사용하려면 빌드해서 사용해야 합니다.

아래 참고사이트 [1] 과 [2] 에 자세한 설명이 나와 있습니다. 이 가이드는 A2DP 를 사용하기
위해 PulseAudio 를 설치하는 과정을 설명 하는 것이라서 모든 내용이 필요하지는 않습니다.

차이점은 Bluetooth 5.0 업그레이드를 하지 않아야 합니다.
이를 위해 PulseAudio configure 시에도 --disable-bluez4 가 아닌 --disable-bluez5 로
설정해야 합니다. 추가적으로 PulseAudio 의 HSP Profile 의 bug fix 한 내용이 Ubuntu 15.04
패키지에 포함되어 있는데 이를 반영하는 것이 좋아 보입니다.

0206-module-bluetooth-discover-adding-module-option-profi.patch
0208-module-bluetooth-device-Allow-leaving-transport-runn.patch

이렇게 해서 설치가 완료 되면 핸즈프리 혹은 Moto Hint 와 페어링을 해주고
기본 설정을 해 줘야 사용이 가능합니다.

과정은 아래 6가지 절차 입니다.
1. 블루투스 동글 동작 확인
  - hcitool 명령어를 사용해서 라즈베리파이에 꽂은 동글 동작을 확인합니다.
$ hcitool dev
Devices:
hci0 00:02:72:AB:XX:XX
2. 장치 찾기
  - 역시 hcitool 를 사용해서 페어링 모드의 디바이스를 검색합니다. 이 때 핸즈프리나 Moto Hint
   가 페어링 모드여야 합니다.
$ hcitool scan
Scanning ...
1C:96:5A:CF:XX:XX Moto Hint
3. 페어링
  - bluez-simple-agent 로 Moto Hint 를 페어링 합니다.
$ bluez-simple-agent hci0 1C:96:5A:CF:XX:XX
  - 페어링 할때 페어링 코드가 '0000' 같은 단순 코드가 아닌 경우에는
    /usr/bin/bluez-simple-agent 의 내용을 변경합니다.
capability = “KeyboardDisplay” 를 “DisplayYesNo” 로 변경 
4. 신뢰할 수 있는 디바이스 추가

  - 부팅 때 마다 페어링 하지 않기 위해 신뢰할 수 있는 장치에 추가 합니다.
$ bluez-test-device trusted 1C:96:5A:CF:XX:XX yes
5. 연결
  - Moto Hint 는 audio 이기 때문에 bluez-test-audio 로 연결 합니다.
$ bluez-test-audio connect 1C:96:5A:CF:XX:XX
6. 프로파일 설정
  - HSP 프로파일을 사용해야 하므로 설정 합니다.
$ pactl set-card-profile 1 hsp

위 과정을 매 부팅때 마다 해 주는 script 를 작성해서 crontab 에 등록해 두면 자동으로
사용할 수 있습니다.
$ crontab -e
@reboot /home/pi/autostart.sh
아래는 autostart.sh 내용입니다.
#!/bin/bash
# 2 devices should trusted to all hcix

#bluez-test-device -i hci0 remove 20:14:12:23:07:85
#hcitool -i hci0 scan --refresh
#bluez-simple-agent hci0 20:14:12:23:07:85
#bluez-test-device -i hci0 trusted 20:14:12:23:07:85 yes
#bluez-test-serial -i hci0 connect 20:14:12:23:07:85

#bluez-test-device -i hci0 remove 1C:96:5A:CF:D1:D9
#hcitool -i hci1 scan --refresh
#bluez-simple-agent hci1 1C:96:5A:CF:D1:D9
#bluez-test-device -i hci1 trusted 1C:96:5A:CF:D1:D9 yes
bluez-test-audio -i hci1 connect 1C:96:5A:CF:D1:D9
pactl set-card-profile bluez_card.1C_96_5A_CF_D1_D9 hsp
pacmd set-sink-volume bluez_sink.1C_96_5A_CF_D1_D9 1

pkill pulseaudio
sudo su - pi -c '/usr/bin/pulseaudio --start --log-target=syslog --system=false --disallow-exit  --daemonize --high-priority'
* 주의 : Moto Hint 를 사용할 때는 라즈베리 전원을 켜기 전에 Hint 를 귀에 먼저 꽂아야 페어링
에 문제가 발생하지 않습니다.

이렇게 모든 설정을 마친 뒤 사용을 하는 방법은 gstreamer 의 경우에는 PulseAudio device
를 설정 할 수 있어서 아래 처럼 사용 가능 합니다.

[HSP 출력]
$ gst-launch-1.0 audiotestsrc ! audioconvert ! "audio/x-raw, format=(string)S16LE, rate=(int)8000, channels=(int)1" ! pulsesink device="bluez_sink.1C_96_5A_CF_XX_XX"

[HSP 입력]
$ gst-launch-1.0 pulsesrc device="bluez_source.1C_96_5A_CF_XX_XX" num-buffers=100 ! audioconvert ! "audio/x-raw, format=(string)S16LE, rate=(int)8000, channels=(int)1" !  wavenc ! filesink location=/tmp/passive.wav

다른 Music App 을 사용할 때 Device 설정이 귀찮으시면 Default Source, Sink 를 세팅해
둘 수 있습니다.
$ pacmd set-default-source bluez_source.1C_96_5A_CF_XX_XX
$ pacmd set-default-sink bluez_sink.1C_96_5A_CF_XX_XX

Moto Hint 의 경우 기본 볼륨이 상당히 크기 때문에 꼭 작게 조절해야 합니다.
$ pacmd set-sink-volume bluez_sink.1C_96_5A_CF_XX_XX 1    

참고 사이트
[1] https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=87138
[2] https://www.raspberrypi.org/forums/viewtopic.php?p=619713#p619713
[3] http://wiki.openmoko.org/wiki/Manually_using_Bluetooth

댓글 없음: