😎

Raspberry Pi と VOICEVOX で Discord の読み上げBotを作ってみる

に公開

今回の記事は、Macでの作業となりますのでご留意ください。

利用製品

  • Raspberry Pi4 ModelB 4GB(技適対応品)
  • microSDカード
  • ケース

Raspberry Pi 初期設定編

1. OSのダウンロード

今回はVOICEVOXを使うため、64BitのOSが必要です。
Raspberry Pi OS (64-bit)

なるべく軽量なものが良かったため、今回は Raspberry Pi OS Liteを利用することにしました。

Raspberry Pi OS Lite
Release date: November 19th 2024
System: 64-bit
Kernel version: 6.6
Debian version: 12 (bookworm)
Size: 438MB
Show SHA256 file integrity hash: 6ac3a10a1f144c7e9d1f8e568d75ca809288280a593eb6ca053e49b539f465a4

2. microSDカードに書き込み

  1. diskutil listコマンドで、マウントの確認
  2. diskutil unMountDisk /dev/disk10コマンドで、フォーマット前にアンマウント
  3. diskutil eraseDisk MS-DOS [デバイス名] /dev/disk10コマンドで、フォーマットを実行
  4. diskutil unMountDisk /dev/disk10コマンドで、OSを書き込む前にアンマウント
  5. sudo dd if=./2024-11-19-raspios-bookworm-arm64-lite.img of=/dev/rdisk10 bs=1mコマンドで、OSを書き込む

OSの書き込みが完了したら、microSDカードをRaspberry Piに挿入して電源をON!

参考
https://qiita.com/shippokun/items/9070fc58f69d8c063e44#2-microsdカードに書き込み

3. OSの初期設定

sudo raspi-configコマンドを実行するとTUIが立ち上がるので、下記の設定を行います。

  1. SSHの有効化
  2. Wi-FIの設定

4. 無線LANのIP固定化

IPアドレスは各自の環境に合わせて変更してください。

  1. 下記のファイルを開く

    sudo vi /etc/NetworkManager/system-connections/<SSID>.nmconnection
    
  2. [ipv4]セクションが以下のようになっているため、適宜書き換えます。

    [ipv4]
    method=auto
    

    下記に書き換える

    [ipv4]
    method=manual
    address1=192.168.10.50/24,192.168.10.1
    dns=8.8.8.8;
    

参考

https://raspida.com/nmcli-static-ipaddress/

Discord Bot 作成編

下記のサイトからBotを作成します。

https://discord.com/developers/applications/

Raspberry Pi に VOICEVOX の導入

Raspberry Pi に VOICEVOXを導入する場合に、voicevox_coreでの構築記事は見かけたのですが、voicevox_engineでの構築記事は見当たらなかったので後者で構築。
voicevox_corevoicevox_engineの違いですが、voicevox_enginevoicevox_coreをラップした形になっており、若干重くはなりますが、そのぶん使いやすくなっています。

詳細は公式の全体構成が参考になります。

voicevox_engineのLinux(CPU/arm64版)版のリリースは、2025年2月28日と意外と最近です。
https://github.com/VOICEVOX/voicevox_engine/releases/tag/0.23.0

  1. 公式からファイルをダウンロード

    wget https://github.com/VOICEVOX/voicevox_engine/releases/download/0.23.0/voicevox_engine-linux-cpu-arm64-0.23.0.7z.001
    
  2. 解凍

    7z x voicevox_engine-linux-cpu-arm64-0.23.0.7z.001
    
  3. 実行

    解凍したディレクトリに移動して下記を実行
    サーバーが起動するので、APIを利用して音声を生成できます。

    ./run
    

Raspberry Pi で Discordに投稿されたチャットの読み上げ

  1. 読み上げに必要なライブラリをインストール

    sudo apt update
    sudo apt install ffmpeg
    
  2. python 仮想環境の準備

    python3 -m venv botenv
    source botenv/bin/activate
    
  3. pythonのライブラリ導入

    pip install -U "discord.py[voice]" requests
    
  4. Discordに投稿されたチャットの読み上げるスクリプトの作成

    環境に応じたカスタマイズを行えば良いかと思います。

https://gist.github.com/ynug/965b039b973079383979a6bfe27d153e

システム起動時に起動するように設定

システム起動時と再起動時に自動起動するようにsystemdサービスファイルを作成して登録する。

voicevox_engine

sudo vi /etc/systemd/system/voicevoxengine.service
[Unit]
Description=voicevox engine
After=network.target

[Service]
User=pi
WorkingDirectory=/home/pi/voicevox_engine-0.23.0
ExecStart=/home/pi/voicevox_engine-0.23.0/run
Restart=always

[Install]
WantedBy=multi-user.target

Discord読み上げスクリプト

sudo vi /etc/systemd/system/discordbot.service
[Unit]
Description=Discord VoiceBot
After=network.target

[Service]
User=pi
WorkingDirectory=/home/pi/discord_bot
ExecStart=/home/pi/discord_bot/botenv/bin/python /home/pi/discord_bot/main.py
Restart=always

[Install]
WantedBy=multi-user.target

登録と有効化

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable voicevoxengine.service
sudo systemctl start voicevoxengine.service
sudo systemctl enable discordbot.service
sudo systemctl start discordbot.service

さいごに

Raspberry Pi4 ModelB 4GBのスペックでは音声の生成にかなり時間がかかります。
例えば、今日もご飯が食べたいな〜という文章の読み上げ音声を生成するのに17秒かかる。

読み上げ用のチャットは、週1くらいの投稿頻度で即応性も必要ないので、投稿してから20秒後に読み上げられても問題ないと思う。

Raspberry Pi4 ModelB 4GB程度のサイズで、高性能なデバイスがあると嬉しいところです。

Discussion