ラズパイ3にOpenJTalk インストール

ラズパイ3にOpenJTalk インストール

ラズパイ3に喋らせるため
OpenJTalk をインストール

「ラズパイ、音楽かけて」でRaspberry Piにmp3を再生させる


【Raspberry Pi】指定時間にゴミの収集日を音声でお知らせする方法[Open Jtalk+cron]

を参考に

sudo apt-get update

でリポジトリ更新

sudo apt-get install -y open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001

これでインストールして

MMDagent で女性音声の追加

wget --no-check-certificate https://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.7/MMDAgent_Example-1.7.zip

wget –no-check-certificate
とすると
SSLのついたサイトへアクセスできる

wgetでこういう時はこうする!!

にオプションについて載っているので参考に

unzip MMDAgent_Example-1.7.zip

で解凍

sudo cp -R ./MMDAgent_Example-1.7/Voice/mei /usr/share/hts-voice/

cp コマンドの -R オプションを調べてみる

意味は
コピー元にディレクトリを指定した場合
再帰的に(サブディレクトリも含めて)コピーする

【 cp 】コマンド――ファイルをコピーする

を参考に

あとはテスト

echo "はじめまして、ラズベリーパイです" | \
open_jtalk -m /usr/share/hts-voice/mei/mei_normal.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow voice.wav 

で音声ファイルを作成し

sudo bluetoothctl 
connect 6C:56:97:3A:52:98

を実行し Amazon Echo へ接続

ctrl + d で抜けて

aplay -D bluealsa voice.wav

で喋らせる

これで
はじめまして、ラズベリーパイです
と Amazon Echo から声がでる

もしくは

vim jtalk.sh 

を作成

#!/bin/bash
tempfile=`tempfile`
option="-m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-r 0.7 \
-ow $tempfile"
echo "$1" | open_jtalk $option
#aplay -q $tempfile
aplay  -D bluealsa $tempfile
rm $tempfile

として保存

./jtalk.sh "こんにちは。音声テストです。"

というように
スクリプトの後に”” で囲んでテキストを入力し
それを喋らせる

もともとは
-q オプションででメッセージを表示しないようにする予定だが
音声がでないため
-D オプションで bluealsa を指定するようにしたら
男性の声で
こんにちは。音声テストです
と音声がでるようになった

aplay のオプションについては
aplayのヘルプ/オプション

を参考に

また OpenJTalk のオプションで
-r オプションによりしゃべる速度をコントロールできる

-r 0.7
だとちょっとゆっくりになる

OpenJTalk のオプションについては
Ubuntu Open JTalk その2 – open_jtalkコマンドの説明

を参考に

よく使うものとしては
-m で音声データ指定

-ow で保存するwavファイルの指定

あと
テキストファイルを用意して
OpenJTalk で音声ファイルを作成し
aplay で再生することもできる

vim test.txt

でファイルを作成

今日の予定はイオンで買い物

というように適当に入力し保存

open_jtalk  -m /usr/share/hts-voice/mei/mei_normal.htsvoice -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow text.wav test.txt

で音声ファイルを作成

aplay -D bluealsa text.wav

とすれば
今日の予定はイオンで買い物
と音声がでる

テキストの音声変換に関しては
テキストを音声データに変換してロボットに喋らせる。

も参考に

ラズパイ3に pyaudio インストール

ラズパイ3に pyaudio インストール

sudo pip install pyaudio

を実行すると

Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting pyaudio
  Downloading https://files.pythonhosted.org/packages/ab/42/b4f04721c5c5bfc196ce156b3c768998ef8c0ae3654ed29ea5020c749a6b/PyAudio-0.2.11.tar.gz
Building wheels for collected packages: pyaudio
  Running setup.py bdist_wheel for pyaudio ... error
  Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-q8X_DO/pyaudio/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-DpglbX --python-tag cp27:
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-armv7l-2.7
  copying src/pyaudio.py -> build/lib.linux-armv7l-2.7
  running build_ext
  building '_portaudio' extension
  creating build/temp.linux-armv7l-2.7
  creating build/temp.linux-armv7l-2.7/src
  arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-InigCj/python2.7-2.7.16=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/python2.7 -c src/_portaudiomodule.c -o build/temp.linux-armv7l-2.7/src/_portaudiomodule.o
  src/_portaudiomodule.c:29:10: fatal error: portaudio.h: そのようなファイルやディレクトリはありません
   #include "portaudio.h"
            ^~~~~~~~~~~~~
  compilation terminated.
  error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
  
  ----------------------------------------
  Failed building wheel for pyaudio
  Running setup.py clean for pyaudio
