求生之路 2 自定义声音和音乐教程
自从2010年8月20日更新以来,《求生之路2》完全支持自定义声音。Valve提供的说明可以在L4D2战役附加内容教程文章 中找到。本文介绍了如何在《求生之路2》中使用自定义声音、文件管理和测试方法。
入门
通常来说:
- 自定义声音文件适用于多个位置:可以在官方的sound文件夹中,已知搜索路径 中的sound文件夹中,或包含sound文件夹的附加内容中。
- 在测试之前,请使用
snd_buildsoundcachefordirectory
在该文件夹中构建一个新的sound.cache。
- 选项 1 - 作为自定义搜索路径:
- 在任意位置创建一个包含sound子文件夹的目录。
- 在"..\left 4 dead 2\left4dead2\gameinfo.txt"的gameinfo.txt 文件中添加目录路径。
- 在sound文件夹中创建另一个文件夹,可以是唯一的或已存在的名称(例如:ambient、music等)。如果可能,保持与官方sound文件夹相同的命名结构。
- 使用游戏内控制台构建sound.cache:
snd_buildsoundcachefordirectory <绝对目录名,例如:e:\custom_sounds 或 游戏根目录,例如:../left4dead2/(包含官方sound文件夹)>
。此命令将查找名为sound的目录并生成sound.cache。 - 重启客户端。
- 通过控制台 命令测试声音(sound为根目录):
play (sound文件夹的子目录)/<声音文件名>
- 选项 2 - 作为附加内容/VPK:
- 在addons目录中创建一个文件夹。它应包含一个名为sound的子文件夹。addons目录位于"..\left 4 dead 2\left4dead2\addons"。
- 在sound文件夹中创建另一个文件夹。此文件夹用于存储声音文件。
- 使用游戏内控制台为附加内容构建sound.cache:
snd_buildsoundcachefordirectory ../left4dead2/addons/<将打包成VPK的VPK附加文件夹名称>
。此命令将查找名为sound的目录,并在其中创建名为sound.cache的文件。 - 创建VPK 作为内容包。换句话说,只需要声音文件(及正确的目录结构)和sound.cache。无需删除解压后的VPK。保留它以便以后进行更改。
- 通过控制台 命令测试声音(sound为根目录):
play (sound文件夹的子目录)/<声音文件名>
- 更新sound.cache并重新打包VPK,以便听到新或重新定位的声音。
- 示例
如果自定义声音文件位于left 4 dead 2/left4dead2/addons/customsoundaddon/sound/ambient/testsound.wav:
- 使用
snd_buildsoundcachefordirectory ../left4dead2/addons/customsoundaddon
构建sound.cache。 - 作为自定义搜索路径:添加
Game left4dead2/addons/customsoundaddon
。 - 作为附加内容:构建sound.cache后,拖动customsoundaddon文件夹到vpk.exe的快捷方式中创建customsoundaddon.vpk。
- 在游戏中测试testsound.wav,使用
play ambient/testsound
。
例如:用更长的声音替换原声的MOD需要使用sound.cache才能工作。但这些sound.cache文件只能作为独立文件使用。
一些建议
保持资源的组织结构清晰,独立且尽可能小。并且,在《求生之路2》中,声音通常是通过soundscripts 分配的。在使用声音进行开发时,至少应包含以下内容:
- 包含自定义声音和sound.cache的独立搜索路径,如上所述。您可以根据需要随意组合或分离资源,只要将挂载路径添加到gameinfo.txt中即可。
- 一张可以在游戏中加载的地图,通常是用于发布的地图或测试地图——maps/<地图名称>.bsp
- 一份空白的每张地图soundscript (.txt文件)——maps/<地图名称>_level_sounds.txt。
- 这些文件和文件夹最终将与地图和其他资源一起集成,作为一个独立的附加内容/VPK发布。
使声音效果合适
现在声音在游戏中可以正常播放了……接下来怎么办?文章的其余部分将涵盖这一点:
声音文件兼容性
.mp3
文件可能会突然停止播放声音脚本条目Event.MissionStart_MusicPostFixString
和实体ambient_music的声音。对于实体ambient_generic,如果选中了is NOT looped
标志,则Start Silent
标志和输入StopSound
将对所有声音失效。具体原因尚不清楚,副作用不一致。随着游戏的更新,这可能会发生变化。 [todo tested in?]游戏可以播放WAV 和MP3 文件,前提是它们具有声音缓存条目。
声音缓存兼容性
从版本2.2.2.6开始,您可以为具有以下属性的声音文件构建声音缓存:
扩展名 | 通道 | 格式(ffmpeg_format )
|
编解码器(ffmpeg_codec )
|
编解码器配置文件 | 位深(bit) | 采样率(Hz) | 比特率(kbps) |
---|---|---|---|---|---|---|---|
.wav
|
单声道 立体声 |
s16le
|
adpcm_ms
|
N/A | 4* | 44100 22050 11025 |
采样率依赖 |
pcm_s16le
|
16 | ||||||
u8
|
pcm_u8
|
N/A | 8 | ||||
.mp3
|
单声道 立体声 |
mp3
|
libmp3lame
|
ABR CBR VBR |
N/A | 44100 22050 11025 |
32‒320 |
替换声音文件兼容性
许多L4D2模组替换现有的声音文件,而不打包声音缓存。 如果您希望避免让用户直接修改游戏文件,这是唯一的选择,因为附加内容的声音缓存优先级最低,并且会被优先级较高的声音缓存覆盖。 从版本2.2.2.6开始,游戏引擎将能够接受以下属性的替换声音文件无需重新构建声音缓存:
扩展名 | 通道 | 格式(ffmpeg_format )
|
编解码器(ffmpeg_codec )
|
编解码器配置文件 | 位深(bit) | 采样率(Hz) | 比特率(kbps) |
---|---|---|---|---|---|---|---|
.wav
|
任意 | s16le
|
adpcm_ms
|
N/A | 4* | 任意 | 采样率依赖 |
pcm_s16le
|
16 | ||||||
u8
|
pcm_u8
|
8 | |||||
.mp3
|
单声道 立体声 |
mp3
|
libmp3lame
|
ABR CBR VBR |
N/A | 44100 22050 11025 |
32‒320 |
如果您希望您的替换声音正常播放,则必须遵循原始声音的声音缓存条目中的信息:
- 文件大小
- 声音时长
- 循环点 (如果是WAV文件)
- 采样率
- 通道数
您的替换文件属性应尽可能接近(如果不是完全相同的话)原始文件,以避免异常播放。 如果您尝试在不重新构建声音缓存的情况下播放替换声音,以下情况可能会发生:
扩展名 | 改变了通道数量? | 改变了格式? | 改变了编解码器? | 改变了编解码器配置文件? | 改变了位深? | 改变了采样率? | 改变了比特率? | 小于原始文件? | 大于原始文件? | 改变了循环点? |
---|---|---|---|---|---|---|---|---|---|---|
.wav
|
播放混乱 | N/A | 播放混乱 | 播放速度错误 | N/A | 非循环时正常播放; 循环时可能播放异常 |
截断播放 | 无变化 | ||
.mp3
|
正常播放 | N/A | 正常播放 | N/A | 正常播放 | 截断播放 | N/A |
位置很重要!
例如,滚动字幕的音乐music/unalive/themonsterswithin.wav会覆盖几乎所有其他声音。如果该声音文件(以及声音脚本条目)被移动到不同的目录,音乐的表现会有所不同。玩家会听到其他声音与结尾字幕混合播放,例如僵尸呻吟、幸存者的评论、声音景观等。
一个名为soundmixers的功能可能是负责声音优先级/压制的脚本。声音文件在sound目录中的位置会动态控制前景播放的声音以及被软化或静音的声音。脚本位于scripts\soundmixers.txt文件中,包含在pak01_dir.vpk中。有关如何提取脚本以查看详细信息,请参阅GCFScape 。
循环
需要循环的声音必须通过第三方程序进行循环。有关详细信息,请参阅Looping a Sound 。
循环示例:坦克战斗音乐、发动机声音、被猎人攻击的音乐、玩家在酸池中的音乐。
声音脚本
每个地图的声音脚本似乎是创建自定义或修改声音脚本 条目的唯一方法。全新的声音脚本条目可以轻松创建,或者可以安全地覆盖现有的声音脚本条目(例如Event.Tank
)来为单个地图定制。当测试或发布时,结果是一个包含每个地图的<map name>_level_sounds.txt的地图文件夹。
用文本编辑器打开<map name>_level_sounds.txt。
有关更多详细信息,请参阅L4D2 Soundscripts 。
声音脚本条目
条目 可以通过控制台或实体(例如ambient_generic或ambient_music)在游戏中播放。一个条目的示例:
entry.name { channel CHAN_AUTO volume VOL_NORM pitch PITCH_NORM soundlevel SNDLVL_NORM wave common/null.wav }
如果某个值包含空格或制表符,请将其用引号括起来。
声音脚本的常见使用
所有官方游戏内音效、发声和音乐都依赖声音脚本来调整声音的通道、音量、音高等。使用maps/<map name>_level_sounds.txt,您可以自定义现有条目,而不会与其他附加内容和官方战役发生冲突。只需将您希望更改的条目复制到每个地图的声音脚本中。
声音脚本条目可以通过打开pak01_dir.vpk并访问scripts/game_sounds_*.txt文件夹找到。
许多音乐条目依赖于地图属性 > 后缀字符串 ,该属性可在Hammer 和导航网格属性 中找到。例如,地图c5m1_waterfront.bsp的后缀字符串为"BigEasy",并且在游戏中播放其风格的介绍音乐,其中导航网格标记为PLAYER_START
和CHECKPOINT
。
有趣的声音脚本
所有的声音脚本都很有趣。以下是其中几个:
- game_sounds_music.txt提供了很好的音乐声音脚本条目示例。一些条目将同一乐器的不同音符串联在一起,并随机播放。
- game_sounds_physics.txt包含在游戏交互期间播放的声音条目,例如走在雪地上或射击混凝土墙的声音。
声音景观
L4D2中的自定义soundscapes 似乎能够很好地工作,无需修改官方的声音景观清单。它们是“每图”文本文件,类似于声音脚本,但位于scripts文件夹中:scripts/soundscapes_<map name>.txt。声音景观通常使用.wav文件,通常涉及循环 。.mp3文件也可能有效(不支持循环)。
因为声音景观是“每图”的,每个地图都需要一个声音景观文件。
为了避免复制粘贴整个脚本并跟踪所有声音景观文件中的更改,您可以创建一个“主”声音景观,包含所有必要的内容,而其他所有声音脚本文件只需“包含”主脚本。这样主脚本中的所有更改都会自动加载到所有其他脚本中。
例如:
#include "soundscapes_mymap_master.txt"
- 声音景观实体
官方地图 仅使用env_soundscape来进行关卡声音设计。其他实体和方法可能无法按预期工作。欢迎进行实验!
测试
测试自定义声音脚本条目非常简单,只需创建最新的sound.cache,重新启动游戏,然后在地图中播放声音。如附加组件教程 中所述,sound.cache通过控制台命令snd_buildsoundcachefordirectory ..\left4dead2\<sound文件夹位置>
构建。当声音缓存成功创建或更新时,控制台会输出在附加组件sound目录中找到的声音文件数量。
通过控制台
- 打开<map name>.bsp
map <map name> coop
- 测试声音
playgamesound entry.name
- 在大多数情况下,如果声音拒绝停止播放,可以通过以下命令停止声音
stopsound
通过实体
- 创建一个ambient_generic 、ambient_music 或任何其他具有需要声音名称属性的实体提示:对于ambient_generic,如果声音文件被编程为循环 (文件本身),则需要取消选中“is NOT looped”标志,以便通过输入
StopSound
停止声音的持续循环。ambient_music 没有此标志,循环应该按预期工作。 - 更改targetname 并更改声音名称为您选择的声音脚本条目
- 可选:创建一个触发声音的实体(如果需要或希望)
- 通过控制台打开<map name>.bsp
map <map name> coop
- 通过“触发实体”或控制台命令测试声音:
ent_fire <ambient_generic targetname> PlaySound
注意:ambient_generic还具有FadeIn
和FadeOut
输入功能。 - 在大多数情况下,如果声音由于某种原因拒绝停止播放,可以通过控制台停止声音。请考虑这些声音实体的bug ,如果您需要使用实体I/O来
StopSound
。stopsound //这是控制台命令,格式与这两个声音实体的输入一样。
发布
如L4D2 Campaign Add-on Tutorial 中所述,最终的、很可能是单独的VPK将包含您的战役或单地图的所有独特资源。在自定义声音方面,只需复制您一直在使用的声音文件夹和每图的声音脚本。恭喜您完成发布!
另见
- L4D2 Campaign Add-on Tutorial - 创建sound.cache文件
- ambient_generic
- ambient_music
- 求生之路 2 战役音乐列表
- Looping a Sound
- Music Composition
- Sound and Music
- 音频缓存
- Sound Download Sites
- sound_mix_layer
- 音景
- env_soundscape
- env_soundscape_triggerable
- trigger_soundscape
- 声音脚本
- 分类:声音系统
外部链接
- Gamasutra Game Audio Theory: Ducking - ‘Ducking’,即降低音景音量,可以为听众创造更大的参与感。
- Podcast 17 Mike Morasky Interview - 讨论音频制作及对声音系统演变的洞察。