音楽プレーヤー
オーディオプレーヤーは、音声接続を越えて音声を再生するために使用することができます。 1台のオーディオプレーヤーで、複数の音声接続で同じ音声を再生することができます。
チートシート
クリエーション
オーディオプレーヤーの作成は簡単です。
const { createAudioPlayer } = require('@discordjs/voice');
const player = createAudioPlayer();
2
3
また、オーディオプレーヤーの動作をカスタマイズすることも可能です。 例えば、オーディオ・プレーヤーのアクティブな購読者がいない場合、デフォルトの動作は一時停止になります。 この動作は、一時停止、停止、または単にストリームの再生を継続するように設定することができます。
const { createAudioPlayer, NoSubscriberBehavior } = require('@discordjs/voice');
const player = createAudioPlayer({
behaviors: {
noSubscriber: NoSubscriberBehavior.Pause,
},
});
2
3
4
5
6
7
削除
オーディオプレーヤーが不要になったら、stop()
して、参照を削除し、ガベージコレクションされるようにすることができます。
player.stop();
オーディオの再生
オーディオリソースを作成し、オーディオプレーヤーで再生することができます。
const resource = createAudioResource('/home/user/voice/track.mp3');
player.play(resource);
// Play "track.mp3" across two voice connections
connection1.subscribe(player);
connection2.subscribe(player);
2
3
4
5
6
**オーディオプレーヤーは最大1つのオーディオリソースを再生することができます。**同じプレーヤーで既に1つのオーディオリソースが再生されているときに別のオーディオリソースを再生しようとすると、既存のものは破壊されて新しいものと入れ替わります。 :::
ポーズ/アンポーズ
pause()
、unpause()
のメソッドを呼び出すことができます。 オーディオプレーヤーが一時停止している間は、音声は再生されません。 再開されると、中断したところから継続されます。
player.pause();
// Unpause after 5 seconds
setTimeout(() => player.unpause(), 5_000);
2
3
4
ライフサイクル
音声接続には独自のライフサイクルがあり、5つの状態に分かれています。 life cycles の項で説明した方法に従って、音声接続の変更を購読することができます。
Idle - オーディオプレーヤーの初期状態。 オーディオプレーヤーは、再生するオーディオリソースがない場合、この状態になる。
Buffering - オーディオプレーヤーがオーディオリソースを再生可能になるのを待っている間の状態です。 オーディオプレーヤーは、この状態から
Playing
状態(成功)またはIdle
状態(失敗)のいずれかに遷移することが可能である。Playing - 音声接続がオーディオリソースをアクティブに再生しているときに入る状態です。 オーディオリソースが終了すると、オーディオプレーヤーはIdle状態に遷移する。
AutoPaused - 再生するアクティブな音声接続がないため、プレーヤーが一時停止したときに、音声接続が入る状態です。 これは、
noSubscriber
の動作がPause
に設定されている場合のみ可能です。 少なくとも1つの接続が再び可能になると、自動的に再生中
に戻ります。Paused - ユーザーによって一時停止されたときに音声接続が入る状態です。
const { AudioPlayerStatus } = require('@discordjs/voice');
player.on(AudioPlayerStatus.Playing, () => {
console.log('The audio player has started playing!');
});
2
3
4
5
エラー処理
オーディオプレーヤーに再生するオーディオリソースが与えられると、オーディオリソースからエラーが伝搬されるので、それを処理する必要があります。
エラーハンドラでは、新しいオーディオリソースを再生するか、再生を停止するかを選択することができます。 何もしないとオーディオプレーヤーは勝手に停止してアイドル
状態に戻ります。
さらに、エラーオブジェクトにはresource
プロパティが含まれ、どのオーディオリソースがエラーを発生させたかを把握するのに役立ちます。
エラーの処理方法について、2つの異なる例を以下に示します。
エラーハンドラ内でアクションを起こす
この例では、オーディオプレーヤーは、エラーが発生した場合のみ、次のオーディオリソースの再生に移行します。 再生が優雅に終了しても、何も起こりません。 この例では、Idle状態への遷移を回避しています。
const { createAudioResource } = require('@discordjs/voice');
const resource = createAudioResource('/home/user/voice/music.mp3', {
metadata: {
title: 'A good song!',
},
});
player.play(resource);
player.on('error', error => {
console.error(`Error: ${error.message} with resource ${error.resource.metadata.title}`);
player.play(getNextResource());
});
2
3
4
5
6
7
8
9
10
11
12
13
14
Idle
状態の中でアクションを起こすこと
この例では、エラーイベントはロギングにのみ使用されます。 オーディオプレーヤーは自然にアイドル
状態に遷移し、別のリソースが再生される。 これは、優雅に終了するストリームと、エラーによって中断されるストリームを扱うことができるという利点があります。
const { createAudioResource } = require('@discordjs/voice');
const resource = createAudioResource('/home/user/voice/music.mp3', {
metadata: {
title: 'A good song!',
},
});
player.play(resource);
player.on('error', error => {
console.error(error);
});
player.on(AudioPlayerStatus.Idle, () => {
player.play(getNextResource());
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17