はじめに
マイク入力による音声認識や、Discord上のメッセージに反応して、用意した音声データを再生するキャラクターBotを作ってみました。
詳細なセットアップ方法や実装については、以下GitHubリポジトリをご確認ください。
この記事では、本システムの主な機能や使い方の概要を紹介します。
本システムでは、以下のことは行っていません。
- 生成AIによるテキスト生成
- 用意した音声データの機械学習/音声合成への利用
あくまで「用意した音声データの再生・制御」にフォーカスしています。
購入したもの
- Raspberry Pi 5 スターターキット8GB版
- SANDISK Ultra microSDHCカード 32GB Class10 UHS-I U1 A1
- サンワサプライ USBマイクロホン MM-MCU06BKN
- サンワサプライ コンパクトUSBスピーカー MM-SPU21BK
Raspberry Pi 5は必須ではありません。
Windows PCでも同様に動作します。
準備
セットアップ手順は上記GitHubのREADMEにまとめているので、そちらに沿って進めてください。
ここではいくつか補足を記載します。
音声データについて
本記事に掲載している、実際に動かしている様子の動画では、「つくよみちゃん(COEIROINK)」の音声データを使用しています。
実際に試す場合は、任意の音声データを用意してください。
音声データの利用にあたっては、著作権・利用規約・二次利用可否などに十分注意してください。
Raspberry Pi 5(使用する場合)
以下記事の「6-2」までを参考に、Raspberry Pi 5のセットアップを行います。
開発や運用の都合上、IPアドレスを固定しておくと後々楽になります。
IPアドレス固定の方法については、以下の記事が参考になります。
また、以前Raspberry Pi 5で仮想環境へのPyTorchインストールがうまくいかなかったことがありました。
以下記事にその際の内容をまとめているので、Raspberry Pi 5を使用する場合は参考になるかもしれません。
Discord Botの作成
Discord Botの作成方法については、以下の記事が分かりやすいです。
BotのトークンやチャンネルIDは、.envの設定で使用します。
機能紹介
本システムでできることを簡単にまとめます。
音声認識による操作
- マイクに向かってキャラクター名+発話をすると反応
- 以下の特定ワードに対応
- おやすみ:ミュート
- おはよう:ミュート解除
- 歌って:曲の再生
- 止めて:再生中の音声/歌を停止
- それ以外の発話についても、内容に近い音声データを選んで再生(擬似会話)
実際に動かしている様子(音声認識による操作)
※本動画では、Windows PC上で実行しています。
Discordメッセージによる操作
- Discord上でテキストメッセージを送信しても、音声認識と同様に反応
- コマンドの一覧表示
- 歌える曲の一覧表示
- 指定時刻に音声を再生するスケジュールの追加/削除/一覧表示
- 音声データ再生履歴(ランキング)の確認
- 音声データや楽曲データの更新
実際に動かしている様子(Discordメッセージによる操作)
※本動画では、Raspberry Pi 5上で実行しています。
擬似会話の仕組み
- 発話内容/送信したメッセージをベクトル化
- 事前に登録した音声データの説明文と類似度検索
- 最も近いものを選んで音声を再生
→決め打ちではなく、自然な反応に近い挙動になります
その他
- 音声や楽曲の再生中は、Discordのアクティビティ表示が切り替わる
- 再生回数を内部で記録
おわりに
音声データを増やすことで、キャラクターの反応のバリエーションがより豊かになります。
今回は実装しませんでしたが、人感センサーと組み合わせて「近づいたら話しかけてくる」ような仕組みにしても面白そうです。
課題としては、レスポンス速度や音声認識精度があります。
今回は無料で利用できる構成を選びましたが、OpenAI APIなどを利用することで、精度や体験面を改善できる可能性がありそうです。
興味がある方は、ぜひいろいろ試してみてください。