Failed to build pyaudio
Installing collected packages: pyaudio
  Running setup.py install for pyaudio ... error
    Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-q8X_DO/pyaudio/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-POjPm0/install-record.txt --single-version-externally-managed --compile:
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-armv7l-2.7
    copying src/pyaudio.py -> build/lib.linux-armv7l-2.7
    running build_ext
    building '_portaudio' extension
    creating build/temp.linux-armv7l-2.7
    creating build/temp.linux-armv7l-2.7/src
    arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-InigCj/python2.7-2.7.16=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/python2.7 -c src/_portaudiomodule.c -o build/temp.linux-armv7l-2.7/src/_portaudiomodule.o
    src/_portaudiomodule.c:29:10: fatal error: portaudio.h: そのようなファイルやディレクトリはありません
     #include "portaudio.h"
              ^~~~~~~~~~~~~
    compilation terminated.
    error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
    
    ----------------------------------------
Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-q8X_DO/pyaudio/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-POjPm0/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-q8X_DO/pyaudio/

というエラーがでる

CentOSにPyenvをインストールしてPython3の開発環境を構築する

を参考に

pip list

を実行すると

Package    Version
---------- -------
pip        18.1   
setuptools 40.6.2 
You are using pip version 18.1, however version 20.2b1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

となり
バージョンが古いらしい

pip install --upgrade pip

でアップデート

再度実行してもエラーになるので

sudo python --version

としたら

Python 2.7.16

となっていたので

 sudo pyenv global 3.6.10

としたところ

sudo: pyenv: コマンドが見つかりません

となってしまうので

PyenvによるPython3.x環境構築(CentOS, Ubuntu)

を参考に

sudo visudo

でファイルを編集する

なお nano エディタで操作することになるので
使い方に関しては
GNU nanoを使いこなす

を参考に

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

の部分を

#Defaults       secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults        env_keep += "PATH"
Defaults        env_keep += "PYENV_ROOT"

として
ctrl + s で上書き保存し
ctrl + x で終了

これで

sudo pyenv global 3.6.10

とすれば

sudo python --version

を実行したときに

Python 3.6.10

と変更されるようになった

次に

sudo pip install pyaudio

を実行してみたが

Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting pyaudio
  Downloading PyAudio-0.2.11.tar.gz (37 kB)
