0
1

VOICEVOXを利用したDiscord用のTTS(読み上げ)Botを作った

Last updated at Posted at 2024-01-14

※書きかけにつきちょこちょこ追記するかも
下記記事の続きといえば続き
https://qiita.com/kmatsumoto630823/items/e9d078fd9654e84efa83

モチベーション

とあるソシャゲのDiscord用サーバー(ギルド)に提供しているTTS(読み上げ)Bot
Javascriptの勉強がてらギルドメンバーを実験台に開発をしています

類似のサービスや公開されているコードもあるのですが、いろいろ自由にやってみたかったので独自に作りました

TTS Botって?VOICEVOXって?

TTSはText To Speech、つまりテキストから音声に合成する処理のことです
TTS Botはテキストチャンネルの書き込みを音声に合成してボイスチャネルで再生します
これにより、喋らない人でもBotに代わりに喋らせることでボイスチャットに参加できます

VOICEVOXはヒホ氏によって開発されたオープンソースの音声合成ソフトウェアです
https://github.com/VOICEVOX/
音声合成にDeepLearning技術を用いており、人間に近い自然な読み上げを実現します。
また、音声合成のエンジンがWeb APIで実装されているので他のシステムへの組み込みも容易です。

特徴

  • 単一のBotで複数のサーバー(ギルド)に招待可
  • メンバーごとに話者の設定可(速度・ピッチの調整も可)
  • VOICEVOX互換のAPIなら複数のエンジンを同時使用可
  • カスタムスタンプにも対応した辞書機能
  • リアクションスタンプの読み上げ(実験台共からうるさいと不評・・・無効化は可能)
  • 設定の保管はjsonファイル(そのうちちゃんとしたい)

動作イメージ

image.png

スラッシュコマンド

/connect
 ・・・zBotを接続します
/list
 ・・・話者IDの一覧を表示します
/speaker
 ・・・話者を変更します
/random
 ・・・話者をランダムに変更します
/dict
 ・・・単語または絵文字の読みを辞書登録します
/reaction
 ・・・リアクションスタンプ読み上げの有効・無効を切り替えます
/export
 ・・・zBotの設定をエクスポートします
/disconnect
 ・・・zBotを切断します
/help
 ・・・ヘルプを表示します

公開場所

※名称が某マルウェアと同じなので改名を検討してますがひとまずこのままで
※zBotのzはずんだもんのz
https://github.com/kmatsumoto630823/zbot

補足

複数のサーバー(ギルド)でも動作するように設計してますが、基本的にはサーバーごとにBotを用意してください
VOICEVOXエンジン側は大量のリクエストを想定していないので、パブリックに公開する用途で使う場合は冗長化するなりLB挟むなりして各自対策してください

VOICEVOXエンジンはデフォルトではローカルからのリクエストしか受け付けていません
BotスクリプトとVOICEVOXエンジンを別サーバーで動作させる場合はVOICEVOX側の起動オプションや通信経路を工夫してください
※私はNGINX置いてそこからVOICEVOXにリクエストを流してます

最後に

何分、私は趣味プログラマーなので我流かつ稚拙な部分が多々あると思います
もっとこうゆう風に書いたほうが良いよとかありましたらご指摘いただければうれしいです

また、2024年はNPUの普及が楽しみです
IntelもAMDのCPUもNPUを搭載したものが出てきています
DirectMLには対応するようなのでお手軽にアクセラレーションする環境が整うとよいですね!

参考

コードをパクることまではしてませんが、ちょこちょこ参考にさせてもらいました

KuronekoServer 様
https://github.com/KuronekoServer

y-chan 様
https://github.com/y-chan/voicevox_discord_tts_bot

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1