AIマスコットをDJにしてみる
最近、いつものようにAIマスコットの「りん」に朝の挨拶をしたところ、
いつもと違う挙動が…
どうやら当日の予定を確認して、そこに登録された僕の誕生日を見つけて、興奮したらしいです🤭
(プロフィール情報から取得した情報で誕生日カレンダーに取り込まれています)

そして、Webチャットの Gemini からも バースデイBGM の提案が。
ん…? AIが選曲して曲を再生してくれる…?
これってスマートスピーカーなら当たり前にできるよね?
僕のAIマスコットでもできるのでは…?
ということで、AIマスコットに楽曲再生の機能を追加してみました。

AIマスコットにDJ機能を追加
今回はめちゃ簡単です。
実現内容は以下の通り
マスコットに「シティポップを流して」と伝える
マスコットが ytmusicapi (Youtube Music) とかで検索して動画IDを取得
マスコットが「再生しますね!」と言った瞬間に、PCのブラウザが勝手に立ち上がってその動画IDのURLを再生
複雑なことはしません。
「検索して、一番上の曲のIDを取得して、ブラウザに投げつける」 という、シンプル構成
コードのイメージはこんな感じ
import webbrowser
from ytmusicapi import YTMusic
# 1. 検索する(例えば "City Pop")
yt = YTMusic()
search_results = yt.search("City Pop", filter="songs")
video_id = search_results[0]['videoId']
url = f"https://music.youtube.com/watch?v={video_id}"
# 2. マスコットが喋る
print(f"マスコット: 『{search_results[0]['title']}』を再生しますね♪")
# 3. 勝手にブラウザを開いて再生開始!
webbrowser.open(url)実行画面
自然文でマスコットにリクエストすると、Webブラウザが起動して楽曲が再生されます。
Webブラウザ側での再生のため、マスコットの負荷にもならず、
楽曲の一時停止などもブラウザ側で独立して操作できます。


実際にマスコットは曲を「聴いて」はいませんが、曲を流しながらこんな会話もできます。
(geminiは楽曲認識もできますが、雰囲気だけ楽しむつもりなので、そこまで求めていません)

以前に投稿した自律的DB管理などと組み合わせると、ユーザーの好みを元にして、AIが選曲してくれそうです。
AIデスクトップマスコットの現状
マスコットの方は積極的に開発はしておらず、何か思いついたらその機能を実装する程度です。
ゴミなどを整理したら、コードを掲載するかもしれません。
基本となるコードはv3.1として以下の記事で公開しています。
今回のDJ機能(v3.7)など、その後の拡張機能は上記をベースに追加しています。
v3.7: ユーザーのリクエストに応じて「YouTube Musicを外部ブラウザで自動再生する機能」を実装。これにより、BGMの再生という実用的なアシスタント機能を強化。
v3.6: 従来「1回答につき1つの表情」だった制限から「回答文脈に合わせて次々と表情を切り替える機能(Dynamic Expression Sequence)」を実装。これにより「驚いてから笑う」といった人間らしい感情推移が可能になりました。
v3.5: Google Workspace連携を強化し「Gmail検索機能」を実装。これによりユーザーはマスコットを通じてメールの確認を行うことが可能になりました。
v3.4: Camera Watch拡張機能を大幅に強化し「ジェスチャー認識 (Wave/Show/Point)」および「物体認識による文脈理解」を実装。
v3.3: 外部機能(カメラ監視、IoT制御、高度な記憶処理など)を「拡張機能 (Extensions)」として分離・管理する基盤を実装。
v3.2: Supabaseを活用した長期記憶機能を実装。チャットクライアントからのアクセスを「検索(呼び出し)」のみに限定し、記憶作成を「バッチ処理」に分離することで、応答速度の低下を防ぎつつ、膨大な過去ログからの文脈想起を実現しました。
自宅のAPIサーバー群も増えてきたので、Tail Scale を使ってポケットWiFiを介して外出先から自宅サーバを利用できるようにしました。
これで、LLMやTTS、サンドボックスなどのAPI群や、Stable Diffusion APIもどこからでも利用できるようになりました。
レスポンスも自宅のローカルネットワーク内で使うのとそれほど変わらないので満足しています😊