Using legacy setup.py install for pyaudio, since package 'wheel' is not installed.
Installing collected packages: pyaudio
    Running setup.py install for pyaudio ... error
    ERROR: Command errored out with exit status 1:
     command: /home/pi/.pyenv/versions/3.6.10/bin/python3.6 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-_p6von58/pyaudio/setup.py'"'"'; __file__='"'"'/tmp/pip-install-_p6von58/pyaudio/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-eikj46h2/install-record.txt --single-version-externally-managed --compile --install-headers /home/pi/.pyenv/versions/3.6.10/include/python3.6m/pyaudio
         cwd: /tmp/pip-install-_p6von58/pyaudio/
    Complete output (16 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-armv7l-3.6
    copying src/pyaudio.py -> build/lib.linux-armv7l-3.6
    running build_ext
    building '_portaudio' extension
    creating build/temp.linux-armv7l-3.6
    creating build/temp.linux-armv7l-3.6/src
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/home/pi/.pyenv/versions/3.6.10/include/python3.6m -c src/_portaudiomodule.c -o build/temp.linux-armv7l-3.6/src/_portaudiomodule.o
    src/_portaudiomodule.c:29:10: fatal error: portaudio.h: そのようなファイルやディレクトリはありません
     #include "portaudio.h"
              ^~~~~~~~~~~~~
    compilation terminated.
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /home/pi/.pyenv/versions/3.6.10/bin/python3.6 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-_p6von58/pyaudio/setup.py'"'"'; __file__='"'"'/tmp/pip-install-_p6von58/pyaudio/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-eikj46h2/install-record.txt --single-version-externally-managed --compile --install-headers /home/pi/.pyenv/versions/3.6.10/include/python3.6m/pyaudio Check the logs for full command output.

となってしまう

このため

Pip install PyAudio

を参考に

sudo apt-get install python-dev portaudio19-dev

でパッケージをインストールし

sudo pip install pyaudio

でインストール

sudo bluetoothctl 
connect 6C:56:97:3A:52:98

を実行し Amazon Echo へ接続

ctrl + d で抜けて

vim test.py

でファイルを作成

import wave
import pyaudio

def play(wav_file):

    try:
        wf = wave.open(wav_file, "rb")

    except FileNotFoundError:
        print("No such file " + wav_file)
        return

    p = pyaudio.PyAudio()

    ## Bluetoothスピーカーの情報を取得
    for device_index in range(p.get_device_count()):
        device = p.get_device_info_by_index(device_index)
        if device["name"] == "bluealsa":
            bluetooth_device = device_index

    ## Bluetoothスピーカーを指定してストリームオープン
    stream = p.open(
        format=p.get_format_from_width(wf.getsampwidth()),
        channels=wf.getnchannels(),
        rate=wf.getframerate(),
        output=True,
        output_device_index=bluetooth_device
    )

    # 再生
    chunk_size = 1024
    data = wf.readframes(chunk_size)

    while len(data) > 0:
        stream.write(data)
        data = wf.readframes(chunk_size)

    stream.stop_stream()
    stream.close()
    p.terminate()


if __name__ == "__main__":

    play("/usr/share/sounds/alsa/Front_Center.wav")

として保存

音声再生サンプルコードは
Amazon EchoをRaspberry PiのBluetoothスピーカーとして利用する

のものを使わせていただきました

あとは

python test.py 

を実行し
Amazon Echo から
フロント センター
と聞こえれば
python による音声出力ができることが確認できる

ラズパイ3へ pyenv インストール

ラズパイ3へ pyenv インストール

Raspberry PiにpyenvをインストールしてPythonをバージョン管理

を参考に
pyenv をインストール

これができれば
Amazon EchoをRaspberry PiのBluetoothスピーカーとして利用する

を参考に
pyaudioモジュールを使うことで
Pythonで Amazon Echo に音声出力できる

なお、コマンドの実行結果が最新OSの場合異なっている

uname -a

結果

Linux raspberrypi 4.19.118-v7+ #1311 SMP Mon Apr 27 14:21:24 BST 2020 armv7l GNU/Linux
lsb_release -a

結果

No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 10 (buster)
Release:	10
Codename:	buster

lsb_release コマンドは
ディストーションのバージョンを確認するコマンド

詳しくは
ディストリビューションのバージョンなどを確認する・lsb_releaseコマンド †

を参考に

まず必要なパッケージのインストール

sudo apt update
sudo apt upgrade
sudo apt install -y git openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev

次に Github から pyenv を取得

git clone https://github.com/yyuu/pyenv.git ~/.pyenv

次にパスを通す

sudo vim ~/.bash_profile

でファイルを作成し開く

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

を追記して保存

設定反映のため

source ~/.bash_profile

で再読み込み

bashrc と bash_profile の違いについては
.bash_profileと.bashrcのまとめ

を参考に

.bash_profile
ログイン時に実行される
環境変数を設定

.bashrc
シェル起動時に実行される
エイリアス
シェル関数
コマンドラインの補完
を設定

なお
source コマンドは
ファイルに書かれた内容を実行するコマンド

これについては
Linux — source コマンドは何をしているのか > 実は環境をリロードするためのものではない

を参考に

pyenv のインストールができているなら

pyenv --version

でバージョンを表示できる

今回は

pyenv 1.2.18-19-gcf81e5a0

という結果になった

pyenv install --list

でインストールできるバージョンの一覧が表示される

今回は 3.6.10をインストール

これは
Amazon EchoをRaspberry PiのBluetoothスピーカーとして利用する

で使用しているバージョンが 3.6.10
であるのと
pyaudio モジュールが3.7 でインストールできない可能性があるため

現状だと

python --version

の結果が

Python 2.7.16
python3 --version

の結果が

Python 3.7.3

となっている

pyenv install 3.6.10

でインストール

pyenv global 3.6.10

でバージョンを変更

もし元に戻したいのなら

pyenv global system

とすればOK

ラズパイ3B+マイクとスピーカー設定その2

ラズパイ3B+マイクとスピーカー設定その2

Amazon echo Dot をスピーカーに設定できたので
次にマイクの設定

今回は以前購入したものを利用

ラズパイ3にはマイクを差し込むところがないため
USBオーディオ変換アダプタを使用

なお mic 側にマイクを差し込まないと認識しなかった

USBで接続したら

arecord -l

を実行

**** ハードウェアデバイス CAPTURE のリスト ****
カード 1: Device [USB PnP Sound Device], デバイス 0: USB Audio [USB Audio]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0

となり
このときのサブデバイス番号を覚えておく

arecord -D plughw:1 myvoice.wav

で録音開始

ctrl + c を押すまで録音される

^Cシグナル 割り込み で中断...
arecord: pcm_read:2145: 読込エラー: システムコール割り込み

となるが録音はされる

次に

aplay -D bluealsa myvoice.wav

を実行すれば録音した声が聞こえる

ただし、今回利用したパーツだとノイズが入っている