📚 Client/Audio

在沙盘引擎的音频系统中,所有的实例默认是以uuid: string的形式作为存储介质的。

除此之外,也可以根据情况使用tag\id绑定及查询功能。

tag适用于所有匹配的音频标签(例如StopSoundByTag("Test")将会停止所有正在播放的Tag: Test音频)

id适用于所有匹配的声音文件ID(例如StopSoundByID(10)将会停止所有正在播放的ID: 10音频)

除此之外,通常使用以下方法进行存储音频实例:

let mySound = Audio.PlaySound(10); //播放声音并储存到变量mySound(返回:字符串UUID)
Audio.StopSound(mySound); //停止播放声音

音频系统主要分为Sound、Music、Natural三个主要类型,并且遵循《沙盘引擎》客户端的音量设置规范

《沙盘引擎》设置界面共有4项音量设置:全局音量(所有声音)、音效音量、音乐音量、背景音量

使用不同轨道(API)播放的声音,将受到对应轨道的游戏音量控制。

注意:音频系统中Music是完全独立的,在场景\世界切换后,正在播放的音乐不会被停止,其他类型的音频则会自动停止(Sound\Natural)。

📒 World端音频控制

为了丰富World端的开发实用性,World/Player增加了类似player.PlaySound()等方法映射(为某个联机玩家单独播放声音\音乐等),这些方法的参数及用法与本文档内容基本一致,唯一的区别是可以从World脚本直接为某个玩家播放\停止声音。

需要注意的是,由于World端的服务器同步性,绝大多数World端下的音频控制并不能取得返回数据,这就导致World端音频控制更多只能【播放、暂停、继续、停止】(而不能直接:获取音量、检查声音是否正在播放等),从而并不能完全使用Client/Audio下的所有功能。

World/Player下的音频控制脚本,相当于给Client/Audio部分函数做了一个联网映射。

如有实际的更多特殊需求,可以考虑使用【自定义函数\数据传输】的方式来扩展。

📒 Function

📘 PlaySound()

播放一段音效\声音(2D),通过音效轨道(根据音频管理规范,相对较短声音建议使用此功能)。

function PlaySound( audioID: int, loop: bool = false, volume: float = 1, tag: string = null ): string
/*
	audioID:声音ID
	loop: 是否循环播放
	volume:自身相对音量(0.0~1.0),而非全局控制音量
	tag:设定标签(可空)
*/

📘 PlayPureSound()

播放一段纯净音效\声音(2D),通过音效轨道(根据音频管理规范,相对较短声音建议使用此功能),此方法播放的声音将屏蔽音频空间效果(更适合人声等音频)

function PlayPureSound( audioID: int, loop: bool = false, volume: float = 1, tag: string = null ): string
/*
	audioID:声音ID
	loop: 是否循环播放
	volume:自身相对音量(0.0~1.0),而非全局控制音量
	tag:设定标签(可空)
*/

📘 Play3DSound()

播放一段音效\声音(3D空间),通过音效轨道(根据音频管理规范,相对较短声音建议使用此功能)。

参数中volume为自身相对音量(0.0~1.0),而非全局控制音量。

function Play3DSound( audioID: int, pos: Vector, radius: float = 80, loop: bool = false, volume: float = 1, tag: string = null ): string
/*
	audioID:声音ID
	pos:3D坐标
	radius:3D声音范围
	loop: 是否循环播放
	volume:自身相对音量(0.0~1.0),而非全局控制音量
	tag:设定标签(可空)
*/

📘 StopSound()

停止播放指定声音实例。

fadeTime表示过渡时间,默认为0(直接停止),文档后续参数同理。

function StopSound( uuid: string, fadeTime: float = 0 )

📘 StopSoundByID()

停止播放指定声音实例,通过音频ID(所有匹配的)。

function StopSoundByID( audioID: int, fadeTime: float = 0 )

📘 StopSoundByTag()

停止播放指定声音实例,通过实例Tag(所有匹配的)。

function StopSoundByTag( tag: string, fadeTime: float = 0 )
PlaySound( 10, false, 1, "TempSound" );
PlaySound( 15, false, 1, "TempSound" );
PlaySound( 18, false, 1, "TempSound" );
 
//以上三个实例全部会被停止播放
StopSoundByTag("TempSound");

