discordのテキストチャンネルに投稿された文章をボイスチャンネルで読み上げてくれるbotを開発した。
名前はyomi-KAIだ。
自分のPC上で実行できるため、他の公開されている読み上げbotと比べて負荷が集中しにくく、安定して動作するのが特徴だ。
絶賛更新中で、ダウンロードはこちらから。
とりあえず試してみたい方はここから試すことができる。
また、このbotを作る過程でとても役に立ったVSCodeの拡張機能を紹介している記事もある。
開発しようと思ったきっかけ
巷には多くのdiscord読み上げbotが存在する。
しかし、ゴールデンタイムには遅延が発生したり、そもそもサービスが停止してしまうことも少なくない。
自分が困っていることは他の人も同様だろうと思い、ローカルで動く読み上げbotを作成しようと決意した。
また、この頃は受験生であり、「成果物ができれば推薦入試で有利なのではないか?」という気持ちもあった。
開発言語・フレームワーク
Pythonとdiscord.pyを使用した。
discord.pyは一時期開発中止となってしまっていたが、再開してくれて本当に良かった。
ソースコードはGitHubを参照してほしい。
音声合成
v2では音声合成にGoogle Cloud Text-to-Speechを採用している。
天下のGoogle様が提供していることもあり、音声合成の品質自体はまあまあ良く、応答時間もは非常に早い。
しかしながら、たまには読み間違いをしてしまうこともあるため、より精度の高い音声合成サービスを探りたい。
v1ではReadSpeaker VoiceText Web APIを使用していた。
これはタイムラグが比較的大きく、漢字や簡単な英単語も読めないため、v2では初期設定での採用を見送った。
例としてはswordが読めない。もちろん「ソード」と読んでほしいのだが、なんと「すべた」と読んでしまうのである。
しかし、残してほしいという強い要望があり、v2では音声合成サービスの変更をできるようにしたため、こちらも使用自体は可能である。(2023/06/27追記。現在は新規登録が終了しているため、v3では削除予定。)
音声合成サービスの変更
discord.pyのv2から、プルダウンメニューなどのリッチなUIが使用できるようになった。
このbotでは音声合成サービスの変更にこの機能を使用している。
読み上げる文章の前処理
読み上げbotで特に重要なのは、読み上げる文章の前処理である。
メッセージを受け取ってから実際に音声合成APIに渡すまでに多くの前処理を行う。
- 辞書置換
- ユーザーに登録された辞書通りに入力された文字列を置換する。
- 約束された勝利の剣 → エクスカリバー
- URL置換
- URLをわざわざ「エイチティーティーピー(以下略)」と読んでもらっては困るため置換する。
- https://www.example.com → URL
- ネタバレ置換
- discordにはスポイラー機能があるが、読み上げbotはそのまま読み上げてしまうため置換する。
- ||hoge|| → ネタバレ
- メンション置換
- ユーザーメンションは内部idで管理されているため置換する。
- <@123456789> → アット hoge
- サーバー絵文字置換
- サーバー独自の絵文字も内部idで管理されているため置換する。
- <:hoge:123456789> → hoge
- *hoge*置換
- *hoge*で強調を表すが、アスタリスクと読んでほしくないため置換する
- *hoge* → hoge
- _hoge_置換
- 上記と同様
- _hoge_ → hoge
これだけの処理を行っている。
自動切断
通話から誰もいなくなったのにbotだけが通話にいても仕方がないので、自動切断機能を付けた。
条件として、自分が接続しているボイスチャンネルにyomi-KAIのみが参加している場合に切断している。
ただし、MEE6など他のbotが同時にボイスチャンネルに参加している場合はbot同士でデッドロックしてしまうため、手動で切断する必要がある。
サーバー
当然ながら、botを動かし続けるためにはサーバーが必要だ。
私は自宅サーバーで動かしている。
ホスティングサービスとして有名なのはherokuだが、無料プランが終了してしまった。
Google Cloud Platformの無料プランでサーバーを借りることができるため、現在はこちらがおすすめだ。
まとめ
最後まで読んでくれた方は、ぜひあなたのdiscordサーバーにもyomi-KAIを導入してみてほしい。
導入に一手間かかるが、間違いなく安定して動作してくれる。
快適な聞き専ライフをあなたに。
コメント