sampvoice - SA:MP サーバー用の Pawn 言語で音声通信システムを実装するためのソフトウェア開発キット (SDK) です。
プラグインが機能するには、プレーヤーとサーバーにインストールする必要があります。このためのプラグインにはクライアントとサーバーの部分があります。
プレーヤーは、自動 (インストーラー経由) と手動 (アーカイブ経由) の 2 つのインストール オプションにアクセスできます。
releases
ページに移動し、プラグインの目的のバージョンを選択します。releases
ページに移動し、必要なクライアント バージョンのアーカイブをダウンロードします。releases
ページから、プラットフォームに適したプラグインの必要なバージョンをダウンロードします。プラグインの使用を開始するには、サーバー側に付属のドキュメントをお読みください。これを行うには、Windows リファレンスを使用してsampvoice .chmファイルを開きます。 (ドキュメントが開かない場合は、ドキュメント ファイルを右クリックし、[プロパティ] -> [ブロックを解除] -> [OK] を選択します)
プラグイン機能の使用を開始するには、ヘッダー ファイルをインクルードします。
#include < sampvoice >
プラグインは独自の型と定数システムを使用することを知っておく必要があります。これは Pawn の基本タイプの単なるラッパーであるという事実にもかかわらず、プラグイン自体のタイプをナビゲートし、ポインターを混乱させないのに役立ちます。
プレーヤー A からプレーヤー B にオーディオ トラフィックをリダイレクトするには、オーディオ ストリームを作成し ( SvCreateStreamを使用)、それをプレーヤー A のスピーカー チャネルにアタッチし ( SvAttachStreamを使用)、次にプレーヤー B をオーディオ ストリームにアタッチします ( SvAttachListenerを使用)。 。これで、プレーヤー A のマイクが (たとえば、 SvPlay関数を使用して) アクティブになると、オーディオ トラフィックが送信され、プレーヤー B が聞くようになります。
サウンドストリームは非常に便利です。 Discord の例を使用して視覚化できます。
プレーヤーは、同時にスピーカーとリスナーの両方になることができます。この場合、プレーヤーのオーディオ トラフィックはプレーヤーに転送されません。
実際の例を使用して、プラグインの機能のいくつかを見てみましょう。以下では、接続されているすべてのプレーヤーをグローバル ストリームにバインドするサーバーを作成し、各プレーヤーのローカル ストリームも作成します。したがって、プレイヤーはグローバル チャット (マップ上のどの地点でも同様に聞こえる) およびローカル チャット (プレイヤーの近くでのみ聞こえる) を通じてコミュニケーションできるようになります。
#include < sampvoice >
# define GLOBAL_CHANNEL 0
# define LOCAL_CHANNEL 1
new SV_UINT: gstream = SV_NONE;
new SV_UINT: lstream[MAX_PLAYERS] = { SV_NONE, ... };
public OnPlayerConnect (playerid)
{
if ( SvGetVersion (playerid) == 0 ) // Checking for plugin availability
{
SendClientMessage (playerid, - 1 , " Failed to find plugin. " );
}
else if ( SvHasMicro (playerid) == SV_FALSE) // Checking for microphone availability
{
SendClientMessage (playerid, - 1 , " Failed to find microphone. " );
}
else
{
if (gstream != SV_NONE)
{
SvSetKey (playerid, 0x 5A , GLOBAL_CHANNEL); // Z key
SvAttachStream (playerid, gstream, GLOBAL_CHANNEL);
SvAttachListener (gstream, playerid);
SvSetIcon (gstream, " speaker " );
SendClientMessage (playerid, - 1 , " Press Z to talk to global chat. " );
}
if ((lstream[playerid] = SvCreateStream ( 40 . 0 )) != SV_NONE)
{
SvSetKey (playerid, 0x 42 , LOCAL_CHANNEL); // B key
SvAttachStream (playerid, lstream[playerid], LOCAL_CHANNEL);
SvSetTarget (lstream[playerid], SvMakePlayer (playerid));
SvSetIcon (lstream[playerid], " speaker " );
SendClientMessage (playerid, - 1 , " Press B to talk to local chat. " );
}
}
}
public OnPlayerDisconnect (playerid, reason)
{
// Removing the player's local stream after disconnecting
if (lstream[playerid] != SV_NONE)
{
SvDeleteStream (lstream[playerid]);
lstream[playerid] = SV_NONE;
}
}
public OnGameModeInit ()
{
// Uncomment the line to enable debug mode
// SvEnableDebug();
gstream = SvCreateStream ();
}
public OnGameModeExit ()
{
if (gstream != SV_NONE)
{
SvDeleteStream (gstream);
gstream = SV_NONE;
}
}
プラグインはWin32およびLinux x86プラットフォーム用にコンパイルされます。コンパイルされたファイルはsampvoice /binariesディレクトリにあります。
以下に詳しい手順を示します。
リポジトリのクローンをコンピュータに作成し、プラグイン ディレクトリに移動します。
git clone https://github.com/CyberMor/sampvoice.git
cd sampvoice
プラグインのクライアント側をコンパイルするには、 DirectX 9 SDK が必要です。デフォルトでは、クライアント部分はバージョンSA: MP 0.3.7 (R1)用にコンパイルされますが、 SAMP_R1およびSAMP_R3マクロを使用してビルドのバージョンをコンパイラに明示的に伝えることもできます。 Win32プラットフォーム用のプラグインのクライアント部分とサーバー部分を構築するには、Visual Studio 2019 (またはそれ以降) でsampvoice .slnプロジェクトを開いてコンパイルします。
ビルド -> ソリューションのビルド (F7)
すべての依存関係がインストールされていることを確認してください。
sudo apt install build-essential gcc-multilib g++-multilib
Linux x86プラットフォーム用のコントロール サーバーを構築するには、次の手順に従います。
cd control
make
cd ..
Linux x86プラットフォーム用の音声サーバーを構築するには、次の手順に従います。
cd voice
make
cd ..