Raspberry pi

라즈베리파이 음성인식 - 블루투스 스피커 연결

[혜안] 2017. 8. 29. 23:20
728x90

한동안 알리익스프레스에서 주문했던 부품과 상품들이 차례대로 오기 시작하고,

지난 주 마지막으로 온 것이 USB 블루투스 동글이다.


알리익스프레스 사용은 자제해야 겠다.

아이디어와 의욕이 뿜뿜하여 열심히 부품을 주문해 놓고는, 정작 배송이 도착하는 한 달쯤 후에는 이미 의욕은 없어지거나 다른 곳으로 이동한 뒤이기 때문이다.


화웨이의 블루투스 스피커는 오래전에 와 있었고, USB 동글이 오는 동안 하만카돈 스피커의 세계에 빠져있었다.

덕분에 이제 막귀에서 벗어났고, 거실에는 비싼 스피커가 한대 놓여있다.

그리고 참으로 오랜만에 라즈베리파이 콘솔에 로그인 했다.


다시 돌아와서,

마지막으로 도착한 USB 동글은 아래 제품이다.

https://www.aliexpress.com/item/Ugreen-Mini-USB-V-4-0-Bluetooth-Adapter-Dual-Mode-Wireless-Bluetooth-Dongle-CRS-Audio-Receiver/32696756077.html?spm=a2g0s.9042311.0.0.UVQenz




우선 블루투스 스피커와 페어링 해보자.


1. 패키지 설치

라즈베리파이에 라즈비안을 재설치하여 관련 패키지가 사라졌으므로 재설치해야 한다.

$ sudo apt-get update

$ sudo apt-get install bluetooth bluez blueman


2. 페어링 시도

bluetoothctl 을 입력하면 [bluetooth]# 라고 표시되는 콘솔로 들어간다.

bluetooth 콘솔에서 scan on 하면 블루투스 스피커가 검색된다. 물론 최초에는 스피커에서 블루투스 연동 버튼을 눌러주어야 한다.

$ bluetoothctl

[bluetooth]# scan on

Discovery started

[NEW] Device F0:13:C3:63:1B:B7 HUAWEI AM08

페어링을 시도하자.

[bluetooth]# pair F0:13:C3:63:1B:B7

Attempting to pair with F0:13:C3:63:1B:B7

[CHG] Device F0:13:C3:63:1B:B7 Connected: yes
[CHG] Device F0:13:C3:63:1B:B7 UUIDs:
    00001108-0000-1000-8000-00805f9b34fb
    0000110b-0000-1000-8000-00805f9b34fb
    0000110c-0000-1000-8000-00805f9b34fb
    0000110e-0000-1000-8000-00805f9b34fb
    0000111e-0000-1000-8000-00805f9b34fb

[CHG] Device F0:13:C3:63:1B:B7 Paired: yes

Pairing successful

[CHG] Device F0:13:C3:63:1B:B7 Connected: no

페어링 성공.

Trust 기기로 등록하면 이후에 스피커 전원만 켜져도 연결이 자동으로 이루어진다.

[bluetooth]# trust F0:13:C3:63:1B:B7
[CHG] Device F0:13:C3:63:1B:B7 Trusted: yes
Changing F0:13:C3:63:1B:B7 trust succeeded

연결 시도

[bluetooth]# connect F0:13:C3:63:1B:B7
Attempting to connect to F0:13:C3:63:1B:B7
Failed to connect: org.bluez.Error.Failed

연결이 안된다.

생각해보니 전에도 이런 적이 있었다.

syslog를 찾아보면 익숙한 오류메시지가 보인다.

Aug 23 22:09:20 raspberrypi bluetoothd[14098]: a2dp-sink profile connect failed for F0:13:C3:63:1B:B7: Protocol not available

pulseaudio를 설치하자. 설치 완료 후에는 재부팅과 pulseaudio 시작.

$ sudo apt-get install pulseaudio-module-bluetooth

$ sudo reboot
$ pulseaudio --start


다시 페어링 시도

$ bluetoothctl

[NEW] Controller 00:1A:7D:DA:71:11 raspberrypi [default]

[NEW] Device F0:13:C3:63:1B:B7 HUAWEI AM08

[bluetooth]# connect F0:13:C3:63:1B:B7

Attempting to connect to F0:13:C3:63:1B:B7

[CHG] Device F0:13:C3:63:1B:B7 Connected: yes

Connection successful

성공했다.

안되면 재부팅과 pulseaudio 서비스 시작을 다시 해보면 된다.


3. 음성입력 테스트

라즈베리파이로 음성인식으로 하려면 블루투스 스피커와 통화모드로 연결되어 음성입력을 받아야 한다.

그런데 음성입력이 안된다.

분명히 헤드셋 모드가 지원된다.

$ pacmd list

........

    card: 1 <bluez_card.F0_13_C3_63_1B_B7>
    module: 23
    properties:
        bluetooth.protocol = "a2dp_sink"
        device.description = "HUAWEI AM08"
        device.string = "F0:13:C3:63:1B:B7"
        device.api = "bluez"
        device.class = "sound"
        device.bus = "bluetooth"
        device.form_factor = "headset"
        bluez.path = "/org/bluez/hci0/dev_F0_13_C3_63_1B_B7"
        bluez.class = "0x240404"
        bluez.alias = "HUAWEI AM08"
        device.icon_name = "audio-headset-bluetooth"
        device.intended_roles = "phone"
    ports:
        headset-output: Headset (priority 0, latency offset 0 usec, available: unknown)
            properties:
               
    active port: <headset-output>


원인은 pulseaudio의 버전에 있었다.

라지비안 레포지토리에 올라가있는 pulseaudio 최신버전으로는 해결되지 않는다.

$ dpkg -l pulseaudio

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name             Version       Architecture  Description
+++-================-=============-=============-============================
ii  pulseaudio       5.0-13        armhf         PulseAudio sound server

현재 버전을 삭제하고 새로 받는다.

$ sudo apt-get purge pulseaudio

$ sudo nano /etc/apt/sources.list

deb http://ftp.debian.org/debian jessie-backports main

$ gpg --keyserver pgpkeys.mit.edu --recv-key 8B48AD6246925553

$ gpg --keyserver pgpkeys.mit.edu --recv-key 7638D0442B90D010

$ gpg -a --export 8B48AD6246925553 | sudo apt-key add --

$ gpg -a --export 7638D0442B90D010 | sudo apt-key add --

$ sudo apt-get update

$ sudo apt-get -t jessie-backports install pulseaudio pulseaudio-module-bluetooth

버전을 확인해보면 7.1로 올라가 있다.

$ dpkg -l pulseaudio pulseaudio-module-bluetooth

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name             Version       Architecture  Description
+++-================-=============-=============-======================================
ii  pulseaudio       7.1-2~bpo8+1  armhf         PulseAudio sound server
ii  pulseaudio-modul 7.1-2~bpo8+1  armhf         Bluetooth module for PulseAudio sound 

$ sudo reboot

$ pulseaudio --start


다시 음성입력 테스트

$ parecord -v voice.wav

----테스트 녹음 후 Ctrl-C----

$ paplay -v voice.wav


ADC가 없는 라즈베리파이에서 블루투스 스피커로 음성입력까지는 성공이다.


728x90