📘 StopAllSound()

停止播放全部音效声音(不包括Music和Natural轨道)。

function StopAllSound( fadeTime: float = 0 )

📘 ExistSound()

检查某个声音实例是否存在(正在播放)。

function ExistSound( uuid: string ): bool

📘 ExistSoundByID()

检查某个声音实例是否存在(正在播放)。

function ExistSoundByID( audioID: int ): bool

📘 ExistSoundByTag()

检查某个声音实例是否存在(正在播放)。

function ExistSoundByTag( tag: string ): bool

📘 PlayMusic()

播放一段音效\声音(2D),通过音乐轨道(根据音频管理规范,音乐播放建议使用此功能),此方法播放的声音将屏蔽音频空间效果

音乐轨道是全局唯一的,同一时间只能存在一个声音。

function PlayMusic( audioID: int, loop: bool = false, fadeTime: float = 3, volume: float = 1 ): string
/*
	audioID:声音ID
	loop:是否循环播放
	fadeTime:过渡时间(秒)
	volume:自身相对音量(0.0~1.0),而非全局控制音量
*/

📘 Play3DMusic()

播放一段音效\声音(3D空间),通过音乐轨道(根据音频管理规范,音乐播放建议使用此功能)。

音乐轨道是全局唯一的,同一时间只能存在一个声音。

function Play3DSound( audioID: int, pos: Vector, radius: float = 80, loop: bool = false, fadeTime: float = 3, volume: float = 1 ): string
/*
	audioID:声音ID
	pos:3D坐标
	radius:3D声音范围
	loop:是否循环播放
	fadeTime:过渡时间(秒)
	volume:自身相对音量(0.0~1.0),而非全局控制音量
*/

📘 StopMusic()

停止播放并销毁当前音乐实例。

fadeTime表示过渡时间,如果为0则表示直接停止,文档后续参数同理。

function StopMusic( fadeTime: float = 3 )

📘 PauseMusic()

暂停播放当前音乐。

function PauseMusic( fadeTime: float = 3 )

📘 ResumeMusic()

继续播放当前音乐,仅通过PauseMusic()暂停的音乐可使用。

function ResumeMusic( fadeTime: float = 3 )

📘 GetPlayingMusic()

获取当前正在播放的声音ID(而非实例UUID),如无正在播放内容则返回-1

function GetPlayingMusic(): int

📘 PlayNatural()

播放一段音效\声音(2D),通过自然\背景音轨道(根据音频管理规范,持续背景声音播放建议使用此功能)。

背景音轨道理论支持无数个,通常适用于背景自然声音等场景,通常情况下不建议同时超过8个音轨。

function PlayNatural( audioID: int, channel: int, loop: bool = true, fadeTime: float = 3 ): string
/*
	audioID:声音ID
	channel:音轨ID(自定义数字)
	loop:是否循环播放
	fadeTime:过渡时间(秒)
*/

📘 StopNatural()

停止播放并销毁指定背景音轨道实例

fadeTime表示过渡时间,如果为0则表示直接停止,文档后续参数同理。

function StopNatural( channel: int, fadeTime: float = 3 )
/*
	channel:音轨ID(指定播放的音轨)
	fadeTime:过渡时间(秒)
*/
Audio.PlayNatural(10, 0); //假设:0号音轨播放的是城市喧嚣背景
Audio.PlayNatural(20, 3); //假设:3号音轨
 
Audio.StopNatural(0); //停止0号音轨的播放声音,3号音轨不会受到影响

📘 StopAllNatural()

停止播放全部背景音轨声音。

function StopAllNatural( fadeTime: float = 3 )

📘 GetTotalVolume()

获取全局游戏音量1~100(只读)。

游戏音量数值是不允许通过代码修改的(只读),游戏音量完全遵循【玩家设置界面】的设定数值。

function GetTotalVolume(): int

📘 GetSoundVolume()

获取游戏音效音量(通过PlaySound1~100(只读)。

function GetSoundVolume(): int

📘 GetMusicVolume()

获取游戏音乐音量(通过PlayMusic1~100(只读)。

function GetMusicVolume(): int

📘 GetNaturalVolume()

获取游戏音效(通过PlayNatural)音量1~100(只读)。

function GetNaturalVolume(): int