Zh/Soundscape

Soundscape（音景）是一种音效脚本，用于向地图添加环境音效，它在地图中的数量没有严格限制，只需一个实体即可完成所有步骤，并且不会产生任何网络开销。音景通常为循环音效和随机音效的组合，这些声音可以通过从8个可分配的目标位置之一发出；同时还可以强制使用和
每次只能同时播放一个音景，并且其中的任何声音都无法用I/O系统控制，当另一个音景启用时，游戏会自动淡入淡出
==音景==
===浏览音景===
音景通常位于游戏的scripts\文件夹下多个以soundscapes_为前缀的文本文件。每一个音景都由全局清单scripts\soundscapes_manifest.txt控制，其中列出了游戏应读取的所有音景脚本。通过这种方法加载的音景可以用于游戏中的任何地方，即便它们是为某个场景专门设计的
音景同时还可以以地图专用的方法进行使用
此处的<地图名>应为它们所对应的BSP文件名称。这种音景可以在不修改全局清单的情况由地图自动读取，但也只能用于该地图中。
你可以在页面底部找到部分游戏的音景列表链接，以及社区对部分音景效果的描述
你也可以在游戏中使用PlaySoundscape指令来显示当前所有可用音景，输入任意字符，游戏的自动填充功能便会显示所有符合条件的音景
===配置音景===
音景只能通过以下实体进行配置：
*
*
还有其他实体可以启用音景，但只有上述这些真正定义了音景的属性。其他实体将以此为主实体远程控制音景
每当这些实体启用音景的时候，任何具备预定义位置的音效都将会从音景实体指定的Sound Position实体位置触发
===激活音景===
任何已启用并被玩家触发的音景实体，都会播放其自身（或主实体）指定的音景条目，音景本身会持续播放，即便最初启用自身的实体已被禁用，除非玩家触发了另一个音景，或者地图发生变化
===音景相关实体===
音景可由以下实体播放：
*
* （通常由激活）
* （通常反过来激活env_soundscape或者env_soundscape_triggerable）
音景本身是基于，但是当玩家处在所属半径内并且视野内可见时，即可触发它们
不过env_soundscape_proxy和env_soundscape_triggerable是两个例外，前者通过env_soundscape或者env_soundscape_triggerable触发；后者通常由trigger_soundscape触发
由于一次只能播放一个音景，因此如果同时触发一个或多个音景，则位置最近的优先（音景实体的半径范围始终优先于trigger_soundscape的边界框）
注意音景不会玩家离开其半径范围或者视野内不可见而停止播放
===音景放置===
一般来讲，只放置你绝对需要的音景数量。先选择一个需要全局播放的音景，之后在每个特殊位置（如房屋，发电机房）放置特定于该场景的次要音景。确保每个具有位置的局部音效都有自己的主音景，并指定了适当的目标实体。 
一旦你大致了解了音景的位置，你就可以开始添加/配置触发音景的实体，并创建一种蓝图，说明音景如何从一个流向另一个。在许多情况下，你会放置实体来阻挡对比位置的所有出口，并触发全局音景。
基本上，目标是预测玩家在整个地图上的移动，并以一种始终激活正确音景的方式阻挡每个区域。
===在音景内多次使用同一音效===
目前在大多数起源游戏/分支中，一次只能在音景内同时播放一个或多个相同的音效，即便音量，音调和SoundLevel有差异
此问题已得到修复，允许音景同时播放多个相同的音效
有一种不是办法的办法，即复制粘贴并重命名音效，适用于一些非常短的音效（如灯光的嗡嗡声）但不推荐用于其他音效，因为会增加冗余的文件大小。这是V社在CSS版野战训练营中使用的解决方法：在T家厨房里，有两个发出嗡嗡声的荧光灯。但第一个音效是"ambient/machines/fluorescent_hum_1.wav"而第二个音效是"ambient/machines/fluorescent_hum_2.wav"。这两个音效完全一样，但由于上述问题必须使用不同的名字才能用于音景
另一个示例如下：我们有三盏需要发出嗡嗡声的荧光灯。为了使其正常运作，音景文件和实体配置应该如下
尽管大多数起源游戏/分支无法同时播放多个相同的声音，但在某些情况下，似乎可以使用频道在不同位置多次播放相同的声音。经过在不同情况下的多次测试和源代码解读，这似乎被认为具备可行性。例如，我们使用不同的频道（如CHAN_STATIC、CHAN_STREAM、CHAN_AUTO等）而不是使用不同的名称。由于一系列尚不清楚的原因，这并不总是有效。有关更多信息，详见Soundscript
==自定义音景==
===创建===
音景脚本的语法和有很多相似之处，但两者仍然是完全不同的体系
音景需要一些独有的规则，并放置在独立于普通Soundscript的纯文本文件中。通常会命名为soundscape_mall.txt并且可能包含 5 到 30 个不同的音景，这些音景采用以下语法
===常见参数===
; wave <>
: 要播放的音频文件名称，路径相对于game\sound\目录
; volume <>
: 1为最大音量，0为静音
; pitch <>
: 百分比值，有效范围通常为70-130
; music <> 
: 音效会被视为游戏音乐，并受到音量设置中音乐设置的影响，类似于声音标识符，只是其受DSP影响并具备空间性
; position <0-7>
: 地图内八个可发出音效的位置（由地图制作者定义）
; position random
: 同上，但音效从玩家附近的任意位置发出
; origin <origin> 
: 在特定坐标播放音效，格式为"0,0,0"不同轴的坐标必须以逗号进行分割，但可以包含前后空格 
; attenuation <>
: 当玩家视野远离音源时，音效音量下降的速度。只有在指定position的情况下有效。默认值为1.00。值越低，声音的半径就越大。相反，值越高，声音的半径就越小。请参见上图示例
; soundlevel <>
: 可用于代替attenuation，接受引擎提供的预设值.
; suppress_on_restore <>
: 防止在加载存档后重新播放音效
===随机值===
一些参数接受“最大”和“最小”范围，例如
每当执行规则时，对应的参数将从“最大”与“最小”值之间随机取值
===规则===
====playlooping====
循环播放音效，不允许随机值
====playrandom====
在time键值指定的最短与最长时间之间随机播放音效。允许随机值
Playrandom需要所有wave键值位于rndwave内部（即便只有一个音频）每次执行规则时都会随机播放音效。
:
====playsoundscape====
播放完整的音景，子音景中的DSP预设将被忽略
; name
: 需要播放的音景名称
; position <>
: 用于偏移子音景每个位置的索引值
: 例如，如果偏移值为2，则子音景中位于位置0、1、2、3播放的音效，在主音景中会偏移到位置2、3、4、5
; positionoverride <>
: 强制子音景中所有指定位置的音效从主音景的一个位置发出。
; ambientpositionoverride <>
: 强制子景观中所有未指定位置的音效（即环境音）从主音景的一个位置发出。
====dsp <integer>====
;dsp_spatial <>
;;dsp_volume <>
设置当前DSP预设。将从附近的中提取
对于参数列表，请查看scripts\dsp_presets.txt文件。可能需要使用如之类的软件从游戏VPK中提取文件。要预览DSP预设，请在控制台使用room_type <int>指令
====fadetime <float>====
音效淡入的时间（以秒为单位）
====soundmixer <string>====
选择一个自定义，混音器控制一组音效的优先级和音量，关于如何新建混音器，参见scripts\soundmixers.txt（默认情况下始终使用Default_Mix作为模板）
===示例===
====循环播放MP3音效====
MP3格式无法循环播放，仅建议用于非循环声音。不过，可以使用rndwave播放相同的文件来模拟循环，并将时间值设置为这些文件的长度：
===储存与使用自定义音景===
引擎使用scripts/soundscapes_manifest.txt作为清单来查找全局音景文件，但也可使用scripts/soundscapes_%地图名%.txt来逐地图加载音景，所有地图专用音景都将在地图加载时读取
当不需要/不可能修改音景清单时，应使用地图专用音景（例如没有独立游戏目录的自定义地图），此文件也可以被压缩进地图中
可以通过在底部添加新的“file”行将新的音景添加到清单中，如下所示：
==使用“XBLAH的模组制作工具”创建音景==
音景现在可以通过进行创建或修改，其工具界面提供了集成的资源管理器来直观的创建新的音景，这可以让用户预览所有已挂载的音频（无论是VPK内音频或松散未打包音频），让用户单独查看音景文件，并预览音景是如何在游戏内播放的
如何使用
可以通过工具内部的Sounds > Soundscape Editor工具栏使用音景编辑器
==参见==
* env_soundscape
* env_soundscape_proxy
* env_soundscape_triggerable
* trigger_soundscape
* Notepad++ VDF languages