[JAVA] Construisez Amazon Alexa à moindre coût avec le haut-parleur Bluetooth Raspberry Pi 3B + (1. faites d'abord un son)

Grand objectif

Quand j'ai finalement acheté Amazon Echo et l'ai essayé, j'ai ressenti une innovation technologique. Après tout, une fille de 28 ans a dit "Prenons Alexa" sans regarder les instructions, et la conversation a été établie. Eh bien, je veux en acheter deux, mais je n'ai pas reçu d'invitation d'Amazon. J'ai un Raspberry Pi à portée de main.

Il y a une main dans un tel cas. Comment transformer Raspberry Pi en Amazon Echo. Amazon distribue gratuitement AVS (Amazon Voice Service) pour les développeurs, et Alexa (voix d'Amazon Echo) y est incluse. Je veux le déplacer d'une manière ou d'une autre.

À partir de maintenant, j'achèterai le matériel nécessaire au prix le plus bas possible dans la situation où seul Raspberry Pi 3B est disponible, et viserai à démarrer Alexa équivalent à Echo.

Vous trouverez ci-dessous un article sur les pionniers de la création d'Echo avec Raspberry Pi.

https://qiita.com/bwtakacy/items/32226ed2406b5ebe1984

Ce chapitre: Tout d'abord, le haut-parleur n'émet aucun son. .. .. J'ai réussi à me connecter avec Bluetooth.

Raspeye a une sortie analogique pour le haut-parleur, il est donc assez bon d'en faire un son. (Apt-get install mpg321 pour lire des mp3) Cette fois, je souhaite émettre du son à partir du haut-parleur sans fil. Sinon, vous n'entendrez ni la voix ni la chanson d'Alexa. (Chanson: http://www.itmedia.co.jp/news/articles/1712/19/news097.html)

Article acheté

Il semble qu'il puisse être utilisé dans le bain.

image.png

Produit existant

Première préparation

Raspberry Pi à jour

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

Faire un son de la tarte à la râpe

Il semble qu'un démon appelé PulseAudio doit être en cours d'exécution pour émettre des sons à partir de la tarte aux râpes.

sudo apt-get install pulseaudio pavucontrol
pulseaudio -D

Vous devriez maintenant entendre le son de la sortie analogique en premier. Par exemple, j'ai un fichier mp3 sous la main

mpg321 Chicken.mp3

Si tel est le cas, Par exemple, Chicken Attack sera également jouable.

Connectez le haut-parleur sans fil à la tarte à la râpe

Activez le haut-parleur sans fil. Tout d'abord, associez-le en Bluetooth. Les détails sont décrits dans l'article suivant.

https://qiita.com/Sam/items/5169d9f060aa31080b77

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

Le service crée le fichier suivant et

[Unit]
Description=Pulse Audio

[Service]
Type=simple
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm

[Install]
WantedBy=multi-user.target

Démarrez le démon avec la commande suivante et configurez-le pour qu'il démarre automatiquement.

$ sudo systemctl start pulseaudio.service
$ sudo systemctl status pulseaudio.service
$ sudo systemctl enable pulseaudio.service

Faire du son à partir d'un haut-parleur sans fil

Selon l'article ci-dessous, il est nécessaire de définir Bluetooth comme destination de sortie du démon pulseaudio.

http://zokibayashi.hatenablog.com/entry/2017/10/10/020902

Ajoutez ce qui suit à la fin.

/etc/pulse/system.pa


<Omission>

### 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

Définissez la destination du transfert dans /etc/dbus-1/system.d/pulseaudio-bluetooth.conf. Bluez est une implémentation du protocole de transfert Bluetooth.

http://www.silex.jp/blog/wireless/2012/12/bluetooth4.html

/etc/dbus-1/system.d/pulseaudio-bluetooth.conf


  <policy user="pulse">
    <!--Commentez ici
    <allow own="org.pulseaudio.Server"/>
Fin du commentaire-->
    <allow send_destination="org.bluez"/>
  </policy>

Redémarrez le système.

sudo reboot

S'il n'y a pas de son, vous n'aurez peut-être pas accès au transfert avec impulsion. Donnez les droits d'accès ci-dessous.

sudo usermod -a -G pulse-access,audio pi(Ceci est le nom d'utilisateur)

(2018/1/3 postscript) Paramètre Java pour permettre à Alexa de parler correctement à partir du haut-parleur Bluetooth plus tard

Plus tard, j'exécute l'application exemple Alexa, mais pour une raison quelconque, elle ne produit que du son à partir de la sortie analogique. Pour cette raison, à la suite de diverses investigations, je me suis restreint au paramètre lié à Java selon lequel le son ne sonne pas uniquement à partir de l'application Java (autre son mpg321 et ʻaplay`), et j'ai trouvé l'article suivant et j'ai réussi Je comprends comment faire une voix. https://stackoverflow.com/questions/45847635/java-audio-clip-cannot-be-closed-when-using-linux-pulseaudio

C'est un peu déroutant, mais il semble que vous deviez transférer via la route Alsa Userland → Pulse Audio → Haut-parleur Bluetooth. Maintenant, pour cela, éditez le fichier suivant avec sudo et ajoutez les 4 lignes suivantes.

/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

Suivant

Maintenant que le haut-parleur produit du son, je vais connecter un microphone pour qu'il puisse être contrôlé par la voix.

Recommended Posts

Construisez Amazon Alexa à moindre coût avec le haut-parleur Bluetooth Raspberry Pi 3B + (1. faites d'abord un son)
Construisez Amazon Alexa à moindre coût avec Raspberry Pi 3B + haut-parleur Bluetooth (3 installation Alexa Voice Service)
Je n'ai pas pu installer docker avec raspberry pi2 b +.