[SDK] samp语音系统下载及使用说明 (0.37/0.3DL)
samp吧
全部回复
仅看楼主
level 12
相信大家对samp语音插件都有所耳闻,实际上国外很早就有人实现了,只是大部分此类插件都是单独服务器专用,本贴介绍的sampvoice是开源项目,原作者为Daniel Mor,目前有许多网友fork并贡献了自己的开发成果,有兴趣的参与开发的可以在github上搜索「CyberMor」
SAMPVOICE,简称CV,是在samp服务器上实现语音通讯的开发工具,它不仅仅提供了语音聊天系统,还是一种创建语音的工具(可设置特定obj音效),它的功能有:
-音频码率设置
-API接口调用记录
-插件版本更新设置
-检查玩家是否有麦克风
-麦克风开/关
-设置麦克风激活键
-玩家静音设置(开/关)
-创建全局流(2D声音)
-创建本地流(3D声音)
-手动控制收听本地流的距离
-手动控制本地流扬声位置
-创建绑定到游戏obj的本地流
-自定义音效(对讲机、回声等,适用于RP)
-更改流参数(音量、频率)
SAMPVOICE支持的版本:
-客户端:SA:MP 0.37(R1,R3), SA:MP 0.3DL
-服务器端:SA:MP 0.37(R2), SA:MP 0.3DL
安装(安装包的链接会放在二楼):
-玩家安装方法:打开安装包中的'玩家'文件夹,根据自己的samp版本(R1或R3)选择对应的客户端压缩包,解压到GTASA主目录
-开发者安装方法:打开'开发端'文件夹,同样选择自己对应的服务器版本(注意,这里的0.3DL版本不完整,关于0.3DL端的事宜后文会作说明) ,并根据操作系统选择sampvoice.dll或sampvoice.so(.so为linux系统),最后解压include文件
使用方法(非开发者请忽略):
打开服务器配置文件server.cfg,如果是win32系统,请添加一行"plugins sampvoice",如果是Linux x86系统,请添加一行"plugins sampvoice.so",如果服务器使用了Pawn.RakNet插件,务必将"SampVoice"加在"Pawn.RakNet"后面
最后不要忘了添加头文件: #include <sampvoice>
下面是一个功能实现的代码示例,首先将所有玩家加入到全局流(全图聊天),并为每个玩家创建一个本地流(附近聊天),目的是为了让玩家能分别通过全局流和本地流聊天,全局流即全图玩家,本地流即附近的玩家:
#include <sampvoice>
new SV_GSTREAM:gstream = SV_NULL;
new SV_LSTREAM:lstream[MAX_PLAYERS] = { SV_NULL, ... };
/*
public函数中OnPlayerActivationKeyPress和OnPlayerActivationKeyRelease的作用为:
玩家按下对应麦克风激活按键的同时,将玩家输入的音频重定向为对应的音频流
*/
public SV_VOID:OnPlayerActivationKeyPress(SV_UINT:playerid, SV_UINT:keyid)
{
// 如果玩家按下"B"键,则将玩家作为扬声器链接到本地流
if (keyid == 0x42 && lstream[playerid]) SvAttachSpeakerToStream(lstream[playerid], playerid);
// 如果玩家按下"Z"键,则将玩家作为扬声器连接到全局流
if (keyid == 0x5A && gstream) SvAttachSpeakerToStream(gstream, playerid);
}
public SV_VOID:OnPlayerActivationKeyRelease(SV_UINT:playerid, SV_UINT:keyid)
{
// 如果玩家松开"B"键,则断开本地流
if (keyid == 0x42 && lstream[playerid]) SvDetachSpeakerFromStream(lstream[playerid], playerid);
// 如果玩家松开"Z"键,则断开全局流
if (keyid == 0x5A && gstream) SvDetachSpeakerFromStream(gstream, playerid);
}
public OnPlayerConnect(playerid)
{
// 检查语音插件的可用性
if (SvGetVersion(playerid) == SV_NULL)
{
SendClientMessage(playerid, -1, "Could not find plugin sampvoice.");
}
// 检查麦克风
else if (SvHasMicro(playerid) == SV_FALSE)
{
SendClientMessage(playerid, -1, "The microphone could not be found.");
}
// 创建一个可听距离为40.0的本地流,并且不限制听众数量
// 创建一个为'Local'的名称标识 (标识'Local'将在玩家的扬声器列表中显示为红色)
else if ((lstream[playerid] = SvCreateDLStreamAtPlayer(40.0, SV_INFINITY, playerid, 0xff0000ff, "Local")))
{
SendClientMessage(playerid, -1, "按Z可全图聊天,按B可以和附近的人聊天");
// 让玩家作为听众加入到全局流
if (gstream) SvAttachListenerToStream(gstream, playerid);
// 将麦克风激活键分配给玩家
SvAddKey(playerid, 0x42);
SvAddKey(playerid, 0x5A);
}
}
public OnPlayerDisconnect(playerid, reason)
{
// 玩家与服务器断开链接后移除该玩家的本地流
if (lstream[playerid])
{
SvDeleteStream(lstream[playerid]);
lstream[playerid] = SV_NULL;
}
}
public OnGameModeInit()
{
// 取消下面一行的注释来debug
// SvDebug(SV_TRUE);
gstream = SvCreateGStream(0xffff0000, "Global");
}
public OnGameModeExit()
{
if (gstream) SvDeleteStream(gstream);
}
编译插件:
本插件可以在Win32和Linux x86平台上进行编译:
首先将github存储库克隆到您的计算机并转到语音插件目录:
「git clone https://github.com/CyberMor/sampvoice.git
cd sampvoice 」
-Windows(客户端与服务器端):
原版的0.37R1/R3的插件已经编译好了,可以在压缩包中下载,如果有其他的编译需求 ,请先安装DirectX SDK(编译客户端插件所需的软件),打开"开发端"中有"源代码"名称的文 件,在编译器中分别调用SAMP_R1、SAMP_R3、SAMP_DL宏来构建为所需的插件版本。对于 Windows32位操作系统,请在Visual Studio 2019中打开名称sampvoice.sln的工程文件, 然后用「Build -> Build Solution (F7)」来编译它
-Linux(服务器端)
Linux x86平台的服务器端插件构建方法为:
「cd server
make 」
2021年08月23日 15点08分 1
吧务
level 12
6666
2021年08月23日 16点08分 2
level 12
上文提到过,安装包里的0.3DL版本是不完整的,没有客户端插件,因为开发0.3DL版本的作者还没发布编译过的插件(sv_server_0.3DL_linux),但是根据已发布的0.3DL端源代码,我在此构建了一个0.3DL的linux服务器端插件,大家可以用来参考
SAMPVOICE的下载地址:[无效] https://pan.baidu.com/s/1xxCoI-4NHLyaMZM-qQMUEw
提取码:SSF6
2021年08月24日 05点08分 3
level 12
手抖了吧[滑稽],sampvoice简称是sv
2021年08月24日 06点08分 4
level 11
2021年08月24日 07点08分 5
level 11
2021年08月26日 09点08分 6
level 13
[滑稽]顶帖
2021年08月26日 10点08分 7
level 12

2021年10月07日 02点10分 9
level 13
nb
2021年10月07日 09点10分 10
1