Raspberry Pi 3B + Bluetooth 스피커로 Amazon Alexa를 싸게 구축 (1 우선 소리를 낸다)

큰 목적



Amazon Echo를 마침내 구입할 수 있고 시험해 보면 역시 기술 혁신을 느꼈습니다.
뭐니뭐니해도 자신보다 -28세의 딸이 설명서도 보지 않고 "Alexa를 잡자"라고 말해 대화가 성립하고 있다.
그런데, 2대 사고 싶지만 아마존으로부터 초대가 오지 않는 것입니다. 손에 RaspberryPi가 있습니다.

그럴 때 손이 있습니다. Raspberry Pi를 Amazon Echo로 만드는 손이.
Amazon은 개발자용으로 AVS(Amazon Voice Service)를 무료 배포하고 있으며, 그 안에 Alexa(Amazon Echo의 목소리)가 들어 있다는 것. 어떻게든 움직이고 싶다.

지금부터 Raspberry Pi 3B만의 상황에서 필요한 하드웨어를 가능한 한 저렴한 가격으로 사서 Echo 상당의 Alexa 시동을 목표로 합니다.

Raspberry Pi로 Echo를 만드는 선구자의 기사는 아래와 같다.

이 장: 우선 스피커가 울리지 않는다. . . 블루투스로 무려 가다랭이.



라즈파이에는 스피커용 아날로그 출력이 있으므로 거기에서 소리를 내는 것은 어떻게 든 됩니다.
(mp3을 재생하려면 apt-get install mpg321)
이번에는 어떻게든 무선 스피커에서 소리를 내고 싶다. 그렇지 않으면 Alexa의 목소리도 노래도들을 수 없다.
(노래 : h tp // w w. 아니. 이. jp / 네 ws / archi c ㎇ s / 1712/19 / 네 ws097. HTML)

구매품


  • Bluetooth 무선 스피커 1400엔

  • 목욕에서도 잡을 것 같습니다.



    기존품


  • Raspberry Pi 3B

  • 우선 준비



    Raspberry Pi 최신


    # sudo apt-get dist-upgrade
    # sudo rpi-update
    

    라즈파이에서 소리를 낸다



    라즈파이에서 소리를 울리려면 PulseAudio라는 데몬이 움직일 필요가 있다고합니다.
    sudo apt-get install pulseaudio pavucontrol
    pulseaudio -D
    

    이것으로 우선 아날로그 출력에서는 소리가 울릴 것입니다.
    예를 들어 mp3 파일이 손에
    mpg321 Chicken.mp3
    

    그렇다면 예를 들면 치킨 어택도 재생할 수 있습니다.

    무선 스피커를 라즈파이에 연결



    무선 스피커를 시작합니다.
    우선은 Bluetooth로서 페어링. 아래 기사에 자세한 내용이 적혀 있습니다.
    sudo apt-get install pi-bluetooth blueman pulseaudio-module-bluetooth
    
    pi@raspberrypi:~ $ bluetoothctl
    [bluetooth]# power on
    Changing power on succeeded
    [bluetooth]# agent on
    Agent registered
    [bluetooth]# scan on
    Discovery started
    [NEW] Device 30:21:18:71:23:51 Q50
    
    [bluetooth]# pair 30:21:18:71:23:51
    [CHG] Device 30:21:18:71:23:51 Paired: yes
    Pairing successful
    [bluetooth]# trust 30:21:18:71:23:51
    [CHG] Device 30:21:18:71:23:51 Trusted: yes
    [bluetooth]# connect 30:21:18:71:23:51
    Attempting to connect to 30:21:18:71:23:51
    [CHG] Device 30:21:18:71:23:51 Connected: yes
    Connection successful
    

    서비스는 다음 파일을 작성하고,
    [Unit]
    Description=Pulse Audio
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm
    
    [Install]
    WantedBy=multi-user.target
    

    아래 명령으로 데몬을 시작하고 자동 시작 설정을 추가합니다.
    $ sudo systemctl start pulseaudio.service
    $ sudo systemctl status pulseaudio.service
    $ sudo systemctl enable pulseaudio.service
    

    무선 스피커에서 소리 내기



    아래의 기사에 의하면, pulseaudio 데몬의 출력처에 bluetooth를 설정할 필요가 있다고 합니다.

    아래를 끝에 추가합니다.

    /etc/pulse/system.pa
    <前略>
    
    ### Automatically load driver modules for Bluetooth hardware
    .ifexists module-bluetooth-policy.so
    load-module module-bluetooth-policy
    .endif
    
    .ifexists module-bluetooth-discover.so
    load-module module-bluetooth-discover
    .endif
    

    /etc/dbus-1/system.d/pulseaudio-bluetooth.conf에 전송처 설정을 합니다. Bluez라는 것이 Bluetooth 전송 프로토콜 구현이라고 합니다.


    /etc/dbus-1/system.d/pulseaudio-bluetooth.conf
      <policy user="pulse">
        <!-- ここをコメントアウト
        <allow own="org.pulseaudio.Server"/>
         コメントアウト終わり -->
        <allow send_destination="org.bluez"/>
      </policy>
    

    시스템을 재부팅.
    sudo reboot
    

    만약 소리가 울리지 않으면 pulse에서의 전송 액세스권이 없는 것일지도. 아래에서 액세스 권한을 부여합니다.
    sudo usermod -a -G pulse-access,audio pi(ここはユーザ名)
    

    (2018/1/3 추가) 나중에 Alexa를 제대로 bluetooth 스피커에서 말하기위한 Java 설정



    나중에 Alexa 샘플 앱을 실행하지만 왠지 아날로그 출력에서만 소리를냅니다.
    이 이유, 여러가지 조사하고 있던 결과, Java 어플리로부터만 소리가 울리지 않는다(다른 mpg321 음성을 내는 방법을 알았습니다.
    h tps : // s c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 45847635 / 쟈 ゔ ぁ ぢ ぢ ぃ ぃ아오

    조금 혼란 스럽지만 Alsa 사용자 랜드 → PulseAudio → Bluetooth 스피커라는 경로로 전송해야한다고합니다.
    그런데 이를 위해 aplay 에서 아래 파일을 편집하고 아래 4 줄을 추가합니다.

    /usr/lib/jvm/java-8-oracle/jre/lib/sound.properties
    javax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider
    javax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider
    javax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider
    javax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider
    

    이 다음



    스피커에서 소리가 들리므로, 다음은 음성으로 제어할 수 있도록 마이크를 붙입니다.

    좋은 웹페이지 즐겨찾기