Sound Magic
機能

速く鳴らすための設計

Sound Magicは最速で音楽を流します。 そのために何をしているかをまとめました。

対応している音楽サービス

URLの貼り付けと、曲名・アーティスト名での検索の両方に対応しています。

対応サービスと、URL 入力時・検索時の扱い
サービス URL の入力 役割
YouTube Music対応再生ソースとして最優先で使用
YouTube対応再生ソース
SoundCloud対応再生ソース
Spotify対応楽曲情報の取得。再生は他ソースへ振り替え
Apple Music準備中楽曲情報の取得。再生は他ソースへ振り替え
Tidal準備中楽曲情報の取得。再生は他ソースへ振り替え
Deezer準備中楽曲情報の取得 / 条件により再生ソース
Qobuz準備中楽曲情報の取得 / 条件により再生ソース

曲が見つからないと言われた場合はYouTubeのURLで再生することで確実に再生できますよ!

検索エンジン

曲を特定するまで

入力の種類によってたどる道が変わります。

URLを貼ったとき

再生可能なサービスのURLであれば、そのまま再生に進みます。これが最短で確実な方法です。

曲名で検索したとき

複数のサービスのAPIを同時に叩いて、返ってきた候補をタイトル・アーティスト・収録時間で採点します。基準を満たした候補が出た時点で確定します。

ISRCが分かるとき

Spotifyなどから取得したISRCで一致を確認できた候補を優先します。同名異曲やカバーの誤選択を減らせます。

誤った候補をはじく

収録時間が大きくずれるもの、ライブ・カバー・リミックスが意図せず混ざったものなどを除外する条件を設けています。

再生

再生中の体験

キューと先読み

次に再生する曲を事前に準備しておくため、曲間の待ちが発生しにくくなります。

ほぼない合間

曲の切り替わりで生じる無音を最小限に抑えます。

プレイリストの遅延読み込み

長いプレイリストでも全曲の解決を待たず、1 曲目から再生を始めます。

ループ

1曲のみ / キュー全体 / オフ の3モードを切り替えられます。

オートプレイ

キューが空になったとき、直前の曲と関連する曲を続けて再生します。特定のサービスの推薦機能だけに依存しません。

キューの復元

再生中のキューは外部ストレージに同期しているため、Bot の再起動が起きても状態を復元できます。

安定性

止まりにくくするための仕組み

ソースの自動切り離し

エラー率などに合わせてソースを自動で切り離して別のサービスに頼ることで速度を安定させます。

再生ノードの冗長化

音楽再生用のノードは複数あり、万が一、一つがダウンしても他のノードが再生を続けます。

リージョン親和性

Discordのボイスサーバーに近いノードを選ぶことで音声の遅延と途切れを抑えます。

締め切り付きの解決

曲の検索にはリミットがあるので最速で取得できます。

設計目標値 (SLO)

状況別の目標時間

P50 は「半数がこの時間以内」、P95 は「95% がこの時間以内」を意味します。

状況別の再生開始時間の設計目標値
状況 大体(P50) ほとんど(P95)
コマンドへの最初の応答150ms
VC 参加済み / キャッシュあり400ms800ms
VC 参加済み / キャッシュなし800ms1.5s
VC 未参加  / キャッシュあり1.0s2.0s
VC 未参加  / キャッシュなし1.5s3.0s

これらは設計上の目標値であり、実測値や品質の保証ではありません
特に検索などは外部に依存するため目標値を超えることがあります。

使えるコマンドを確認する

現在利用できるスラッシュコマンドと、それぞれの引数をまとめています。